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實現。
安裝與測試
參考:
https://docs.espressif.com/projects/esp8266-r tos-sdk/en/latest/get-started/windows-setup.html
資料下載
下載工具鏈和sdk:
https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip
https://dl.espressif.com/dl/xtensa-lx106-elf-win32-1.22.0-100-ge567ec7-5.2.0.zip
https://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一樣
兩個PATH其實有替換效果,第3行的PATH應該刪除,只保留第4行的內容
重啟工具鏈再次測試
配置工程
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
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 說明請參考 http://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 庫⽂件決定。
樂鑫文檔集合
https://www.espressif.com/zh-hans/support/documents/technical-documents
開源地址
https://github.com/espressif/ESP8266_RTOS_SDK
編程手冊
https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html
參考安裝文檔