python esp8266模块_ESP8266使用笔记之常用固件
開(kāi)發(fā)板使用的是NodeMCU開(kāi)發(fā)板:
目錄
1.學(xué)習(xí)使用ESP8266官方的SDK
1.1使用SDK提供的AT固件
1.2使用SDK Build固件
2.學(xué)習(xí)使用NodeMCU固件(上層可使用Lua開(kāi)發(fā))和MicroPython固件(上層可使用MicroPython開(kāi)發(fā))
學(xué)習(xí)使用ESP8266官方的SDK
使用AT固件:
下載開(kāi)發(fā)包:esp8266_nonos_sdk_v1.5.4.7z,/bin/目錄里面包含已經(jīng)編譯好的固件,NodeMCU上ESP8266模塊帶的SPI ROM大小為4MB,
參考2a-esp8266-sdk_getting_started_guide_cn.pdf:
使用燒寫(xiě)工具nodemcu-flasher燒寫(xiě):
ai-think串口調(diào)試助手內(nèi)置了常用的AT指令,比如發(fā)送 AT+GMR 可以獲取版本信息:
使用SDK Build固件
下載esp8266_nonos_sdk_v1.5.4.7z,以其中IoT_Demo為例,熟悉固件的編譯:樂(lè)鑫針對(duì) ESP8266 提供兩種SDK:NON-OS SDK 和 RTOS SDK(基于FreeRTOS):
1.修改源程序:
因?yàn)槲沂褂玫腘odeMCU上的SPI ROM大小為4MB,
參考2b-esp8266_non-os_sdk_iot_demo_guide_cn.pdf,需要修改下面的配置(\examples\IoT_Demo\):
在應(yīng)用的入口點(diǎn)添加一個(gè)輸出:
2.編譯固件
(使用VirtualBox+官方基于lubuntu的編譯環(huán)境:ESP8266_lubuntu_20141021.ova):
把修改過(guò)的?\examples\IoT_Demo\ 拷貝到 /ESP8266_NONOS_SDK/ 的根目錄,切換到\ESP8266_NONOS_SDK\IoT_Demo\:
執(zhí)行編譯:
按照提示選擇:2(noboot)-0-2-0-4(4096KB)
編譯完成:會(huì)在\ESP8266_NONOS_SDK\bin\目錄生成這兩個(gè)文件:
3.重新燒錄編譯的固件,只需要更新編譯生成的兩個(gè)(offset分別為:0x00000和0x40000):
使用串口工具:波特率為74880(去源代碼里面看):
這時(shí)PC會(huì)發(fā)現(xiàn)名為:ESP_6CE44B(后面的數(shù)字是MAC地址的后6位)的 AP(閱讀user_init()會(huì)發(fā)現(xiàn)其中配置了開(kāi)發(fā)板的AP功能),下圖(左邊是開(kāi)發(fā)板打印出來(lái)的信息,可以看到開(kāi)發(fā)板獲取到了PC的MAC地址)是PC連上該 AP的信息:
通過(guò)網(wǎng)絡(luò)調(diào)試助手簡(jiǎn)單分析一下ESP SDK API:
下圖是ESP8266固件大致的初始化流程:
下圖是使用網(wǎng)絡(luò)調(diào)試助手與NodeMCU通信的截圖:
小結(jié):
1. ESP8266_NONOS_SDK-2.0.0提供了大量API供應(yīng)用程序調(diào)用,user_init()就是應(yīng)用程序的入口點(diǎn);
2. SDK 以庫(kù)文件的形式提供,API參考:2c-esp8266_non_os_sdk_api_reference_cn.pdf;
NodeMCU固件和MicroPython固件
NodeMCU固件是針對(duì)NodeMCU開(kāi)發(fā)板,基于NON-OS SDK開(kāi)發(fā)的固件;NodeMCU固件使用輕量化的腳本語(yǔ)言Lua,并使用基于spiffs的文件系統(tǒng);
MicroPython固件支持使用MicroPython語(yǔ)言來(lái)開(kāi)發(fā);
上面兩種固件實(shí)際上就是把兩種腳本語(yǔ)言的解釋器移植到了ESP8266上,固件開(kāi)發(fā)者基于ESP8266的SDK移植解釋器并實(shí)現(xiàn)各種Module,但是NodeMCU只支持ESP8266平臺(tái);而MicroPython則支持多種平臺(tái),比如ESP8266、ESP32、stm32等等。
下面通過(guò)點(diǎn)亮開(kāi)發(fā)板上的一個(gè)LED來(lái)看看如何通過(guò)腳本編程硬件:
NoceMCU開(kāi)發(fā)板上有2個(gè)LED,一個(gè)位于ESP8266模塊上,該LED接GPIO2,把GPIO2拉低可以點(diǎn)亮LED;還有一個(gè)LED位于USB轉(zhuǎn)串口芯片旁邊,該LED接GPIO16,把GPIO16拉低可以點(diǎn)亮改LED。
使用NodeMCU固件
燒寫(xiě)工具nodemcu-flasher自帶一個(gè)NodeMCU固件:nodemcu-flasher-master\Resources\Binaries\nodemcu_integer_0.9.5_20150318.bin
小結(jié)一下:
1. nodemcu默認(rèn)執(zhí)行的腳本是init.lua,如果找不到就顯示命令提示符">"用來(lái)接收串口發(fā)來(lái)的指令;
2.?nodemcu固件里面GPIO16的index被設(shè)成了0(led = 0);
3. 網(wǎng)站:https://nodemcu-build.com/index.php提供了Build NodeMCU固件的服務(wù),其中可以定制固件需要支持的Module。
NodeMCU固件
應(yīng)用入口點(diǎn)位于:nodemcu-firmware-master\app\user\user_main.c::user_init(),system_init_done_cb()是ESP8266 SDK提供的API,用于注冊(cè)系統(tǒng)初始化完成的回調(diào)函數(shù),參考:2c-esp8266_non_os_sdk_api_reference_cn.pdf
nodemcu_init()最終會(huì)調(diào)用到下面的代碼來(lái)加載init.lua。整個(gè)NodeMCU的源代碼可以看成是從user_init()開(kāi)始構(gòu)建的一個(gè)應(yīng)用,該應(yīng)用實(shí)現(xiàn)的Lua解釋器的功能。
使用MicroPython固件:
從http://micropython.org/download#esp8266下載ESP8266平臺(tái)的MicroPython固件并燒錄。
小結(jié)一下:
1.MicroPython固件默認(rèn)執(zhí)行的腳本是main.py,如果找不到就顯示命令提示符">>>"用來(lái)接收串口發(fā)來(lái)的指令;
MicroPython固件
閱讀MicroPython的源代碼,可以發(fā)現(xiàn)MicroPython支持多種平臺(tái):ESP8266、ESP32、stm32等。
以ESP8266為例,應(yīng)用入口點(diǎn)位于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()最終會(huì)調(diào)用到pyexec_file("main.py")來(lái)加載main.py,整個(gè)MicroPython的源代碼可以看成是從user_init()開(kāi)始構(gòu)建的一個(gè)應(yīng)用。
以ESP32為例,應(yīng)用入口點(diǎn)位于micropython-master\ports\esp32\main.c::app_main(),下圖nvs_flash_init()是SDK提供的API,xTaskCreate()是FreeRTOS提供的接口
mp_task()最終會(huì)調(diào)用到pyexec_file("main.py")來(lái)加載main.py。
下面的腳本會(huì)使ESP8266模塊上的LED按1s間隔閃爍:
但是當(dāng)我們點(diǎn)"Save to ESP",會(huì)報(bào)錯(cuò),原因是Save操作會(huì)先打開(kāi)main.py,然后修改,但是我們開(kāi)發(fā)板上還沒(méi)有main.py(如下圖):
總結(jié)
以上是生活随笔為你收集整理的python esp8266模块_ESP8266使用笔记之常用固件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 10nm至强处理器再次跳票 Intel:
- 下一篇: 我有1万块钱 想要全能笔记本:该买谁?