关于该项目
ESP8266无线收发模块,可串口远距离传输,可用于扩展Arduino的无线连接能力,本文主要是展示如何使得Arduino 的Nano-atmega32p芯片与Esp8266进行烧写、通讯、调试的过程,以及中间过程所遇到的各种问题。
ESP8266 WIFI模块除了具备以下能力外,一个很重要的原因是稳定且价格低廉,价格低廉,价格低廉,重要的事情说三遍!
ESP8266 拥有强大的片上处理和存储能力,内置32位处理器,内置Lwip协议栈。支持AP+STA模式共存,可通过AT指令配置各种参数
Wi-Fi Direct (P2P)、soft-AP, 支持 WPA WPA2/WPA2–PSK加密, 无线标准:IEEE802.11b/g/n, 频率: 2.4 GHz
元件准备
图片参考 | 项目 | 数量 | 购买渠道 |
---|---|---|---|
![]() | ESP8266 WiFi模块 | 1 | 国内某宝网站 |
![]() | Arduino nano atmega328p | 1 | 国内某宝网站 |
![]() | Arduino NANO UNO的扩展板 | 1 | 国内某宝网站 |
![]() | 杜邦线(母) | 若干 | 国内某宝网站 |
项目步骤
配置ESP8266在Arduino的运行环境
使用1.6.4及以上版本的Arduino来安装安装ESP8266开发板软件包, 打开Arduino IDE,打开’文件->首选项’在 附加开发板管理器网址一栏填入:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
添加完以后点击‘好’。
做完这步以后重启Arduino IDE,然后依次点击’工具->开发板->开发板管理器’打开后在搜索框输入esp,然后能找到类似’esp8266 by ESP8266 Community’,选择较近的一个稳定版本(我用的是2.4.2版本),点击并安装。
注意
搜索到的结果,在安装时,拜我们伟大的墙所赐,也有可能会下载失败,可以参考这里的方法去手动安装,如果手动从github下载仍然受阻,你可以尝试从这里下载这个文件
安装完后重启Arduino IDE,然后依次点击 工具->开发板->Generic ESP8266 Module,接着按照下面的信息在菜单栏找到对应项进行配置
Flash Mode: QIO
Flash Frequency: 40 MHz
CPU Frequency: 80 MHz
Flash Size: 1M (512K SPIFFS)
Upload Speed: 115200
Port: 对应的USB 端口 (当你一将Arduino连接电脑时,在设备管理器中会冒出端口号)
Programmer: AVRISP mkll
其他的设置就按照默认的选择不变即可
实物连线
ESP8266各引脚的标注内容如下:
ESP8266与Arduino Nano 扩展板的引脚对应关系如下:
ESP8266:___ Arduino:
GND ————————– GND
GP2 ————————– Not connected (open)
GP0 ————————– GND
RXD ————————– RX
TXD ————————– TX
CHPD ———————— 3.3V
RST ————————– Not connected (open)
VCC ————————– 3.3V
其硬件针脚的具体说明规格请点击这里查看ESP8266_Hardware
关于ESP8266引脚相连的一些说明
GP0引脚与GND相连,在代码烧写的时候是必须处于连接状态的,烧写完成之后,代码运行时,可以撤掉这根线
RST引脚可以不连任何线,但在烧写开始前,请记得备上一根母的杜邦线将RST引脚与Arduino Nano扩展板上的GND通电再撤掉,目的是为了重置低电平(重置过程中可以看到ESP8266板上自带的蓝灯闪烁一下)
有的文章写需要在GPO或CHPD引脚加装1千欧的电阻云云,我没去尝试,个人认为是锦上添花的事儿,与烧写能否成功并无关系,不用照做,最后也能烧写完成
ESP8266模块是由低电压(3.3V DC)供电的,其VCC和CH_PD要连接到Arduino的3.3V引脚上
编写Arduino的代码
此段代码是我为了调试ESP8266板与远程服务器连通情况而改写,你可以照搬走(但是需要使用Java/NodeJS等后台语言来搭建下例代码url中提供的类似服务),然后将SSID及PASSWORD等信息改成你自己的,如果你想更简单的例程,你也可以发现Arduino的菜单‘文件-示例-Generic ESP8266 moudle的例子‘里有大把可以学习的例子,调出来一个你想要验证的功能即可:
#include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #include <WiFiClient.h> ESP8266WiFiMulti WiFiMulti; void setup() { Serial.begin(115200); // Serial.setDebugOutput(true); Serial.println(); Serial.println(); Serial.println(); for (uint8_t t = 4; t > 0; t--) { Serial.printf("[SETUP] WAIT %d...\n", t); Serial.flush(); delay(1000); } WiFi.mode(WIFI_STA); WiFiMulti.addAP("SSID", "PASSWORD"); } void loop() { // wait for WiFi connection if ((WiFiMulti.run() == WL_CONNECTED)) { WiFiClient client; HTTPClient http; Serial.print("[HTTP] begin...\n"); if (http.begin(client, "//www.nswlp.cn/")) { // HTTP Serial.print("[HTTP] GET...\n"); // start connection and send HTTP header int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); // file found at server if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { String payload = http.getString(); Serial.println(payload); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } else { Serial.printf("[HTTP} Unable to connect\n"); } } delay(10000); }
烧写代码
激动了,终于来到烧写这一步了,决定你的付出能否被esp8266板子接受的关键一步,Arduino IDE中选好对应的串口,编译无误后,点击上传?额,别着急,先把‘文件-首选项-显示详细输出’的‘编译’‘上传’复选框选中,然后再烧写,如果一次能烧写成功,恭喜你了,如果失败,请对号入座看下面的一些问题及解决方案是不是能够帮到你?
espcomm_send_command: can’t receive slip payload data
解决:这应该是没有连GP0到GND时的错误A fatal error occurred: Invalid head of packet (0x00)
检查Arduino nano板上刷的代码是不是影响了ESP8266相连针脚,可以考虑重刷Arduino板的代码后(可以烧个最简单的blink上去)再来试试烧写ESP8266板GP0到GND连接后还出现下面错误:
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
解决方案—这个错误成因要逐个排查,请确认你已进行检查:RX与TX连线没接错,RX对RX,TX对TX
尝试esptool.py工具,点击参考文章这里查看如何使用,不过参考文章说的是在linux机器上跑,在windows机器上用,需要安装python,执行setup.py。esptool.py的使用,有两点要注意下:
一是要找到esptool.py.exe这个命令被安装的位置,我的机器是在D:\Program Files\python\Scripts目录之下
二是platform.txt这个文件的位置因系统而异,我的win10系统的位置就是C:\Users\RoyLi\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2这个目录下面,这两点信息能确认了,那个esptool.py的工具也就能顺利运行了如果接线也无问题,且esptool.py也能运行,但仍然没有排除以上问题,请尝试我前文提到的将RST引脚重置低电平(连GND),然后将Arduino板的USB电源线拔出再重新接入,之后重新尝试上传代码
经过这一系列折腾,如果看到下面的这一串提示,那么恭喜你,你的代码已经烧写成功了。
运行代码及调试效果
烧写完的代码并不是马上会被ESP8266执行,仍然需要下面这个动作才会生效。
拔除GP0与GND的连线,RST再接一下GND线然后拔除,这时,通过打开IDE中的‘工具-串口监视器’,然后就可以观察串口打印出来的日志,表明你已经连接到wifi网络中,开始在互联网的天空中自由翱翔吧,小飞龙…
上一篇:Flex 布局语法教程