ESP8266_RTOS_SDK發行版本v3.3-rc1環境搭建html
在大學期間玩8266所接觸的都無操做系統版本的SDK,但後來接觸了ESP32後發現ESP8266也推出了RTOS版本,一直都沒來得及去更新版本,今天終於有時間了,技術永遠是向前進的,人也是,要不斷的追逐。python
ESP8266 SDKgit
ESP8266 Software Development Kit (SDK)是樂鑫爲開發者提供的物聯網(IOT)應用開發平臺,包括基礎平臺以及上層應用開發示例,如智能燈、智能開關等。程序員
SDK的基礎平臺按照是否基於操做系統可分爲:non-OS和RTOS兩種版本。github
Non-OS SDK:編程
它是不基於操做系統的SDK,提供IOT_Demo和AT的編譯。Non-OS SDK主要使用定時器和回調函數的方法實現各個功能事件的嵌套,達到特定條件下觸發特定功能函數的目的。Non-OS SDK使用espconn接口實現網絡操做,用戶安裝espconn接口的使用規則進行軟件開發。windows
RTOS SDK數組
參考:網絡
https://docs.espressif.com/projects/esp8266-r tos-sdk/en/latest/get-started/windows-setup.html app
資料下載
下載工具鏈和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同樣
重啓工具鏈再次測試
配置工程
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 }
最終效果:
版本 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
參考安裝文檔