1、流程基本介绍
一句话总结:通过下载NodeMCU固件到ESP8266,基于固件库可以有很多强大的功能解决具体的问题。
实际上不止这一种方式可以实现,但个人认为上述方式具有较强的灵活性,同时也比较简单方便。
这里面需要注意的是,ESP8266需要通过USB模拟串口实现程序下载和通信功能,因此针对特定的下载器电脑上需要安装专门的linux驱动。
ESP8266的工作模式主要包括:
AP模式:ESP8266 模块作为热点,手机或电脑直接与模块连接,实现局域网无线控制。
![1833170-20191031221714722-1064865844.png][1]
Station模式:ESP8266 模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
Station+AP模式:上述两种模式并存。
![1833170-20191031221728823-1538677652.png][2]
2、硬件需求
主要是USB适配器和ESP8266模块,在网上买现成的即可,下面是可以直接链接的模块。
CH340 USB适配器
![1833170-20191211213734693-1676877633.png][3]
ESP8266 模块(ESP01)
![1833170-20191211213551271-403084958.png][4]
下面是ESP8266模块的电路图,目前采用的这种小模块只引出了部分针脚,还有一种是所有都引出来了的。
![1833170-20191211211822924-94440310.png][5]
![1833170-20191212220915784-553498370.png][6]
3、开发工具
1.linux下USB下载器的的驱动,CH341SER_LINUX
驱动下载地址 http://www.wch.cn/downloads/CH341SER_LINUX_ZIP.html
2.ESP8266固件下载工具, esptool
下载地址 https://github.com/espressif/esptool
3.ESP8266固件库调试工具,ESPlorer,大部分开发工作将在这个工具下开展,采用的开发语言是LUA
开发ESP8266过程中所需要用到的LUA编程比较简单,稍微熟悉一下即可应用
下载地址 https://github.com/4refr0nt/ESPlorer
这个工具基于java开发,所以需要安装linux下的java模拟器
- ESP8266固件库,NodeMCU,这个固件库提供了很多基础模块,可以使得开发过程更为简单便捷
下载地址 https://nodemcu-build.com/
下面是目前模块的截图
![1833170-20191211215653933-1911567999.png][7]
4、主要流程
完成上述准备工作后,即可利用ESP8266模块进行调试
实际上上述开发工具安装过程中可能会出现一些问题,需要针对具体的问题进行仔细分析,然后找出解决方法
我当时在安装USB下载器驱动过程中就遇到了一些问题,来回折腾了好久才调试好,可能是我的那个下载器本身有些问题,有时候就连接不上了,需要拔下来重新上电才能正常工作
- 第一步,生成并下载NodeMCU固件库
NodeMCU是一个面向ESP8266开发的开源固件库,其中包含了很多可选择的组件,可以实现一些网络功能和传感器接口
其中ADC模块用于操作ESP8266内置的ADC,GPIO模块用于IO借口操作,WIFI模块是这里面的核心功能,还有其他的一些模块在这里就不一一介绍了,可以查阅NodeMCU的文档,里面都有详细的介绍
需要注意的是,选的模块功能越多则需要的存储空间越大,因此应尽量只选择与后续需求相对应的模块,上面那个图是我所选择的一些基本模块
填入自己的邮箱并选择好之后就可以点击最下面的生成按钮,这样选择好的固件库就会发送到相应的邮箱中,稍等片刻就可以在邮箱中下载生成的固件库
![1833170-20191211221307219-1446760557.png][8]
选择是否启用LSF,可以使lua程序存储在flash中,从而能够释放更多的RAM,此外还有一些其他的选项,用于调节固件库的特性,具体可以参考相关的说明
邮箱中将会收到两个版本的固件,分别是浮点型和整型,尽管整型占据的RAM更少,但一般为了使用方便推荐使用浮点型
- 第二步,将固件库下载到ESP8266中
连接好下载器和ESP8266模块后,即可使用下面的命令下载固件
esptool.py --port <serial-port-of-ESP8266> --baud <baud-rate> write_flash -fm <flash-mode> 0x00000 <nodemcu-firmware>.bin
是虚拟串口的名称,可以采用下面的命令查询,我的是/dev/ttyUSB0
ls -l /dev/ttyUSB*
是波特率,默认值是115200,也可以不填
.bin 是固件文件的名称
因此,具体的命令如下
esptool.py --port /dev/ttyUSB0 write_flash 0x0000 桌面/nodemcu_integer.bin
下载过程中需要使得GPIO0为低电平,一直保持即可(与RST无关),若一直显示连接也可以硬重启一次(拉低RST,GPIO对面那个针脚)
![1833170-20191212212434008-306009131.jpg][9]
如果没有拉低GPIO0,则会出现如下一直链接的状态
![1833170-20191212220725167-341634218.png][10]
如果下载成功的状态如下
![1833170-20191212220641245-458613800.png][11]
- 第三步,使用ESPlorer调试ESP8266
通过下面的命令打开ESPlorer ,后面的路径是我下载后保存ESPlorer的路径
sudo java -jar 下载/ESPlorer/ESPlorer.jar
打开后的界面如下
![1833170-20191212221129547-1231733048.png][12]
点击Open即可完成连接,选择波特率为115200(这里波特率选择可能需要和此前固件下载时的波特率保持一致,这样才能正常通信)
然后,可以点击右下的Chip info 或Chip ID 查看芯片的信息,连接成功后的界面如下,相关信息可以正常显示
![1833170-20191212221455879-1293397406.png][13]
在上述工具中,不同按钮中的save有所不同,上面的save是指文件的保存,下面的save是指ESP程序的保存
send只是执行代码,断电或硬重启后代码就会失效,save则可以将代码保存在ESP中
可以通过右侧的Format按钮清除ESP中的代码,FS info 查看ESP存储空间的使用情况
Reload 则可以查看已经保存在ESP中的代码情况
- 第四步,下载程序到ESP8266中
通过上面的准备工作,就可以将写好的代码下载到ESP8266中
wifi.setmode(wifi.STATIONAP)
cfg={}
cfg.ssid="TEST"
cfg.pwd="12345678"
wifi.ap.config(cfg)
运行后可以发现名称为TEST的WIFI热点
总结
esptool.py --port --baud write_flash -fm 0x00000 .bin