章节
本项目教程总共分为四节
1.创建OneNET新版MQTT设备:为微信小程序与单片机通信打基础(微信小程序通信单片机前置任务)
2.(当前文章)ESP8266-01s入门:烧录AT固件与OneNET MQTT通信教程包含MQTT.fx1.7.1教程(微信小程序通信单片机前置任务)
3.物联网实践教程:微信小程序结合OneNET平台MQTT实现51/STM32单片机智能控制【单片机代码篇】
4.物联网实践教程(终章):微信小程序结合OneNET平台MQTT实现51/STM32单片机智能控制【微信小程序篇】
前言
欢迎跟随本教程,我们将一步一步地构建起一个智慧型项目,使您的单片机设备能够通过网络与世界互联。整个项目可以概括为以下四个核心阶段,每一个阶段都有一篇文章去详细说明:
-
搭建物联网桥梁:首先,我们将在OneNET平台上注册并创建您的MQTT设备。这个过程为我们打下了互联网通信的基础。
-
引擎启动【此篇文章】:接下来,我们需要为我们的ESP8266模块烧录AT固件,确保它具备连接到MQTT服务器的能力。
-
编织数据网络:有了硬件基础后,是时候通过精心编写的代码让单片机通过ESP8266模块与MQTT服务器进行沟通。
-
微信小程序的桥梁:最终,我们将打造一个微信小程序,它不仅可以实时展示单片机传递的数据,还可以发送指令控制单片机。
透过这个分阶段的布局,即使是初学者也能跟随步骤轻松完成整个设定。让我们开始这段富有成就感的旅程吧!
最终成品演示:
欢迎阅读本教程,在这里我们将解锁物联网世界的大门。随着物联网技术的飞速发展,ESP8266-01s作为一款性价比极高的WiFi模块,成为了连接普通硬件设备至互联网的首选。如果您想在物联网项目中实现设备间的智能通信,那么您来对地方了。
本教程将逐步引导您了解如何为ESP8266-01s烧录AT固件,并通过简单的AT指令实现与OneNET云平台的MQTT设备连接。这是学习物联网应用开发不可或缺的基础技能。虽然这篇文章篇幅较长,但它为您提供的细节将是非常宝贵的,确保您能够按步就班、稳扎稳打地完成设置。文章被划分为多个模块化的章节,您可以直接跳转到您最关心的部分。如果您有任何疑问、建议或反馈,我非常期待与您讨论。
不管您是物联网爱好者,还是嵌入式系统开发的初学者,本教程都将为您提供一条清晰的路径,让您能够轻松搭建智能物联网解决方案的蓝图。
在接下来的内容中,我们将从硬件接线开始,逐步过渡到固件烧录,最后完成ESP8266-01s与OneNET平台的MQTT通信测试。让我们一起动手,开启这趟学习之旅。
项目所需材料清单:
在开始我们的项目之前,请确保您拥有以下所需硬件和软件:
硬件:
- 51单片机 / 32单片机
- ESP8266-01s WIFI模块
软件及服务:
- OneNET新版MQTT服务
- ESP8266固件烧入软件
- STC-ISP单片机烧录软件
- ESP8266-01s固件
- XCOM串口助手
- OneNET token计算软件
所有相关材料和软件已经在压缩包中准备好,您可以在文章底部找到下载链接。
AT指令集介绍
AT指令是一种文本序列,用于控制调制解调器、手机等通讯设备。“AT"代表"Attention”,其后跟随的文字指定要执行的命令。在ESP8266等模块中,AT指令用于设定模块参数、控制网络连接和其他功能。
以下是一些常用的AT指令示例:
AT
:检测通信模块与控制端之间的连接。AT+RST
:重置模块。AT+CWMODE
:设置Wi-Fi工作模式(例如Station模式、AP模式)。AT+CWJAP
:连接Wi-Fi网络。
AT指令集的优势在于其简单性,使得开发者能够不必深入微控制器的复杂编程,就能够快速实现无线通信的基本功能。
MQTT设备介绍
MQTT(Message Queuing Telemetry Transport) 是一个轻量级的、基于发布/订阅模型的消息协议,专为低带宽和不稳定网络环境设计,广泛用于物联网设备之间的通信。
在MQTT中,设备可以作为 发布者 发送消息,或者作为 订阅者 接收特定主题(Topic)的消息。这个模型允许多个设备共享特定的数据点并响应相应的变化。
MQTT设备使用这一协议,通过轻量级的消息交换,实现设备间的有效通讯和数据传输。
ESP8266-01s介绍
ESP8266-01s 是一个自带TCP/IP协议栈的Wi-Fi模块,使得任何微控制器都可以利用它访问Wi-Fi网络。它广泛被用于物联网项目,因其小巧的尺寸、稳定的性能和极具性价比的特性。
通过简单的串口通信,使用 AT指令 即可控制 ESP8266-01s 进行网络操作,如连接Wi-Fi、建立TCP连接、发送数据等。
升级至最新的AT固件后,ESP8266-01s还支持 MQTT 协议,可作为MQTT客户端直接连接到MQTT服务器,实现物联网设备和云服务之间的消息交换。
固件烧录介绍
烧录最新的MQTT AT固件到ESP8266-01s模块的原因是,这一固件版本提供了对MQTT协议的原生支持,这使得模块能够直接作为MQTT客户端进行操作。以下是烧录MQTT AT固件的几个关键原因:
-
直接支持MQTT:传统的AT固件可能不支持MQTT协议或者支持的并不完整。最新的MQTT AT固件提供了专门的AT指令来设置和控制MQTT连接、发布和接受消息。
-
简化开发流程:对于不熟悉底层TCP/IP和MQTT协议堆栈的开发者来说,通过AT指令操作MQTT可以极大简化开发过程。开发者可以避免编写庞大的网络代码,而是通过简单的AT指令实现复杂的网络通信。
-
兼容性:使用标准的MQTT AT指令集可以确保设备于多种MQTT代理或者服务(如OneNET云平台)的兼容性,减少了调试和配置的难度。
-
低功耗实现:考虑到物联网设备经常对电源要求很高,通过MQTT AT固件使得ESP8266仅在必要时连接网络,可以有效降低能耗。
-
功能性与灵活性:烧录的MQTT AT固件不仅支持基本的网络连接,还允许用户配置MQTT特有的功能,如Will Message(遗嘱消息)、Clean Session(清除会话)、QoS(服务质量)等。
-
易于集成和扩展:拥有了MQTT支持的ESP8266可以更加容易集成进复杂的系统中,如与微信小程序等第三方服务的集成和交互。
因此,烧录MQTT AT固件是将ESP8266-01s提升至一个新层次的关键步骤,不仅使其功能更强大,同时也让物联网设备的开发变得更加有效和灵活。
开始烧录固件
连线
如果是ESP PROG V1.0则如图连接
如果是USB转TTL
USB-TTL | ESP8266-01s |
---|---|
VCC | 3V3 |
3V3 | EN |
TXD | RXD |
RXD | TXD |
GND | GND |
GND | IO0 |
如果GND不够可以用弄个面包板或者其他的工具,来扩展GND接口
固件和软件下载
烧录WiFi固件工具:ESP_DOWNLOAD_TOOL
⑦、MQTT透传AT固件(固件号:1471)
下载好后,根据图示教程来:
打开烧录软件:
下载完成后会显示“完成“
测试AT指令
连线
如果是ESP PROG V1.0则RXD接RX,TXD接TX
亲测如果wifi模块还插在那个座子上是连不上WIFI的,
所以要用线相连接(如果有串口号,但是数据发送和接收不了就换一下RX和TX连接)
转接口 | ESP8266-01s |
---|---|
VCC | 3V3 |
GND | GND |
RXD | RX |
TXD | TX |
发送AT指令
AT指令的解释及其用途
-
AT
- 意义:这个指令是用来测试串口通信是否畅通的最基本指令。发送
AT
应该返回OK
,代表通信没有问题。 - 作用:验证ESP8266-01s模块已经正确连接并且准备接收更多的AT指令。
- 意义:这个指令是用来测试串口通信是否畅通的最基本指令。发送
-
AT+CWMODE=1
- 意义:该指令用于设置ESP8266的Wi-Fi工作模式。
CWMODE=1
将模块设置为Station模式(STA模式),这意味着模块可以连到一个已存在的Wi-Fi网络。 - 作用:配置ESP8266作为Wi-Fi客户端,让其可以连接到无线路由器。
- 意义:该指令用于设置ESP8266的Wi-Fi工作模式。
-
AT+CWDHCP=1,1
- 意义:此指令用于设置DHCP(动态主机配置协议)。
CWDHCP=1,1
的设置使ESP8266在Station模式下启用DHCP客户端,这样它可以自动从网络路由器获取IP地址。 - 作用:确保ESP8266在连接到Wi-Fi网络时能够自动获得IP地址。
- 意义:此指令用于设置DHCP(动态主机配置协议)。
-
AT+CWJAP="ESP","123456789"
- 意义:此指令用于连接到一个Wi-Fi热点。
CWJAP
后面的参数是网络SSID和密码。“ESP”是Wi-Fi的名称,“123456789”是连接该Wi-Fi网络的密码。 - 作用:使ESP8266连接到指定的Wi-Fi热点。
- 意义:此指令用于连接到一个Wi-Fi热点。
-
AT+UART=9600,8,1,0,0
- 意义:这个指令用于设置ESP8266的串口通信参数。
UART=9600,8,1,0,0
设置串口通信的波特率为9600bps,数据位为8位,停止位为1位,无校验位,无流控。 - 作用:配置ESP8266的串口通信方式,确保ESP8266与连接的设备(如单片机或电脑)有着相同的通信参数,以便正确交换数据。
- 意义:这个指令用于设置ESP8266的串口通信参数。
每个AT指令都是为了设置ESP8266模块的特定参数或执行特定的动作。正确使用这些AT指令,可以使ESP8266-01s成功地连接到网络,并进行进一步的操作,如数据传输或与MQTT服务器的通信。
打开XCOM软件(其他的串口助手软件也可以)(资源包下载)
下一步
MQTT通信的发布和订阅简单的理解
通俗易懂地讲,MQTT就像是一个邮局,而主题(Topic)好比是邮局里的个人邮箱。
发布(Publish):
想象你有一些信息(如:今天天气怎样)想要告诉别人,你就把这个信息放进邮局的一个特定的邮箱(主题)里。
订阅(Subscribe):
如果有人想知道这个特定的信息,他们就可以告诉邮局,他们对这个邮箱(主题)感兴趣。这样,每当有新信息放入这个邮箱时,邮局就会把它送给那些订阅了这个邮箱的人。
举个例子:
- 如果你有一个智能天气站,它可以定期将天气更新(发布)放在“weather/today”这个邮箱(主题)里。
- 然后,任何对今天天气感兴趣的人们(如智能手机APP)都可以向邮局(MQTT服务器)表明他们对这个“weather/today”邮箱(主题)感兴趣(订阅)。
- 一旦智能天气站更新了今天的天气信息,所有订阅了这个邮箱的人都会收到这个消息。
这样的系统特别好的地方是,发送消息的人不需要知道谁在听,而听消息的人也不用知道谁在说。这就是MQTT在物联网中非常受欢迎的原因,它可以连接很多设备,让它们互相发送接收消息。
书接上回
对于上一篇文章,我们已经保存了OneNET MQTT的设备名称、产品ID及生成的Token
先解释一下接下来要用的AT指令的解释及其用途
下面是使用的产品id和设备名称还有Token都是我上一篇文章创建的,如果你们连接失败可以尝试发送我的
-
AT+MQTTUSERCFG=0,1,"CSDN","YqRZ5hrM6p","version=2018-10-31&res=products%2FYqRZ5hrM6p%2Fdevices%2FCSDN&et=2028715245&method=md5&sign=G4I0xqIYmYUtCdTTo2t%2FqQ%3D%3D",0,0,""
- 意义:这个指令用于配置MQTT客户端的用户参数。参数
0
指的是客户端ID,1
为MQTT版本,"CSDN"
是设备名称,"YqRZ5hrM6p"
为产品ID,后面一长串是Token,最后的两个0
表示是否清理会话和是否启用遗嘱消息。 - 作用:设置了客户端的认证信息和其他MQTT连接选项,这对于与MQTT代理进行通信是必要的。
- 意义:这个指令用于配置MQTT客户端的用户参数。参数
-
AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1
- 意义:此指令用于发起到MQTT服务器的连接。参数
0
是客户端ID,"mqtts.heclouds.com"
是MQTT服务器地址,1883
是服务器端口号,最后的1
表示启用清理会话。 - 作用:根据提供的服务器详情和客户端配置信息,指令会尝试建立MQTT连接。
- 意义:此指令用于发起到MQTT服务器的连接。参数
-
AT+MQTTSUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/post/reply",0
- 意义:指令用于订阅MQTT主题。
0
是客户端ID,"$sys/YqRZ5hrM6p/CSDN/thing/property/post/reply"
是MQTT主题,最后的0
是请求的服务质量(QoS)等级。 - 作用:向MQTT服务器表明客户端想要接收与该主题相关的消息。
- 意义:指令用于订阅MQTT主题。
-
AT+MQTTPUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/post","{\"id\":\"123\"\,\"params\":{\"temp\":{\"value\":23.6\}}}",0,0
- 意义:通过此指令将消息发布到MQTT主题。
0
是客户端ID,"$sys/YqRZ5hrM6p/CSDN/thing/property/post"
是要发布消息的主题。紧接着的是要发布的消息内容,0,0
分别表示消息的QoS等级和是否保留消息。 - 作用:发送一条消息到MQTT服务器,服务器则将该消息转发给订阅了对应主题的所有客户端。
- 意义:通过此指令将消息发布到MQTT主题。
5.AT+MQTTSUB=0,"$sys/YqRZ5hrM6p/CSDN/thing/property/set",0
- 意义:该指令用于指示ESP8266模块订阅一个指定的MQTT主题,
"$sys/YqRZ5hrM6p/CSDN/thing/property/set"
。 - 作用:使ESP8266模块能够监听并接收到任何发送到这个主题的消息,通常这些消息是针对设备设置或控制指令。
开始用AT指令连接MQTT
记得将下面的内容更改自己的信息
串口发送的内容 | 串口接收的内容 |
---|---|
1.AT+UART=9600,8,1,0,0 | OK |
2. AT | OK |
3.AT+RST | OK |
4. AT+CWMODE=1 | OK |
5. AT+CWDHCP=1,1 | OK |
6. AT+CWJAP="WIFI名称","WIFI密码" | OK |
7.AT+MQTTUSERCFG=0,1,"设备名称","产品id","你的Token",0,0,"" | OK |
8.AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1 | OK |
9.AT+MQTTSUB=0,"$sys/产品id/设备名称/thing/property/post/reply",0 | OK |
10.AT+MQTTSUB=0,"$sys/产品id/设备名称/thing/property/set",0 | OK |
11.AT+MQTTPUB=0,"$sys/产品id/设备名称/thing/property/post","{\"id\":\"123\"\,\"params\":{\"属性名\":{\"value\":数值\}\,\"属性名\":{\"value\":数值\}}}",0,0 | OK |
第11步骤可以查看官方文档:官方演示
发送则如图所示
数据下发:
通过串口发送数据后可以在OneNET设备查看是否有数据
如果看到数据成功同步显示了 祝贺您!您已经成功完成了使用AT指令连接单片机和ESP8266,并实现了数据的上传下载。现在,您不仅掌握了基本的物联网通信技能,而且为后续深入学习打下了坚实的基础。接下来,当您涉足程序开发和微信小程序相关内容,您会发现之前种下的智慧之种已经开始生根发芽,因为有了这次经验的积累,接下来的学习旅程肯定会更加顺利。继续加油,物联网的世界等待您去探索!
附加内容 MQTT.fx 1.7.1使用教程
下载MQTT fx 1.7.1免费下载 如果网页打开慢,资源包里也有该资源
这个软件可以模拟ESP8266-01Swifi模块连接OneNET平台
点击设置
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0960a76c1b19403b8b0cfbb7aededfcc.p
订阅和发布要怎么填写可以参考官方手册:通信手册
上方也解释了订阅和发布大概是什么意思
1.订阅设备属性上报响应 $sys/{pid}/{device-name}/thing/property/post/reply
2.设备属性上报请求 $sys/{pid}/{device-name}/thing/property/post
发布
{
"id": "123",
"version": "1.0",
"params": {
"temp": {
"value": "12345"
}
}
}
设备属性设置请求 $sys/{pid}/{device-name}/thing/property/set
订阅
设备属性设置响应 $sys/{pid}/{device-name}/thing/property/set_reply
发布
下面的id的数值是需要根据OneNET下发的数据中的id值
{
"id": "6",
"code": 200,
"msg": "success"
}