介绍
最近重新捡起了2016年买的Arduino套件开始玩,但是最近折腾ESP8266的时候遇到了一堆坑,非常难受,本文就从固件烧录开始介绍ESP如何与Arduino协作。
硬件介绍与开发环境介绍
Arduino使用的是国产UNO,便宜好用,可能需要安装CH340的驱动才能正常烧录。ESP8266我使用的是安信可的ESP-01S,flash容量为8Mbit,自带两个GPIO,供电电压为3.3v,自带四个焊好的引脚方便接线,出厂已经自带AT固件。另外我还买了一个专门提供给ESP-01和ESP-01S的下载器,如图:
开发环境使用的是VS Code+Platform IO,具体怎么用这里不会详细介绍,VS Code可以换为CLion,可以得到更好的编程体验。串口调试工具使用的是Realterm。TCP服务器使用的是网络调试助手。
硬件的初步测试
把ESP-01S插入下载器,如图:
然后插入电脑,打开Realterm,打开Port设置,把baud改为115200,这是出厂固件默认的设置,然后选择合适的端口,点击open和change,如下图:
然后切换到Send标签页,点击EOL的两个+CR和+LF,然后输入“AT”,点Send ASCII,会看到它返回OK,表示AT固件正常,如下图:
输入“AT+GMR”能查看固件信息:
如果上述测试通过的话,就可以进一步测试其他AT指令。
ESP8266固件更新
如果通过AT+GMR查询到的固件版本太旧,可以手动烧录固件。首先参考这里查询你的硬件信息,然后在这里下载ESP FLASH TOOL,然后去这里下载你所需的固件,我用的是“出厂默认 AT 固件”。
下载好工具和固件后解压,电脑插入安装好ESP-01S的下载器,打开烧录工具,选择“ESP8266 DownloadTool”,然后看到下图
直接点选“START”,会自动在DETECTED INFO那里显示硬件信息。然后参考下图设置烧录工具:
首先选择合适的固件,因为我的ESP-01S的flash是8Mbit,所以要选择包里对应的8Mbit固件,然后在后方的框填上“0x00000”(上图里填漏了一个0)。至于其他参数,就看图片里的设置。最后是烧录软件的port和baud都要设置好,一般的baud应该为115200。
设置好点击“START”就会自动烧录固件了,烧录完可以重复上一节的AT指令测试检查是否烧录成功。
与Arduino的协作
与Arduino协作前最好先用下载器在电脑上改掉ESP-01S的默认波特率(baud),可以输入指令”AT+UART_DEF=9600,8,1,0,0”修改。具体的指令描述和用法请去查乐鑫的AT指令手册。
ESP8266本身就是一个MCU,可以用专用的SDK编程,在这个实验里,我只拿它当一个独立工作的wifi模块使用。ESP-01S的引脚参考下图:
接线方式见下表:
Arduino | ESP01s |
---|---|
GND | GND |
3.3v | VCC |
3.3v | CH_PD |
PIN 11(作为软RX) | TX |
PIN 10(作为软TX) | RX |
建议UNO再加一个9v电池供电,因为上面的接线情况下直接通过USB下载程序兼供电会导致ESP-01S快速升温到烫手的程度,加上电池供电后温度上升就较为平缓也不那么烫手。如果使用NANO或者Pro这类小板,最好加一个扩展版双供电或者给ESP单独一个3.3v的外部电源。
所依赖的库主要是SoftwareSerial,用platform.io的平台很容易下载,但是请注意不要下载了ESP版本的,ESP版本是为那些在ESP32或者8266上跑Arduino环境的人提供的,我手上的ESP-01S仅作为外部模块用AT指令控制,因此建议稍微注意一下这点。
第一个程序代码(文件格式为cpp而非ino)如下:
|
|
这个程序首先创建了软串口esp8266,并设置arduino的11号引脚为软RX,因为它对接ESP8266的TX,而10号引脚为软TX。这个程序被注释的那条AT指令是把ESP-01S的baud设置为9600而非默认的115200,因为SoftwareSerial在过高的baud下无法正常工作。本人推荐在接线前先用下载器在电脑用上述指令”AT+UART_DEF=9600, 8, 1, 0, 0”预先把baud设置为9600并保存到flash里。
上面的程序启动后,可以用Arduino IDE的串口监视器或者Realterm测试。如果使用Arduino IDE,记得把换行符的NL和CR选上:
然后就可以输入AT指令测试程序和接线有没有问题。如果输入AT指令并成功在串口监视器上显示对应的结果,那就可以尝试第二个程序,需要用到网络调试助手:
|
|
烧录完成后,打开串口监视器和网络调试助手并启动服务,再启动Arduino。如果接线和其他一切正常,就会在串口打印一堆信息:
|
|
网络调试助手会输出相关信息:
至此,Arduino通过AT指令操作esp8266的实验就结束了。
其他
如果直接用下载器进入AT模式,连wifi掉线,可能是设置为AP模式或者没有启用DHCP,具体的AT指令可以参考乐鑫官网的AT指令手册和范例手册。