ESP8266-01s入门:AT指令讲解、上云与MQTT通信教程

章节

本项目教程总共分为四节
1.创建OneNET新版MQTT设备:为微信小程序与单片机通信打基础(微信小程序通信单片机前置任务)

2.(当前文章)ESP8266-01s入门:烧录AT固件与OneNET MQTT通信教程包含MQTT.fx1.7.1教程(微信小程序通信单片机前置任务)

3.物联网实践教程:微信小程序结合OneNET平台MQTT实现51/STM32单片机智能控制【单片机代码篇】

4.物联网实践教程(终章):微信小程序结合OneNET平台MQTT实现51/STM32单片机智能控制【微信小程序篇】

前言


欢迎跟随本教程,我们将一步一步地构建起一个智慧型项目,使您的单片机设备能够通过网络与世界互联。整个项目可以概括为以下四个核心阶段,每一个阶段都有一篇文章去详细说明

  1. 搭建物联网桥梁:首先,我们将在OneNET平台上注册并创建您的MQTT设备。这个过程为我们打下了互联网通信的基础。

  2. 引擎启动【此篇文章】:接下来,我们需要为我们的ESP8266模块烧录AT固件,确保它具备连接到MQTT服务器的能力。

  3. 编织数据网络:有了硬件基础后,是时候通过精心编写的代码让单片机通过ESP8266模块与MQTT服务器进行沟通。

  4. 微信小程序的桥梁:最终,我们将打造一个微信小程序,它不仅可以实时展示单片机传递的数据,还可以发送指令控制单片机。

透过这个分阶段的布局,即使是初学者也能跟随步骤轻松完成整个设定。让我们开始这段富有成就感的旅程吧!
最终成品演示:

ESP8266视频演示


欢迎阅读本教程,在这里我们将解锁物联网世界的大门。随着物联网技术的飞速发展,ESP8266-01s作为一款性价比极高的WiFi模块,成为了连接普通硬件设备至互联网的首选。如果您想在物联网项目中实现设备间的智能通信,那么您来对地方了。

本教程将逐步引导您了解如何为ESP8266-01s烧录AT固件,并通过简单的AT指令实现与OneNET云平台的MQTT设备连接。这是学习物联网应用开发不可或缺的基础技能虽然这篇文章篇幅较长,但它为您提供的细节将是非常宝贵的,确保您能够按步就班、稳扎稳打地完成设置。文章被划分为多个模块化的章节,您可以直接跳转到您最关心的部分。如果您有任何疑问、建议或反馈,我非常期待与您讨论。

不管您是物联网爱好者,还是嵌入式系统开发的初学者,本教程都将为您提供一条清晰的路径,让您能够轻松搭建智能物联网解决方案的蓝图。

在接下来的内容中,我们将从硬件接线开始,逐步过渡到固件烧录,最后完成ESP8266-01s与OneNET平台的MQTT通信测试让我们一起动手,开启这趟学习之旅。

项目所需材料清单:

在开始我们的项目之前,请确保您拥有以下所需硬件和软件:

