授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。
QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷
一、你如果想学基于Arduino的ESP8266开发技术
一、基础篇
二、网络篇
- ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
- ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
- ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
- ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
- ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用
- ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
- ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
- ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网
- ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
- ESP8266开发之旅 网络篇⑩ UDP服务
- ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用
- ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
- ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 Flash文件系统
- ESP8266开发之旅 网络篇⑭ web配网
- ESP8266开发之旅 网络篇⑮ 真正的域名服务——DNSServer
- ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新
三、应用篇
四、高级篇
俗话说,工欲善其事必先利其器。基于Arduino平台开发ESP8266,我们至少要分别准备好硬件和软件开发环境:
1. 硬件
ESP8266模块,或者ESP8266开发板,笔者建议初学者直接使用开发板;
2. 软件
Arduino IDE开发环境;
1. 硬件
硬件环境主要分为两种:
1. ESP8266开发板 + USB线
笔者建议入门初学者直接入手一块开发板,开发板的一个好处就是板子设计者已经给初学者排查了硬件连接错误,可以使初学者专注于软件开发,加快学习进度。目前比较火的一款ESP8266开发板就是NodeMcu,其核心芯片是ESP8266-12F,如下图所示(图片引用自安信可官网):
不过,笔者本书也使用了另外一款开发板——ESP202测试板,其核心芯片也是ESP8266-12F,如下图所示:
笔者选择它的理由很简单——既有NodeMcu的功能,又可以作为ESP8266-01系列模组的烧写器,这样就不用手动搭建ESP01的烧写环境。
2. ESP8266模块 + USB转TTL线
如果WiFi模块是ESP8266-01系列,首先请看一下以下引脚接口说明:
引脚编号 | 引脚定义 | 引脚描述 |
---|---|---|
1 | TX | 1)UART_TX发送端;2)通用IO口:GPIO1; |
2 | GND | GND |
3 | CH_PD | 1)高电平工作;2)低电平模块供电关掉; |
4 | GPIO2 | 开机上电时必须为高电平,禁止硬件下拉,内部默认已拉高; |
5 | GPIO16 | 外部Reset信号,低电平复位,高电平工作(默认应该是高电平); |
6 | GPIO0 | 接地进入烧录固件模式,悬空为正常运行模式; |
7 | VCC | 3.3V(切记不要供5V!!!) |
8 | RX | 1)UART_RX接收端;2)通用IO口:GPIO3; |
其余引脚悬空即可。 从引脚介绍表可以看出,关键引脚GPIO0决定了模块当前处于什么工作模式。
烧录固件模式
请按照下图连接ESP8266-01和USB转TTL线,进入烧录模式:
如果WiFi模块是ESP8266-12系列,按照下图对应引脚接线:
温馨提示
- 从Arduino IDE角度来看,ESP8266工作模式包括:
1.烧录固件模式
下载代码的时候,需要将GPIO0口接地;
2.正常工作模式
下载完代码,需要将GPIO0口悬空;
有电路经验的读者可以安装拨码开关来切换工作模式。 - 注意ESP8266安全工作电压是3.3V,不要直接连接5v;
- 手动切换工作模式之后,最好重新启动一下ESP8266模块(通断电);
- 有时ESP8266下载失败,有可能是供电问题,可以尝试独立供电,不直接连到TTL Vcc;
- 烧录固件,我们需要了解的是,我们的固件是以下哪一种:AT固件、自己编写的SDK固件(基于ESP8266 SDK开发或者Lua)以及本书基于Arduino平台开发的ESP8266固件(笔者成为 ESP8266 Arduino固件)。
2. 软件开发环境
软件安装需要分成两个步骤:
1.安装Arduino IDE
Arduino IDE开发环境主要用于Arduino Uno/Mini/Mega2560等平台的项目开发。而ESP8266也可以基于该IDE来开发, 所以我们首先需要安装它;
2.配置Arduino Core For ESP8266
Arduino Core For ESP8266可以理解为能在Arduino IDE上开发ESP8266的插件;
2.1 安装Arduino IDE
由于某些原因,Arduino官网网站(https://www.arduino.cc/en/Main/Software) 经常打不开或者下载速度极慢,导致下载IDE非常困难,读者可以通过以下两种方式下载安装:
- 笔者提供了百度网盘链接(https://pan.baidu.com/s/1QGAbBAsP4-VNQfT-bV46aA) 以供大家下载,长期有效,请注意英文大小写。
- 通过Arduino中文社区链接地址(https://www.arduino.cn/thread-5838-1-1.html) 去下载。
如果你下载的是windows安装版(exe后缀),那么直接安装即可,其他则直接解压即可使用,注意路径不要存在中文目录。笔者写本书的时候所用的Arduino IDE版本是1.8.5,启动Arduino,会出现如下图所示界面:
2.2 安装ESP8266开发环境
安装好Arduino IDE环境后,就得在它基础上配置Arduino Core For ESP8266。以window版本为例,读者可以安装以下顺序安装:
- 打开Arduino IDE->菜单项文件->首选项,然后会看到附加开发版管理器网址,填入http://arduino.esp8266.com/stable/package_esp8266com_index.json,重启IDE;
- 重启IDE之后->菜单项工具->开发板->点击开发板管理器->滚动找到ESP8266平台;
- 从下拉选项中选择你想下载的版本,点击安装,需要等待一段时间安装完毕。笔者建议下载最新的版本,笔者写本书的时候最新版本是2.4.2,后续章节都是基于这个版本来讲解。
- 安装成功的话,会可以看到下图所示。
到此,整个软件开发环境搭建完毕。
温馨提示
- 如果安装失败,一般都是因为网络问题,可以尝试多次重新安装;多次安装失败之后,可能需要*;
- Arduino Core For ESP8266库版本之间是有区别,有些版本可能没有某些方法,比如笔者刚开始的时候安装了2.0.0版本,但是编译代码不通过,提示client.peekBytes方法不存在,安装最新版本完美无bug。
- Arduino IDE界面相对比较简单,笔者觉得代码提示功能、自动补全不够友好,推荐使用Visual Studio、Eclipse等更为专业的开发环境进行开发。这些第三方的开发环境都需要下载对应的Arduino插件进行配置,笔者这里就不具体讲解,有兴趣的可以自行查阅资料解决。
3. 烧录ESP8266
实验是检验真理的唯一标准,配置好硬件和软件环境之后,笔者就给读者提供一个实例代码,并且告诉读者如何配置烧录以及提及一些烧录配置注意点。
3.1实例代码
首先,请读者不用在意代码细节问题,请先拷贝如下代码到Arduino IDE,然后点击编译:
/**
* Demo:
* 测试ESP8266 demo
* 打印ESP8266模块信息
* 1.打印Arduino Core For ESP8266 版本,笔者是2.4.2版本
* 2.打印Flash的唯一性芯片id(读者可以思考一下是否可以用来做点什么唯一性参考)
* 3.打印Flash实际大小
* 4.打印IDE配置的使用Flash大小
* 5.打印IDE配置的Flash连接通信的频率
* 6.打印Flash连接模式:QIO QOUT DIO DOUT,可以理解为Flash传输速率
* @author 单片机菜鸟
* @date 2018/10/22
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
//使能软件看门狗的触发间隔
ESP.wdtEnable(5000);
}
void loop() {
//喂狗
ESP.wdtFeed();
FlashMode_t ideMode = ESP.getFlashChipMode();
String coreVersion = ESP.getCoreVersion();
Serial.print(F("Arduino Core For ESP8266 Version: "));
Serial.println(coreVersion);
Serial.printf("Flash real id(唯一标识符): %08X\n", ESP.getFlashChipId());
Serial.printf("Flash 实际大小: %u KBytes\n", ESP.getFlashChipRealSize()/1024);
Serial.printf("IDE配置Flash大小: %u KBytes,往往小于实际大小\n", ESP.getFlashChipSize()/1024);
Serial.printf("IDE配置Flash频率 : %u MHz\n", ESP.getFlashChipSpeed()/1000000);
Serial.printf("Flash ide mode: %s\n\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN"));
delay(1000);
}
代码讲解:
1.setup函数里面,主要设置了串口通信波特率115200(串口调试器的波特率需要设置成一致),同时设置了软件看门狗WatchDog的触发间隔5s(看门狗的作用就是如果不喂狗就会在触发时间到达的时候自动复位,很多);
2.在loop函数中,会不断循环执行,所以需要喂狗,然后就打印ESP8266 Arduino Core的当前版本、芯片id、flash实际大小、Arduino IDE配置Flash大小、通信频率以及flash的连接模式(这些信息都可以称为ESP8266模块的物理信息)。
温馨提示
如果以上代码编译不通过,原因一般是以下两个之一:
1.烧录配置没改成ESP8266(请看下小节讲解),当前可能是Arduino Uno、Mega等平台;
2.Arduino Core For ESP8266软件环境没有配置成功,请重新检查一遍;
3.上面例子的看门狗属于软件看门狗,作用是:如果在规定时间内不进行喂狗操作,那么系统就会在看门狗的作用下复位。默认情况下,软件看门狗是开启的,很多读者的代码运行之所以不稳定或者抛出各种异常,其中一大原因就是没有喂狗。关于这一个,笔者后面的章节会有具体讲解。
3.2 烧录配置
笔者的开发板是ESP202测试板,核心芯片是ESP8266-12F,Flash大小是4MB,Flash芯片是W25Q32,适用下图配置:
烧录代码
ESP8266进入烧录固件模式,点击上传,等待上传结果。
如果显示下图,表示上传成功。
如果显示下图,表示上传失败。
温馨提示
上传失败原因可能有以下几点,请逐一排除:
1.烧录过程还没有显示任何进度就立刻提示失败,原因如下:
- ESP8266的COM端口没选对,请确认ESP8266对应端口;
- ESP8266 Upload Speed选择不对,默认应该是115200;
- ESP8266还没有进入到烧录固件模式,重新进入烧录模式;
Flash Mode没选对,比如有些NodeMcu需要选择为DIO/DOUT,Flash Mode有如下选型:
那么它们之间的区别在哪里呢?
1)QIO , for flash that support quad r/w operation(e.g. W25Q flash芯片)
2)QOUT, for flash that support quad read operation(e.g. W25Q flash芯片)
3)DIO, for flash that support dual r/w operation(e.g. W25Q &W25X flash芯片)
4)DOUT, for flash that support dual read operation(e.g. W25Q &W25X flash芯片)
它们之间的区别可以简单理解为传输速率的区别,quad是四倍传输速率,dual是两倍传输速率。
经测试:
Winbond 25Q32B 可工作于 DIO / DOUT / QIO /QOUT (Noduino Falcon);
BergMicro 25Q32A 只可工作于 DIO / DOUT (NodeMCU V1.0 可能是 ESP-12E 接线的问题);
MXIC 25L80 (小 K mini)只可工作于 DOUT;- Flash Size大于Flash实际大小,最好改成往下兼容Flash实际大小,也就是不能大于Flash实际大小,Flash Size有多种选型,请看下图:
切记:配置时,请查阅ESP8266 选型表(笔者在第1章有讲解过)。
2.烧录过程显示一定进度就提示失败,原因如下: - ESP8266供电不稳定,请尝试独立供电;
ESP8266模块接线接触不良;
3.3 测试结果
烧录完上面测试固件之后,笔者的测试结果如下(正常情况下读者的结果也会跟笔者一样大同小异):
4. 本章总结
在这一章,笔者给读者讲解了硬件环境的配置以及Arduinio IDE环境的配置,并且提供了一个获取ESP8266物理信息的测试例子,同时也讲解了烧录固件的配置工作以及常见问题。可以这么说,这章属于配置环境基础,属于我们成功的第一步。