聊聊ESP8266的SDK(ESP8266_RTOS_SDK v3.3 環境搭建)
ESP8266_RTOS_SDK發行版本v3.3-rc1環境搭建
在大學期間玩8266所接觸的都無作業系統版本的SDK,但後來接觸了ESP32後發現ESP8266也推出了RTOS版本,一直都沒來得及去更新版本,今天終於有時間了,技術永遠是向前進的,人也是,要不斷的追逐。
認識一下ESP8266 SDK
ESP8266 SDK
ESP8266 Software Development Kit (SDK)是樂鑫為開發者提供的物聯網(IOT)應用開發平台,包括基礎平台以及上層應用開發示例,如智慧燈、智慧開關等。
SDK的基礎平台按照是否基於作業系統可分為:non-OS和RTOS兩種版本。
Non-OS SDK:
它是不基於作業系統的SDK,提供IOT_Demo和AT的編譯。Non-OS SDK主要使用定時器和回調函數的方法實現各個功能事件的嵌套,達到特定條件下觸發特定功能函數的目的。Non-OS SDK使用espconn介面實現網路操作,用戶安裝espconn介面的使用規則進行軟體開發。
RTOS SDK
- 它是基於FreeRTOS,在GitHub上開源。
- RTOS版本SDK使用FreeRTOS系統,引入OS多任務處理機制,用戶可以使用FreeRTOS的標準介面實現資源管理、循環操作、任務內延時、任務間資訊傳遞和同步等面向任務流程的設計方式。具體介面使用方法參考FreeRTOS官方網站的使用功能說明或者USING THE FreeRTOS REAL TIME KERNEL—A Practical Guide 介紹。
- RTOS版本SDK的網路操作介面是標準的lwIP API,同時提供了BSD Socket API介面的封裝實現,用戶可以直接安裝Socket API的使用方式來開發軟體應用,也可以直接編譯運行其他平台的標準Socket應用,有效降低平台切換的學習成本。
- RTOS版本SDK引入了CJSON庫,使用該庫函數可以更加方便的實現對JSON數據包的解析。
- RTOS版本兼容non-OS SDK中WiFi介面、SmartConfig介面、Sniffer相關介面、系統介面、定時器介面、FOTA介面和外圍驅動介面,不支援AT實現。
安裝與測試
參考:
//docs.espressif.com/projects/esp8266-r tos-sdk/en/latest/get-started/windows-setup.html
資料下載
下載工具鏈和sdk:
//dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip
//dl.espressif.com/dl/xtensa-lx106-elf-win32-1.22.0-100-ge567ec7-5.2.0.zip
//github.com/espressif/ESP8266_RTOS_SDK/releases/tag/v3.3-rc1
下載完成
準備工具鏈
解壓esp32_win32_msys2_environment_and_toolchain-20181001.zip
雙擊msys32/mingw32.exe
在工具鏈中添加idf目錄,sdk路徑
D:\AAESP8266\AIDF\SDK\ESP8266_RTOS_SDK-v3.3-rc1
再次打開msys32/mingw32.exe
輸入
printenv IDF_PATH
開始測試
將SDK\ESP8266_RTOS_SDK-v3.3-rc1\examples\get-started的hello_world複製到自己新建的文件夾ESP8266_RTOS_SDK-v3.3-rc1\dongpro中
在編譯工具打開該文件夾
cd /d/AAESP8266/AIDF/SDK/ESP8266_RTOS_SDK-v3.3-rc1/dongpro/hello_world
配置工程
make menuconfig
報錯
make: *** 沒有規則可製作目標「check_python_dependencies」,由「menuconfig」 需求。 停止。
解決方法
python -m pip install --user -r $IDF_PATH/requirements.txt
此處如果遇到紅色報警,必須再次運行下載命令,直至成功
開始測試(再次)
配置工程
make menuconfig
配置你的串口和flash大小
保存後退出
報錯
make:xtensa-lx106-elf-gcc:命令未找到
expr: syntax error: unexpected argument 「5.2.0」
解決方法
將剛剛下載的xtensa-lx106-elf-win32-1.22.0-100-ge567ec7-5.2.0.zip解壓到msys32\opt目錄下
將它添加到工具鏈環境變數$PATH中,其方法與添加idf一樣
重啟工具鏈再次測試
配置工程
make menuconfig
清除工程
make clean
編譯工程
make all
編譯和燒寫工程
make flash
查看串口輸出
make monitor
ESP8266下載準備:
將IO0接地,重啟即可進入下載模式
下載完後將IO0懸空,重啟即可開始運行程式
編譯完成
下載完成
查看效果
為啥ESP8266波特率是74800,因為74800是設備上電日誌列印的波特率,如果想更改下面的倒計時等數據列印的波特率可以在工程中添加串口波特率初始化程式碼即可,如下:
#include "driver/uart.h"//導入串口頭文件 uart_set_baudrate(UART_NUM_0,115200);//初始化波特率為115200
修改Hellow工程
1 #include <stdio.h> 2 #include "freertos/FreeRTOS.h" 3 #include "freertos/task.h" 4 #include "esp_system.h" 5 #include "esp_spi_flash.h" 6 #include "driver/uart.h"//導入串口頭文件 7 void app_main() 8 { 9 uart_set_baudrate(UART_NUM_0,115200);//初始化波特率為115200 10 printf("Hello world!\n");//輸出程式設計師的標準問好 11 //晶片資訊 12 esp_chip_info_t chip_info; 13 esp_chip_info(&chip_info); 14 printf("東小東:This is ESP8266 chip with %d CPU cores, WiFi, ",chip_info.cores); 15 printf("silicon revision %d, ", chip_info.revision); 16 //flash資訊,大小和類型(外部) 17 printf("東小東:%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024), 18 (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external"); 19 //使用freertos計時函數倒計時 20 for (int i = 10; i >= 0; i--) { 21 printf("東小東:Restarting in %d seconds...\n", i); 22 vTaskDelay(1000 / portTICK_PERIOD_MS); 23 } 24 printf("東小東:Restarting now.\n"); 25 fflush(stdout);//刷新輸出 26 esp_restart();//重啟 27 }
最終效果:
8266的RTOS版本的注意事項
版本 1.5 版權 © 2017
//www.espressif.com/sites/default/files/documentation/20a-esp8266_rtos_sdk_programming_guide_cn.pdf
l 建議使⽤定時器實現⻓時間的查詢功能,可將定時器設置為循環調⽤,注意:
1 定時器(freeRTOS timer 或 os_timer)執⾏函數內部請勿使⽤ while(1) 或其他能阻塞執行緒的⽅式延時,例如,不能在定時器回調中進⾏ socket send 操作,因為send 函數會阻塞執行緒;
2 定時器回調執⾏請勿超過 15 ms;
3 os_timer_t 建⽴的變數不能為局部變數,必須為全局變數、靜態變數或os_malloc 分配的指針。
l 從 ESP8266_RTOS_SDK_v1.2.0 起,⽆需添加宏 ICACHE_FLASH_ATTR,函數將默認存放在 CACHE 區,中斷函數也可以存放在 CACHE 區;如需將部分頻繁調⽤的函數定義在 RAM 中,請在函數前添加宏 IRAM_ATTR;
l ⽹絡編程使⽤通⽤的 socket 編程,⽹絡通訊時,socket 請勿綁定在同⼀端⼝;
l freeRTOS 作業系統及系統⾃帶的 API 說明請參考 //www.freertos.org; 這裡要注意的是8266在創建任務的時候使用的是freertos自帶的字為單位,而ESP32中是以位元組為單位的。
l RTOS SDK 的系統任務最⾼優先順序為 14,創建任務的接⼝ xTaskCreate 為freeRTOS ⾃帶接⼝,使⽤ xTaskCreate 創建任務時,任務堆棧設置範圍為 [176,512]。
1 在任務內部如需使⽤⻓度超過 60 的⼤數組,建議使⽤ os_malloc 和 os_free 的⽅式操作,否則,⼤數組將佔⽤任務的堆空間;
2 SDK 底層已佔⽤部分優先順序:watchdog task 優先順序 14,pp task 優先順序 13,⾼精度 timer (ms) 執行緒優先順序 12,TCP/IP task 優先順序 10,freeRTOS timer 優先順序2,Wi-Fi event 優先順序為 2,idle task 優先順序為 0;
3 可供⽤戶任務使⽤的優先順序為 1 ~ 9;但注意,⽤戶任務請勿始終占⽤ CPU,導致低優先順序的系統任務⽆法執⾏;
4 請勿修改 FreeRTOSConfig.h,此處修改頭⽂件並不能⽣效,設置由 SDK 庫⽂件決定。
樂鑫文檔集合
//www.espressif.com/zh-hans/support/documents/technical-documents
開源地址
//github.com/espressif/ESP8266_RTOS_SDK
編程手冊
//docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html
參考安裝文檔
//blog.csdn.net/u010177891/article/details/92016695