硬件:

  • 51单片机STC89C52RC / 32单片机
  • ESP8266-01s WIFI模块
  • 软件及服务:

  • OneNET新版MQTT服务
  • ESP8266固件烧入软件
  • STC-ISP单片机烧录软件
  • ESP8266-01s固件
  • XCOM串口助手
  • 所有相关材料和软件已经在压缩包中准备好,您可以在文章底部找到下载链接。

    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

    转接口 ESP8266-01s
    VCC 3V3
    GND GND
    RXD TX
    TXD RX

    发送AT指令

    AT指令的解释及其用途

    1. AT

    2. 意义:这个指令是用来测试串口通信是否畅通的最基本指令。发送AT应该返回OK,代表通信没有问题。
    3. 作用:验证ESP8266-01s模块已经正确连接并且准备接收更多的AT指令。
    4. AT+CWMODE=1

    5. 意义:该指令用于设置ESP8266的Wi-Fi工作模式。CWMODE=1将模块设置为Station模式(STA模式),这意味着模块可以连到一个已存在的Wi-Fi网络。
    6. 作用:配置ESP8266作为Wi-Fi客户端,让其可以连接到无线路由器。
    7. AT+CWDHCP=1,1

    8. 意义:此指令用于设置DHCP(动态主机配置协议)。CWDHCP=1,1的设置使ESP8266在Station模式下启用DHCP客户端,这样它可以自动从网络路由器获取IP地址。
    9. 作用:确保ESP8266在连接到Wi-Fi网络时能够自动获得IP地址。
    10. AT+CWJAP="ESP","123456789"

    11. 意义:此指令用于连接到一个Wi-Fi热点。CWJAP后面的参数是网络SSID和密码。“ESP”是Wi-Fi的名称,“123456789”是连接该Wi-Fi网络的密码。
    12. 作用:使ESP8266连接到指定的Wi-Fi热点。
    13. AT+UART=9600,8,1,0,0

    14. 意义:这个指令用于设置ESP8266的串口通信参数。UART=9600,8,1,0,0设置串口通信的波特率为9600bps,数据位为8位,停止位为1位,无校验位,无流控。
    15. 作用:配置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都是我上一篇文章创建的,如果你们连接失败可以尝试发送我的

    1. AT+MQTTUSERCFG=0,1,"test","05Dy8U26rg","version=2018-10-31&res=products%2F05Dy8U26rg%2Fdevices%2Ftest&et=2017757596000&method=md5&sign=QdBLLnRoBevwqKx7TUjQdQ%3D%3D",0,0,""

    2. 意义:这个指令用于配置MQTT客户端的用户参数。参数0指的是客户端ID,1为MQTT版本,"test"是设备名称,"05Dy8U26rg"为产品ID,后面一长串是Token,最后的两个0表示是否清理会话和是否启用遗嘱消息。
    3. 作用:设置了客户端的认证信息和其他MQTT连接选项,这对于与MQTT代理进行通信是必要的。
    4. AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1

    5. 意义:此指令用于发起到MQTT服务器的连接。参数0是客户端ID,"mqtts.heclouds.com"是MQTT服务器地址,1883是服务器端口号,最后的1表示启用清理会话。
    6. 作用:根据提供的服务器详情和客户端配置信息,指令会尝试建立MQTT连接。
    7. AT+MQTTSUB=0,"$sys/05Dy8U26rg/test/thing/property/post/reply",0

    8. 意义:指令用于订阅MQTT主题。0是客户端ID,"$sys/05Dy8U26rg/test/thing/property/post/reply"是MQTT主题,最后的0是请求的服务质量(QoS)等级。
    9. 作用:向MQTT服务器表明客户端想要接收与该主题相关的消息。
    10. AT+MQTTPUB=0,"$sys/05Dy8U26rg/test/thing/property/post","{\"id\":\"123\"\,\"params\":{\"adcx\":{\"value\":15.7\}\,\"temp\":{\"value\":23.6\}}}",0,0

    11. 意义:通过此指令将消息发布到MQTT主题。0是客户端ID,"$sys/05Dy8U26rg/test/thing/property/post"是要发布消息的主题。紧接着的是要发布的消息内容,0,0分别表示消息的QoS等级和是否保留消息。
    12. 作用:发送一条消息到MQTT服务器,服务器则将该消息转发给订阅了对应主题的所有客户端。

    5.AT+MQTTSUB=0,"$sys/05Dy8U26rg/test/thing/property/set",0

  • 意义:该指令用于指示ESP8266模块订阅一个指定的MQTT主题,"$sys/05Dy8U26rg/test/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免费下载 如果网页打开慢,资源包里也有该资源

    点击设置

    配置密码等内容

    订阅和发布要怎么填写可以参考官方手册:通信手册
    上方也解释了订阅和发布大概是什么意思


    到这一步去查看OneNET属性会同步更新

    资源包下载

    资源包下载

    https://pan.baidu.com/s/15iw7kzn4GMUKP3g8809PUA?pwd=jq91

    物联沃分享整理
    物联沃-IOTWORD物联网 » ESP8266-01s入门:AT指令讲解、上云与MQTT通信教程

    发表评论