WiFi模块(ESP8266)
Petoi ESP8266 WiFi模块使用指南
Last updated
Petoi ESP8266 WiFi模块使用指南
Last updated
本模块使用乐鑫官方基于ESP8266EX的型号ESP-WROOM-02D, 4MB QSPI Flash。模块经过美国FCC, 欧洲CE-RED, 日本TELEC以及韩国KC认证。
用户可以使用该模块的全部功能,而非普通的串口透传模块。
模块包括自动下载电路及通信模块。自动下载电路参照官方建议使用2个S8050三极管,接收来自CH340C下载器的RTS以及DTR信号并触发下载时序。
连接到Nyboard上:
下载程序:
我们使用Arduino下的ESP8266编程环境。
下载地址为:http://arduino.esp8266.com/stable/package_esp8266com_index.json. 将其粘贴至Arduino首选项的附加开发板URL中即可。
随后打开“开发板管理器”,输入ESP8266或8266搜索,如下图所示:
下载ESP8266 by ESP8266 社区这个支持包即可。
下载完成后,我们选择:ESP8266 Board(当前最新版本为2.74)-> Generic ESP8266 Module, 如下图所示。
接着我们来配置以下参数:
参数名称 | 含义 | 选择参数 |
Builtin Led | LED引脚 | 2 |
Upload Speed | 上传程序速率 | 921600(115200会比较慢) |
CPU Frequency | 处理器频率,越高越强 | 160MHz |
Flash Size | 闪存空间及分区 | 4MB即可(单独解释OTA) |
Reset Method | 复位方法 | DTR复位 |
lwIP variant | 轻量IP协议栈选择 | V2 Lower memory |
Erase Flash | 擦除flash的方法 | Only sketch(只擦程序区) |
这里单独提一下Flash大小和分区。
Arduino UNO使用的ATMega328P内置32KB的Flash和1KB的EEPROM。当使用Arduino的时候,我们是这样划分Flash和EEPROM的:
Arduino Boot Loader | Sketch(程序区) | EEPROM | |
1KB | 31KB | 1KB |
如果按照我们选的ESP8266 4MB Flash的划分方式,如下图:
ESP Boot loader | Program-A | Program-B | Data area(File system) |
In SoC Flash | 1019KB | 1019KB | 2MB |
相比UNO使用整块的Flash存储Sketch程序,我们使用2个小块来分别存储A程序和B程序,并单独划分了一块数据区。这样的好处是什么呢?为什么叫OTA模式呢?
当您拿到8266模块时,内置程序位于A区,B区域和文件系统区域为空,Boot loader控制程序从A区启动。
当需要无线更新时,我们把新的程序存储至B区域。此时若发生传输中断,下次启动时依然由Boot loader控制程序从A区启动。
当更新并校验数据完毕后,Bootloader启动项默认编程B,下次开机时从B区启动。
数据区相对程序区是独立的,程序可以直接读写数据区的数据,也可以使用客户端直接上传数据。
当擦除程序时,只会擦除程序区,而数据分区默认不会擦除。
配置好后,我们使用Arduino经典的“Blink”程序来测试ESP8266开发板。打开Blink工程,配置好开发板,将模块插在USB下载器的通信模块调试接口上,下载Blink例程。相比UNO编译时间稍长,Linking后会以百分比的形式显示下载进度:
ESP8266的Arduino支持文件较大,Blink使用了257KB的Flash及26.8KB的RAM。
固件地址:https://github.com/PetoiCamp/OpenCat/tree/main/ModuleTests/ESP8266WiFiController
该工程包括4个文件:
ESP8266WiFiController.ino :Arduino项目文件,包含核心代码
mainpage.h:以字符串存储的主页文件
actionpage.h:以字符串存储的动作遥控网页文件
calibrationpage.h:以字符串存储的校准舵机网页文件
请将它们放置于名为”ESP8266WiFiController“的文件夹内,打开ino文件,并下载至ESP8266 WiFi模块上即可。
完成WiFi模块的代码下载后,第一次使用建议连接在下载器上。
打开手机的WiFi并搜索网络,会搜索到一个名为“Bittle-AP”的无加密的无线热点,点击连接。
如果您的手机有自动网络优化功能,因为Bittle的WiFi热点是没有Internet连接的,手机会自动切换至有网络连接的WFi网络或启用数据流量。
连接“Bittle-AP”后,默认浏览器会自动跳转至Bittle无线模块的”WiFiManager“页面。
如果没有跳转,默认网关地址为:192.168.4.1。请打开浏览器手工输入后进入配网页面。点击“Configure WiFi” 配置无线网络。
在WiFiManager页面,Bittle的无线模块会自动搜索附近全部的WiFi SSID并显示。点击您自己的WiFi SSID并输入密码后,Bittle会首选连接到这个网络。
连接成功后,Bittle会打印出DHCP分配的IP地址。如果您是高阶用户,也可以在Arduino中配置固定的IP地址。
在浏览器中输入WiFi模块分配到的IP地址后,即可访问Bittle的控制界面。
示例代码是一个简单的web服务器例子,包含2个HTML页面。2个页面以字符串常量的形式存储在2个头文件中。这样的做的好处是避免了不停调用client.print函数将网页的html弄得比较乱。
首先设置好需要接入的WiFi热点账户和密码,之前的程序我们在Arduino代码中使用字符串配置WiFi账号和密码,当网络环境发生变化的时候需要重新烧录程序,非常不便。
为了方便使用我们使用了WiFiManager库,可以以Web的方式配置WiFi接入点的信息。
新建一个web服务器的对象,配置端口80(常用的HTTP服务器端口)
HTTP响应函数的功能是对传来的HTTP请求作出反馈
这2个handler函数返回200(OK)以及对应的网页HTML代码供客户端显示。
handleActionPage函数略微有一些不同,这是一个带参数传递的http请求处理函数。例如:当参数为“gyro”,调用sendCmd函数,将其转换为机器人可识别的串口指令“g”,(开关陀螺仪)通过WiFi模块的串口发送给机器人,这样我们的机器人就会执行指令。
那么这个“gyro”参数是怎么生成和传递的呢?是因为我们给服务器发送了这样一条带值传递的HTTL request:
服务器通过函数解析其中的actionpage参数,解析出name是gyro。
这条URL,我们可以直接在浏览器中用键盘输入后执行,更常用的方法是在我们的ActionPage网页文件,为 GyroOn/Off 按钮增加一个链接。当按下(onclick)GyroOn/Off 按钮时,会向主机发送上面的URL。完整的GyroOn/Off 按钮配置如下:
执行完name解析后,我们令其返回ActionPage,否则网页就白屏了。
最后我们定位接受到的HTTP请求对应的处理函数
服务器一旦启动将会一直运行,而客户端的HTTP请求会从不停的发送。每次都需要处理:“连接 – 处理请求 – 断开”,所以客户端的请求是主循环。
好在ESP8266的web服务器库已经为我们做好了这一复杂的过程。我们只需要在主循环中调用客户端处理函数,按照我们刚刚设置好的服务器处理策略进行处理。
这样一个最简单的web控制的服务器端就做好了。
相比Nyboard主板的ATMega328P,ESP8266的资源更多,玩法也更多。比如:
基于HTTP的Restful的控制API,并连接物联网平台
MQTT和Node-Red的消息传递;
使用WiFi给模块更新固件;
使用ESP8266强大的CPU作为Nyboard的协处理器,处理运动数据或存储更多动作。