ESP32-C3 使用 Rust 开发 HTTP 服务器
这是ESP-IDF提供的一个示例代码,使用Rust开发HTTP服务器。 protocols/http_server/restful_server
演示了如何实现 RESTful API 服务器和 HTTP 服务器,并结合前端浏览器 UI,设计了多个 API 来获取资源,使用 mDNS 解析域名,并通过半主机技术将网页部署到主机 PC、SPI flash 或 SD 卡上。
主要参考:
1.前端页面如何存储的?
本程序在使用了VUE开发一个前端页面。这个页面要想使用,需要先将页面上传至单片机(如果使用
spiffs
,需要将页面上传至spiffs
)。编译前端,直接使用
npm run build
命令,会生成一个dist
文件夹,需要将这个文件夹中的内容上传至单片机即可。上传之前需要在 spiffs 中配置一个分区,用于存储前端页面。如何创建了,那就用到了分区表。 在此程序中,我们自定义了一个分区表。
partitions_example.csv
这个文件就是用来定义分区的。txt# Name, Type, SubType, Offset, Size, Flags # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 1M, www, data, spiffs, , 2M,
在这个表中,可以看到
www
这个分区,这个分区就是用来存储前端页面的。www
这个分区的类型是spiffs
,大小是2M
。分区表如何在单片机中生效的呢?答案时,编译程序后,会生成一个分区表文件
partitions.bin
. 这个文件会被烧录到单片机的0x8000
位置,这样分区表就生效了。如何将前端页面上传至单片机呢? 在
main
目录下有一个CMakeLists.txt
文件,查看一下这个文件的内容。makefileidf_component_register(SRCS "esp_rest_main.c" "rest_server.c" PRIV_REQUIRES esp_http_server esp_driver_gpio fatfs json spiffs nvs_flash INCLUDE_DIRS ".") if(CONFIG_EXAMPLE_WEB_DEPLOY_SF) set(WEB_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../front/web-demo") if(EXISTS ${WEB_SRC_DIR}/dist) spiffs_create_partition_image(www ${WEB_SRC_DIR}/dist FLASH_IN_PROJECT) else() message(FATAL_ERROR "${WEB_SRC_DIR}/dist doesn't exit. Please run 'npm run build' in ${WEB_SRC_DIR}") endif() endif()
在这个文件中,有
spiffs_create_partition_image
这个命令,这个命令就是用来将前端页面上传至单片机的。这个命令是 ESP-IDF 提供的一个命令.通过以上处理后,我们单片机里面的www分区里面,就有了前端页面。剩下的就是如何将前端页面显示出来了。
2.功能是如何实现的?
nvs初始化
esp-netif 初始化
esp-netif 事件处理
初始化 mdns
netbiosns 初始化
wifi连接 -
example_connect
- wifi连接 -
example_wifi_connect
- 启动wifi -
example_wifi_start
- 初始化wifi -
esp_wifi_init
- netif 创建wifi -
esp_netif_create_wifi
- netif 工作模式设置 -
esp_wifi_set_default_wifi_sta_handlers
- 设置wifi存储 -
esp_wifi_set_storage
- 设置工作模式 -
esp_wifi_set_mode
- 启动wifi -
esp_wifi_start
- 初始化wifi -
- 启动wifi连接 -
example_wifi_sta_do_connect
- 启动wifi -
- 注册掉线回调函数 -
esp_register_shutdown_handler
- 打印连接信息 -
example_print_all_netif_ips
- wifi连接 -
初始化fs
启动 http 服务器