還在為MCU的WiFi連接方案發(fā)愁?RT-Thread社區(qū)開(kāi)源ESP-Hosted驅(qū)動(dòng),通過(guò)標(biāo)準(zhǔn)SPI接口即可實(shí)現(xiàn),并且該倉(cāng)庫(kù)已整理成RT-Thread軟件包。RT-Thread ESP-Hosted項(xiàng)目在 MIT license下作為一個(gè)整體,但包含第三方代碼在其他許可下。請(qǐng)仔細(xì)閱讀以下不同許可代碼的說(shuō)明。
目錄

用途
概述
使用
硬件連接
構(gòu)建ESP32固件
檢查啟動(dòng)
固件更新
芯片支持
1
用途
用于MCU的spi接口WiFi驅(qū)動(dòng),適用于已適配RT-Thread的MCU。
已接入RT-Thread的spi設(shè)備驅(qū)動(dòng)和wlan框架,與硬件無(wú)關(guān)代碼。
該驅(qū)動(dòng)使用rt-thread標(biāo)準(zhǔn)的spi設(shè)備通訊,wlan框架實(shí)現(xiàn)wifi命令行的支持
提供esp-idf命令一樣的WiFi API調(diào)用
上代碼:rt-thread_esp-hosted(https://github.com/Evlers/rt-thread_esp-hosted)
2
概述
該存儲(chǔ)庫(kù)已將 ESP-Hosted-MCU適配于 RT-Thread 系統(tǒng),?前僅?持SPI總線協(xié)議,并使? RT-Thread 的 SPI Device 進(jìn)?SPI總線操作。
這個(gè)版本的ESP-Hosted提供:
?個(gè)標(biāo)準(zhǔn)的802.3?絡(luò)接?,?于發(fā)送和接收802.3幀
?持藍(lán)?/BLE的標(biāo)準(zhǔn)HCI接?
ESP32芯?配置和控制Wi-Fi的控制接?
?于升級(jí)ESP固件的OTA接?
ESP-Hosted-MCU解決?案利?主機(jī)現(xiàn)有的 TCP/IP 和 藍(lán)牙/BLE 協(xié)議棧 和 SPI/SDIO/UART 等硬件外設(shè) 連接到ESP固件,軟件層非常薄。
雖然這個(gè)項(xiàng)目沒(méi)有為主機(jī)提供標(biāo)準(zhǔn)的802.11接口,但它提供了?種簡(jiǎn)單的方法,既Remote Procedure Calls(RPCs)用于配置Wi-Fi。對(duì)于主機(jī)和ESP板之間的RPC,ESP-Hosted-MCU使用了Protobuf (https://developers.google.com/protocol-buffers),這是?種獨(dú)立于語(yǔ)?的數(shù)據(jù)序列化機(jī)制。
關(guān)于ESP-Hosted-MCU的詳細(xì)信息可以在ESP-Hosted README (https://github.com/Evlers/rt-thread_es
p-hosted/blob/master/esp-hosted/README.md)中找到。
3
使用
1添加這個(gè)倉(cāng)庫(kù)
將存儲(chǔ)庫(kù)克隆到RT-Thread項(xiàng)目中的 packages 或 libraries 目錄。
在RT-Thread項(xiàng)目的 libraries 或 packages 文件夾中,在其Kconfig文件中包含用于ESP-Hosted 的 Kconfig 文件。
例如,將 ESP-Hosted 包含在 libraries 目錄中:
menu "External Libraries"source "$RTT_DIR/../libraries/rt-thread_esp-hosted/Kconfig"endmenu
2配置 ESP-Hosted
在 env 窗口中使用 menuconfig 命令
選中 Using esp-hosted for espressif
→ External Libraries[*] Using esp-hosted for espressif --->
進(jìn)入Using esp-hosted for espressif 菜單,配置esp-hosted:
--- Using esp-hosted for espressifESP-Hosted Configure ---> # ESP-Hosted 配置Select the transport interface(SPI) ---> # 選擇傳輸接口Slave chipset to be used(Slave as ESP32C6) ---> # 選擇從機(jī)芯片[ ] Enable raw throughput transport ---- # 啟用原始吞吐量傳輸[ ] Enable Transport level packet statistics # 啟用傳輸級(jí)別數(shù)據(jù)包統(tǒng)計(jì)(8) The maximum number of simultaneous sync rpc requests # 同步RPC請(qǐng)求的最大數(shù)量(8) The maximum number of simultaneous async rpc requests # 異步RPC請(qǐng)求的最大數(shù)量(20) The priority of the esp-hosted rpc thread # RPC線程的優(yōu)先級(jí)(5120) The stack size of the esp-hosted rpc thread # RPC線程的堆棧大小(20) The priority of the esp-hosted transport thread # 傳輸線程的優(yōu)先級(jí)(1024) The stack size of the esp-hosted SPI thread # SPI線程的堆棧大小(8) The number for esp-hosted SPI queue # SPI傳輸隊(duì)列的數(shù)量(esp-hosted) Set the spi device name # SPI設(shè)備名稱(spi1) Set the spi bus name # SPI總線名稱(30000000) Set the maximum spi frequency(Hz) # SPI傳輸?shù)淖畲箢l率Select the pin name ornumber(Name) ---> # 選擇引腳名稱或編號(hào)(PE.7) Set the SPI CS pin name # SPI CS引腳名稱(PE.5) Set the data ready pin name # 數(shù)據(jù)就緒引腳名稱(PE.6) Set the handshake pin name # 握手引腳名稱(PE.4) Set the reset pin name # 復(fù)位引腳名稱[*] Use thread initialization # 使用線程初始化(2048) The stack size of the init thread # 初始化線程的堆棧大小(20) The priority of the init thread # 初始化線程的優(yōu)先級(jí)[*] Enable Bluetooth ---> # 啟用藍(lán)牙/BLE HCI接口Select hci interface(Using vhci device drivers) ---> # 選擇HCI接口(vhci) The vhci device name # vhci設(shè)備名稱Wi-Fi Configure ---> # Wi-Fi 配置(40) Max number of WiFi static RX buffers # 靜態(tài)RX緩沖區(qū)最大數(shù)量(60) Max number of WiFi dynamic RX buffers # 動(dòng)態(tài)RX緩沖區(qū)最大數(shù)量Type of WiFi TX buffers(Dynamic) ---> # WiFi TX緩沖區(qū)類型(16) Max number of WiFi cache TX buffers # WiFi TX緩存最大數(shù)量(40) Max number of WiFi dynamic TX buffers # TX動(dòng)態(tài)緩沖區(qū)最大數(shù)量[ ] WiFi CSI(Channel State Information) # Wi-Fi CSI[ ] WiFi AMPDU TX # AMPDU TX(數(shù)據(jù)聚合)[ ] WiFi AMPDU RX # AMPDU RX(數(shù)據(jù)聚合)(752) Max length of WiFi SoftAP Beacon # SoftAP Beacon最大長(zhǎng)度(32) WiFi mgmt short buffer number # WiFi mgmt short buffer數(shù)量[*] Enable WPA3-Personal # WPA3-Personal[ ] WiFi FTM # WiFi FTM[*] Power Management for station at disconnected # Wi-Fi PM[ ] WiFi GCMP Support(GCMP128 and GCMP256) # Wi-Fi GCMP[ ] WiFi GMAC Support(GMAC128 and GMAC256) # Wi-Fi GMAC(7) Maximum espnow encrypt peers number # espnow加密對(duì)等數(shù)量[ ] Enable 802.11R(Fast Transition) Support # 802.11R
ESP-Hosted Configure 菜單中,主要是 傳輸接口 ,從機(jī)芯片 以及 傳輸以為的引腳 配置,其他的默認(rèn)即可。
Select hci interface 選項(xiàng)用于選擇使用 vhci設(shè)備驅(qū)動(dòng) 或者 NimBLE hci 驅(qū)動(dòng) 的HCI接口。
選擇 vhci設(shè)備驅(qū)動(dòng) 將創(chuàng)建一個(gè) 字符類型 設(shè)備,該設(shè)備將模擬藍(lán)牙HCI接口。
選擇 NimBLE hci 驅(qū)動(dòng) 將直接接入 NimBLE 協(xié)議棧。
Wi-Fi Configure 菜單中,主要是關(guān)于 ESP32 的 WiFi 參數(shù)配置。
WiFi AMPDU TX 和 WiFi AMPDU RX 選項(xiàng)建議關(guān)閉,在測(cè)試中發(fā)現(xiàn)開(kāi)啟后,Wi-Fi容易丟包,可能是由于路由器不遵循標(biāo)準(zhǔn)協(xié)議導(dǎo)致。
4
硬件連接

如果您熟悉esp-idf,您也可以嘗試修改引腳
或者使? Flash Download Tool (https://dl.espressif.com/public/flash_download_tool.zip) 燒錄 firmware 目錄中對(duì)應(yīng)芯片的固件。
5
構(gòu)建ESP32固件
cd esp-hosted/slaverm -rf sdkconfig buildidf.py set-target <esp_chipset>
其中 可以是 “esp32”, “esp32s2”, “esp32s3”, “esp32c2”, “esp32c3”, “esp32c5”, “esp32c6”
執(zhí)行以下命令配置項(xiàng)目
idf.py menuconfig這將打開(kāi)項(xiàng)目配置窗口。 要選擇SPI傳輸接口,導(dǎo)航到 ESP-Hosted Configuration -> Transport layer -> SPI interface -> select 然后退出菜單配置。
要構(gòu)建并燒錄應(yīng)用程序到ESP設(shè)備,請(qǐng)運(yùn)行
idf.py -p <serial_port> build flash收集ESP固件日志使用
idf.py -p <serial_port> monitor6
檢查啟動(dòng)
1從機(jī)日志
在成功燒錄后,您應(yīng)該在ESP日志中看到以下信息:
I (412) NETWORK_ADAPTER: *********************************************************************I (422) NETWORK_ADAPTER: ESP-Hosted-MCU Slave FW version :: 1.0.0I (432) NETWORK_ADAPTER: Transport used :: SPI onlyI(442) NETWORK_ADAPTER: *********************************************************************
2主機(jī)日志
您應(yīng)該在主機(jī)日志中看到以下信息:
\ | /- RT - Thread Operating System/ | \ 5.0.2 build Feb 15202509:39:292006 - 2022 Copyright by RT-Thread teamlwIP-2.1.2 initialized![] I/SFUD: Found a Winbond flash chip. Size is 16777216 bytes.[] I/SFUD: norflash flash device initialized successfully.[] I/SFUD: Probe SPI flash norflash by SPI device spiflash success.[] RT-Thread Flash Abstraction Layer initialize success.[] I/sal.skt: Socket Abstraction Layer initialize success.[] The FAL block device(filesystem) created successfully[154] I/SDIO: SD card capacity 31166976 KB.found part[0], begin: 2097152, size: 29.738GB[167] I/filesystem: sd card mount to '/sdcard'[1265] I/transport: Features supported are:[1266] I/transport: - WLAN over SPI[1269] I/transport: - HCI over SPI[1273] I/transport: - BLE only[1276] I/transport: Chip is: ESP32c6[1279] I/vhci.dev: Host BT Support: Enabled[1283] I/vhci.dev: BT Transport Type: vhci devices[2387] I/WLAN.dev: wlan init success[2424] I/WLAN.lwip: eth device init ok name:w0[2426] I/WLAN.dev: wlan init success[2444] I/WLAN.lwip: eth device init ok name:w1
7
固件更新
ESP-Hosted 支持通過(guò)傳輸接口升級(jí) ESP32 固件,升級(jí)過(guò)程如下:
msh />esp_ota /flash/network_adapter.binesp-hosted ota update startederasing the ota partition..writing: [==================================================] 100% 1084496 | 100 KB/sfirmware write success!!slave will restart after 5 sec
esp_ota 命令可以支持 在線下載 或者 本地文件 作為固件升級(jí)包。
在線下載 方式需要依賴 webclient 軟件包:
msh />esp_ota https://file.server.com/network_adapter.binesp-hosted ota update startederasing the ota partition..writing: [==================================================] 100% 1084496 | 81 KB/sfirmware write success!!slave will restart after 5 secmsh />
8
芯片支持

‘x’ 表示不支持
‘o’ 表示已測(cè)試和支持
‘*’ 表示理論上支持,但未經(jīng)檢驗(yàn)的



想要在RT-Thread平臺(tái)或社區(qū)投放內(nèi)容?
或想?yún)⑴c相關(guān)直播活動(dòng)及賽事?
RT-Thread已開(kāi)放對(duì)接窗口,
請(qǐng)通過(guò)郵件與我們?nèi)〉寐?lián)系,期待合作!
合作郵箱: tongfangyi@rt-thread.com
