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\:
执行编译:

按照提示选择:(noboot)----4(4096KB)
编译完成:会在\ESP8266_NONOS_SDK\bin\目录生成这两个文件:

3.重新烧录编译的固件,只需要更新编译生成的两个(offset分别为:0x00000和0x40000):

使用串口工具:波特率为(去源代码里面看):

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

ESP8266使用笔记之常用固件的更多相关文章
- python笔记之常用模块用法分析
python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...
- python3.4学习笔记(十) 常用操作符,条件分支和循环实例
python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- opencv-学习笔记(1)常用函数和方法。
opencv-学习笔记(1)常用函数和方法. cv2.imread(filename,falg) filename是文件名字 flag是读入的方式 cv2.MREAD_UNCHANGED :不进行转化 ...
- (四) tensorflow笔记:常用函数说明
tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...
- 笔记-python-lib-requests常用类/方法/属性
笔记-python-lib-requests常用类/方法/属性 1. requests模块常用类/方法/属性 在使用中发现对requests模块不够熟悉,写了几个案例后重新整理了一下文档,罗 ...
- Python学习笔记之常用函数及说明
Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...
- esp8266烧写机智云固件方法
转:http://blog.csdn.net/k7arm/article/details/51925941 =====================以下为我转载的文章================ ...
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
随机推荐
- scala 隐式详解(implicit关键字)
掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把 ...
- PHP异常处理、错误捕获和自动加载的一些总结
<?php // 设置顶层异常处理器 set_exception_handler('exceptionHandler'); function exceptionHandler($e) { ech ...
- mybatis13--2级缓存
验证内置的2级缓存 Ehcache缓存的配置 01.引入需要的ehcache 和mybatis-ehcache 两个jar包 02.在mapper文件中增加 <cache type=" ...
- 每个JavaScript程序员都需要知道的5个数组方法
Array.forEach() .forEach() 方法能够方便的让你 遍历数组里的每个元素,你可以在回调函数里对每个元素进行操作..forEach()方法没有返回值,你不需要在回调函数里写retu ...
- js设计模式(七)---模板方法模式
模板方法模式 模板方法模式是一种只需要继承就可以实现的非常简单的模式. 模板方法模式是由两部分组成,第一部分是抽象父类,第二部分是具体实现的子类, 主要适用在同级的子类具有相同的行为放在父类中实现,而 ...
- 转 消息中间件:RocketMQ 介绍(特性、术语、原理、优缺点、消息顺序、消息重复)
https://blog.csdn.net/jiangyu1013/article/details/81668671 消息中间件的作用 1. 应用解耦 2. 异步处理 比如用户注册场景,注册主流程完成 ...
- soapui调用redis,获取短信验证码
1.首先,调用redis需要引入redis的jar包,放入到soapui指定目录中,例如我的目录D:\Program Files\SmartBear\SoapUI-Pro-5.1.2\bin\ext ...
- React-Router4.x中文文档
以下为翻译的中文API(水平有限,凑合看,欢迎纠正补充~) <BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件 ...
- 消息服务jms
jms是java消息服务的规范,也即接口,activemq是实现.队列模型和发布订阅模型很像,区别就是队列,多个消费者消费不同的消息(这些消费者整体消费完生产者生产的队列的消息),发布订阅模型是多个消 ...
- javascript常用的操作
1.concat() 连接两个或更多的数组,并返回一个新的数组.注意:该方法不会改变原数组 var arry1=["李四",“王二”]: var arry2=['赵柳',“李旺 ...