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(如下图):

posted @ 2018-04-07 16:00  zhuqingzhu  阅读(16004)  评论(0编辑  收藏  举报