写下这篇文章是为了记录我学习使用esp8266的过程。在本文中我们会使用AT指令通过MQTT协议连接onenet云平台
开篇必看
1)关于onenet MQTT设备创建
在设备连接onenet平台中,你又几个设备onenet就需要添加几个设备,就比如我有一个arduino端,一个QT端,还有一个测试端需要连接同一个onenet MQTT协议产品,就需要添加三个设备。
一个设备只能连接一个设备。
2)关于数据流
数据流是指你上传上云的数据名称及数据内容,在onenet云平台上你可以手动添加数据流模板。
当你上传上去的数据流名在模板中没有时,onenet云也会自动给你添加进数据流,这种情况在数据流模板中并不会显示,只会在数据流中显示。
3)关于发布与发送
发送是指将数据上传到onenet云平台上,发送上云的数据会在云平台上显示,而发布并不相同,发布的数据并不会在云平台上显示,只会被订阅端接收,所以使用发布功能是一般有一个订阅设备,这个设备可以是其他不同的设备,也可以是发送的设备。
4)具体AT指令参考文档链接:https://pan.baidu.com/s/1KZ6ep3upJfXPYVoI1WWxSA
提取码:flas
1、烧录AT固件
esp8266要使用MQTT需要烧录AT固件,目前市场上常用的是乐鑫官网及安信可官网的AT固件,不同的AT固件之间它们的AT指令可能有所差异。在本文中我们使用onenet官网上提供的MQTT固件来连接onenet。
烧录固件的工具可以使用乐鑫官网提供的烧录工具工具 | 乐鑫科技 (espressif.com),也可以使用安信可官网提供的烧录工具开发工具清单 | 安信可科技 (ai-thinker.com),具体烧录方式可以查看我的另一篇博客。http://t.csdn.cn/b41W3
固件资料可以在onenet官网下载,也可以点击我的链接下载
onenet官网固件资料:ESP8266 OneNET-MQTT接入固件 - 开发板专区 - OneNET设备云论坛 (10086.cn)
onenet MQTT固件资料:链接:https://pan.baidu.com/s/1KZ6ep3upJfXPYVoI1WWxSA
提取码:flas
2、arduino连接esp8266
arduino uno | esp8266 |
GND | GND |
3,3V | VCC |
CH_PD | 3.3V |
9 | RX |
10 | TX |
3、arduino UNO 通过软串口AT控制esp8266连接WiFi
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9,10); // RX, TX //模拟一个软串口
void setup()
{
Serial.begin(115200);//设置硬串口波特率
mySerial.begin(115200);//设置8266的波特率为9600
mySerial.println("AT+CWQAP");//断开wifi
delay(200);
mySerial.println("AT+CWJAP=nova,22222222");//连接wifi,此为wifi ssid和密码
delay(200);
}
void loop()
{
if (mySerial.available())//获取从软串口读取有效的字节数
{
Serial.write(mySerial.read());//硬串口写软串口中读取的数据
}
if (Serial.available()) {//获取从硬串口读取有效的字节数
mySerial.write(Serial.read());//软串口写硬串口中读取的数据
}
}
将代码烧录进去,测试是否能连接上你的WiFi热点。之后进行下一步操作。
4、通过MQTT协议连接onenet云平台
onenet云平台创建产品添加设备可以参考我的博客:http://t.csdn.cn/Obt47
首先记录下你的产品ID,设备ID,和鉴权信息,
具体连接代如下:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9,10); // RX, TX //模拟一个软串口
void setup()
{
Serial.begin(115200);//设置硬串口波特率
mySerial.begin(115200);//设置8266的波特率为9600
mySerial.println("AT+CWQAP");//断开wifi
delay(200);
mySerial.println("AT+CWJAP=nova,22222222");//连接wifi,此为wifi ssid和密码
delay(200);
mySerial.println("AT+IOTCFG=设备ID,产品ID,鉴权信息");//连接onenet平台,设备ID,产品ID,鉴权信息
delay(200);
}
void loop()
{
if (mySerial.available())//获取从软串口读取有效的字节数
{
Serial.write(mySerial.read());//硬串口写软串口中读取的数据
}
if (Serial.available()) {//获取从硬串口读取有效的字节数
mySerial.write(Serial.read());//软串口写硬串口中读取的数据
}
}
连接成功显示如下:
串口监视如下:
如果未连接成功,可以手动输入AT指令让其连接
5、arduino UNO与onenet之间进行信息传输
现先将代码附上:
//发送temperature信息
mySerial.print("AT+IOTSEND=0,temperature,");
mySerial.println(111);
delay(75);
//发布temperature信息
mySerial.print("AT+IOTPUB=temperature,");
mySerial.println(Tem);
delay(75);
发送是指将信息发送到onenet云平台上并在数据流上显示
发布是指将信息发布出去,对应发布MQTT协议还有一个订阅功能,订阅就是监听设备发布的信息并将其接收,所以在使用发布功能的时候一般会有设备对齐进行订阅。
发送成功显示Send OK,发布成功显示Publish
6、关于订阅
订阅是MQTT协议中重要的组成部分。一个设备既可以当发布端,也可以当订阅端。
mySerial.println("AT+IOTSUB=Controal");//订阅主题,主题名为DHC
delay(200);
订阅成功会返回如下字段:
这时在发布数据就会有接收返回,数据入下:文章来源:https://www.toymoban.com/news/detail-427367.html
文章来源地址https://www.toymoban.com/news/detail-427367.html
7、总代码
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9,10); // RX, TX //模拟一个软串口
void setup()
{
Serial.begin(115200);//设置硬串口波特率
mySerial.begin(115200);//设置8266的波特率为9600
mySerial.println("AT+CWQAP");//断开wifi
delay(200);
mySerial.println("AT+CWJAP=nova,22222222");//连接wifi,此为wifi ssid和密码
delay(200);
mySerial.println("AT+IOTCFG=943135649,506581,222222");//连接onenet平台,设备ID,产品ID,鉴权信息
delay(200);
}
void loop()
{
if (mySerial.available())//获取从软串口读取有效的字节数
{
Serial.write(mySerial.read());//硬串口写软串口中读取的数据
}
if (Serial.available()) {//获取从硬串口读取有效的字节数
mySerial.write(Serial.read());//软串口写硬串口中读取的数据
}
//发送temperature信息
mySerial.print("AT+IOTSEND=0,temperature,");
mySerial.println(111);
delay(75);
//发布temperature信息
mySerial.print("AT+IOTPUB=temperature,");
mySerial.println(Tem);
delay(75);
}
到了这里,关于arduino UNO通过AT指令控制esp8266连接WiFi及onenet云平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!