嵌入式设计中常用的无线通信方式主要由蓝牙、WiFi、Zigbee、Lora、NB-IOT等等。这些是最常用的,也是在实际项目开发中根据项目的数据通信特点来选择相应的无线通信方式。本设计主要是讲解WiFi在嵌入式开发中的使用。
1.ESP8266的三种模式
1.1 STA模式(Station)
工作在STA模式下的ESP8266-01S模块就像你的手机一样,它可以接收你家无线路由器发出的WiFi信号,实现了ESP8266-01S模块通过接收路由器的信号而能够上网,跟手机连WiFi上网没区别,当然如果把ESP8266-01S模块按正确方式接在STM32单片机上,就可以实现STM32控制的比如灯、继电器、舵机等具有开关功能的远程控制。
1.2 AP模式(Wireless Access Point)
工作在AP模式下的ESP8266-01S模块就像是一个手机热点一样,也像你家的简易版无线路由器,你自己的手机、Pad、笔记本电脑等都可以连接到此“热点”,从而实现了手机、电脑等设备可以和ESP8266-01S模块进行局域网的无线通信。在AP模式下的ESP8266-01S模块是一个无线网络的创建者,可以理解为此时ESP8266-01S模块是被别的设备连接,即此时的ESP8266-01S模块是一个服务器端,为被他人连接的模式。
1.3 STA+AP模式
两种模式共存,ESP8266-01S模块既可以通过路由器连接到互联网,也可以作为WiFi热点使其他设备连接到这个ESP8266-01S模块,实现广域网与局域网的无缝切换。
至于这三种模式在STM32单片机开发中怎么用,后面有详细藐视。
2. ESP8266-01S烧录固件
WiFi通信的频段和蓝牙一样,都是2.4G免费频段。我们使用ESP8266-01S模块,这款WiFi模块的芯片是乐鑫公司设计的,由安信可公司生产的模组。相当于ARM公司设计芯片,ST公司生产STM32单片机。ESP8266-01S是基于乐鑫ESP8266芯片制造的一款WiFi通信模组,其内部集成了802.11b/g/n协议栈和TCP/IP协议栈,具备完整的Wi-Fi和网络功能。但是多数人都喜欢拿它来做WiFi通信使用。ESP芯片的多款模组选型如下:
2.1 ESP8266-01S模块引脚图
管脚号 | 管脚名字 | 功能 |
1脚 | GND | 接地 |
2脚 | IO2 | GPIO2/UART1_TXD |
3脚 | IO0 | GPIO0。下载模式:内部拉低 运行模式:外部拉高或者悬空 |
4脚 | RXD | UART0_RXD/GPIO3 |
5脚 | TXD | UART0_TXD/GPIO1 |
6脚 | EN | 芯片使能端,高电平有效 |
7脚 | RST | 复位 |
8脚 | VCC | 3,.3V供电 |
提示:电源供电不足会导致烧录固件程序失败,烧录固件的时候就会出现一直在等待上电情况,建议采用外部专用电源供电,使用TTL转USB烧录时候可以用万用表检测一下你的TTL转USB模块3.3V供电是不是达到了3.3V,如果没有的话就把ESP8266-01S的把VCC端接到5V上。
该模块出厂时默认自带出厂固件的,但如果进行其他开发需要烧录固件,比如如果想用机智云结合ESP8266-01S开发就需要烧录机智云的固件(这个可以在机智云网站找到),如果想用ESP8266-01S把STM32的数据传到阿里云上,就需要烧录MQTT的固件,因为传数据到阿里云上需要用到MQTT协议。
2.2 ESP8266-01S烧录MQTT固件
烧录方式有两种:一种是用ESP8266-01S的专用下载器下载,淘宝卖7块钱一个,下载器采用CH340C USB转TTL芯片,并增加了ESP8266自动下载电路,非常方便用户给安信可的ESP-01/01S 下载程序、升级固件、串口调试等,支持Arduino IDE 、安信可ESP8266 Flasher和乐鑫FLASH_DOWNLOAD_TOOLS 等下载软件软件一键下载,不需要接线,不需要按任何按键。WiFi模块会自动进入下载模式。我用下载器下载出现串口连接失败,不知道是不是我买的下载器有问题,已经弃用。下载器长这样:
把ESP8266-01S直接插上去就行了,注意插的方向。
一种是用USB转TTL模块配合烧录软件操作,我用这种方式烧录成功的,先把USB转TTL模块和ESP8266-01S接线,接线如下:
ESP8266-01S | USB转TTL模块 |
GND | GND |
IO0 | GND |
IO2 | 悬空不接 |
RXD | TXD |
TXD | RXD |
EN | 3.3V(如果你的3.3V输出电压不够则改接5V) |
RST | 3.3V(如果你的3.3V输出电压不够则改接5V) |
VCC | 3.3V(如果你的3.3V输出电压不够则改接5V) |
接好线后把USB端插到电脑上,要提前在电脑上安装好CH340的驱动程序,这个网上教程和驱动程序一大堆,自己百度去吧。
然后进入安信可公司官网->开发资料->WiFi模组系列->ESP8266系列->资源汇总->各类AT固件,选择第7个:MQTT透传AT固件(固件号:1471),点击固件下载
然后下载烧录软件,进入安信可公司官网->开发资料->WiFi模组系列->ESP8266系列->资源汇总->开发工具,选择第二个:烧录WiFi固件工具:ESP_DOWNLOAD_TOOL,下载烧录软件
固件和烧录软件准备好以后,解压烧录软件压缩包,然后打开下图的flash_download_tool_v3.8.5.exe
然后界面就如下分步讲解:
1.选择你上面下载的AT固件解压后的位置
2.然后手动输入0x00000(我不知道是不是自动加载的)
3.选择晶振频率24M(下图的40M是不对的,我懒得重新截图了,要改成24M)
4.选择SPI MODE:DOUT。若是下载失败可以改SPI MODE为QIO试看看。
5.选择FLASH SIZE:8Mbit。因为ESP8266-01S的flash大小就是8Mbit
6.选择你的CH340的端口,这个可以通过你电脑的设备管理器查看,我的是COM7,波特率选择115200
7.点击START开始烧录固件
然后拔插一下ESP8266-01模块的3V3那根线,相当于复位操作,然后可以看到显示下载中,下载进度条也可以看到。
等个几十秒,显示下载完成。
2.3 测试固件是否下载成功
接下来只接这几个线,其他线都不接。
ESP8266-01S模块 | USB转TTL模块 |
3V3 | 3V3 |
TXD | RXD |
RXD | TXD |
GND | GND |
接好后如下图所示。
然后打开串口助手,选择对应的COM口,波特率选择115200,勾选新行
然后发送:AT。回复OK就说明烧录成功。
3.阿里云配置并验证
3.1阿里云物联网平台创建设备
首先进入阿里云官网,然后登录账号(没有账号的需要自己注册一个),登陆成功后在搜索款搜索:物联网平台然后找到公共实例,这个是免费的,需要开通一下。
进入到公共实例后,按下图操作
创建完产品后,还需要在创建的产品下创建设备。如下图操作
添加完设备后,可以去查看一下设备,显示未激活状态
然后点击产品,查看创建好的产品名字,点击查看,如下图所示。
添加一个灯开关的功能
再添加一个温度的功能
然后可以看到下图添加了两个功能,一个是灯开关,还有一个是温度的,然后点击发布上线。
刚刚的是功能定义的设备发布,下面还要点产品的发布
连接的设备正式创建成功,接下来使用mqtt.fx测试连接创建好的产品和设备 ,看是否连接成功。
3.2 MQTT.fx模拟测试连接阿里云
首先需要安装MQTT.fx软件,安装包链接如下:
链接:https://pan.baidu.com/s/1y0GBknZGC5hypt173PcGkg?pwd=1234
提取码:1234
安装好后打开界面如下图
这个MQTT.fx想要连接阿里云需要有阿里云的MQTT连接参数,在下图找到
把上面的MQTT连接参数复制到电脑的记事本或者word文档都行,因为MQTT.fx连接阿里云要用到。然后打开MQQTT.fx,如下图操作
点完connect后,可以看到connect按钮从蓝色变灰色了,右上角的灯变绿了
然后去阿里云物联网平台查看对应的设备,可以看到状态为在线,说明MQTT.fx已经成功连接到阿里云上了。
3.3 MQTT.fx上传数据到阿里云
在创建产品下面的设备时定义了温度和LED开关的功能,而这些功能数据的就是通过物模型通信topic来接收的,进入到物模型通信topic列表,选择一个具有发布权限的topic:/sys/ic62GWmkta2/${deviceName}/thing/event/property/post,然后复制,${deviceName}替换为设备名,设备名可在设备管理->设备 页面查看
我把${deviceName}替换为我的设备名字:phdd2024,然后粘贴到MQTT.fx,然后将物模型数据按照以下格式进行发布
多个功能数据发布格式:{params:{"标识符1":数据1,"标识符2":数据2}}
单个功能数据发布格式:{params:{"标识符1":数据1}}
这个标识符在下图这样找
所以我的这个物模型数据按格式是:
{params:{"temp":24,"LEDSwitch":1}}
点publish后,就可以把消息从MQTT.fx发到阿里云上了,可以进入阿里云的日志系统查看,如下图所示。
然后查看数据是否传输成功,如下图
3.4 阿里云下发数据到MQTT.fx
下发数据步骤和上传数据其实差不多,在自定义topic列表里复制一个具有订阅权限的topic :/sys/ic62GWmkta2/${deviceName}/thing/event/property/post_reply,将${deviceName}替换为设备名。
然后打开MQTT.fx,按下图操作。
然后打开阿里云发布消息,按如下图操作。