聊聊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實現。

安裝與測試

參考:

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一樣

重啓工具鏈再次測試

配置工程

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

https://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 說明請參考 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

參考安裝文檔

https://blog.csdn.net/u010177891/article/details/92016695

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章