ESP8266使用筆記之常用固件


開發板使用的是NodeMCU開發板

目錄

1.學習使用ESP8266官方的SDK

        1.1使用SDK提供的AT固件

        1.2使用SDK Build固件

2.學習使用NodeMCU固件(上層可使用Lua開發)和MicroPython固件(上層可使用MicroPython開發)

 

學習使用ESP8266官方的SDK 

使用AT固件:

下載開發包:esp8266_nonos_sdk_v1.5.4.7z,/bin/目錄里面包含已經編譯好的固件,NodeMCU上ESP8266模塊帶的SPI ROM大小為4MB,

參考2a-esp8266-sdk_getting_started_guide_cn.pdf:

 

使用燒寫工具nodemcu-flasher燒寫:

 

ai-think串口調試助手內置了常用的AT指令,比如發送 AT+GMR 可以獲取版本信息:

 

使用SDK Build固件

下載esp8266_nonos_sdk_v1.5.4.7z,以其中IoT_Demo為例,熟悉固件的編譯:樂鑫針對 ESP8266 提供兩種SDK:NON-OS SDK 和 RTOS SDK(基於FreeRTOS):

 

1.修改源程序:

因為我使用的NodeMCU上的SPI ROM大小為4MB

參考2b-esp8266_non-os_sdk_iot_demo_guide_cn.pdf,需要修改下面的配置(\examples\IoT_Demo\):

在應用的入口點添加一個輸出:

 

2.編譯固件

(使用VirtualBox+官方基於lubuntu的編譯環境:ESP8266_lubuntu_20141021.ova):

把修改過的 \examples\IoT_Demo\ 拷貝到 /ESP8266_NONOS_SDK/ 的根目錄,切換到\ESP8266_NONOS_SDK\IoT_Demo\:

 

執行編譯:

按照提示選擇:2(noboot)-0-2-0-4(4096KB)

 

編譯完成:會在\ESP8266_NONOS_SDK\bin\目錄生成這兩個文件:

 

3.重新燒錄編譯的固件,只需要更新編譯生成的兩個(offset分別為:0x00000和0x40000):

 

使用串口工具:波特率為74880(去源代碼里面看)

 

這時PC會發現名為:ESP_6CE44B(后面的數字是MAC地址的后6位)的 AP(閱讀user_init()會發現其中配置了開發板的AP功能),下圖(左邊是開發板打印出來的信息,可以看到開發板獲取到了PC的MAC地址)是PC連上該 AP的信息:

 

通過網絡調試助手簡單分析一下ESP SDK API:

下圖是ESP8266固件大致的初始化流程:

下圖是使用網絡調試助手與NodeMCU通信的截圖:

 

小結:

1. ESP8266_NONOS_SDK-2.0.0提供了大量API供應用程序調用,user_init()就是應用程序的入口點;

2. SDK 以庫文件的形式提供,API參考:2c-esp8266_non_os_sdk_api_reference_cn.pdf;

 

NodeMCU固件和MicroPython固件

NodeMCU固件是針對NodeMCU開發板,基於NON-OS SDK開發的固件;NodeMCU固件使用輕量化的腳本語言Lua,並使用基於spiffs的文件系統;

MicroPython固件支持使用MicroPython語言來開發;

上面兩種固件實際上就是把兩種腳本語言的解釋器移植到了ESP8266上,固件開發者基於ESP8266的SDK移植解釋器並實現各種Module,但是NodeMCU只支持ESP8266平台;而MicroPython則支持多種平台,比如ESP8266、ESP32、stm32等等。

 

下面通過點亮開發板上的一個LED來看看如何通過腳本編程硬件:

NoceMCU開發板上有2個LED,一個位於ESP8266模塊上,該LED接GPIO2,把GPIO2拉低可以點亮LED;還有一個LED位於USB轉串口芯片旁邊,該LED接GPIO16,把GPIO16拉低可以點亮改LED。

 

使用NodeMCU固件

燒寫工具nodemcu-flasher自帶一個NodeMCU固件:nodemcu-flasher-master\Resources\Binaries\nodemcu_integer_0.9.5_20150318.bin

小結一下: 

1. nodemcu默認執行的腳本是init.lua,如果找不到就顯示命令提示符">"用來接收串口發來的指令;

2. nodemcu固件里面GPIO16的index被設成了0(led = 0);

3. 網站:https://nodemcu-build.com/index.php提供了Build NodeMCU固件的服務,其中可以定制固件需要支持的Module。

 

NodeMCU固件

應用入口點位於:nodemcu-firmware-master\app\user\user_main.c::user_init(),system_init_done_cb()是ESP8266 SDK提供的API,用於注冊系統初始化完成的回調函數參考:2c-esp8266_non_os_sdk_api_reference_cn.pdf

 

nodemcu_init()最終會調用到下面的代碼來加載init.lua。整個NodeMCU的源代碼可以看成是從user_init()開始構建的一個應用,該應用實現的Lua解釋器的功能。

 

使用MicroPython固件:

http://micropython.org/download#esp8266下載ESP8266平台的MicroPython固件並燒錄。

小結一下:

1.MicroPython固件默認執行的腳本是main.py,如果找不到就顯示命令提示符">>>"用來接收串口發來的指令;

 

MicroPython固件

閱讀MicroPython的源代碼,可以發現MicroPython支持多種平台:ESP8266、ESP32、stm32等。

以ESP8266為例,應用入口點位於micropython-master\ports\esp8266\main.c::user_init(),下圖system_timer_reinit()和system_init_done_cb()是ESP8266 SDK提供的API參考:2c-esp8266_non_os_sdk_api_reference_cn.pdf

init_done()最終會調用到pyexec_file("main.py")來加載main.py,整個MicroPython的源代碼可以看成是從user_init()開始構建的一個應用。

 

以ESP32為例,應用入口點位於micropython-master\ports\esp32\main.c::app_main(),下圖nvs_flash_init()是SDK提供的API,xTaskCreate()是FreeRTOS提供的接口

mp_task()最終會調用到pyexec_file("main.py")來加載main.py。

 

下面的腳本會使ESP8266模塊上的LED按1s間隔閃爍:

 

但是當我們點"Save to ESP",會報錯,原因是Save操作會先打開main.py,然后修改,但是我們開發板上還沒有main.py(如下圖):


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM