寫下這篇文章是為了記錄我學(xué)習(xí)使用esp8266的過程。在本文中我們會使用AT指令通過MQTT協(xié)議連接onenet云平臺
開篇必看
1)關(guān)于onenet MQTT設(shè)備創(chuàng)建
在設(shè)備連接onenet平臺中,你又幾個設(shè)備onenet就需要添加幾個設(shè)備,就比如我有一個arduino端,一個QT端,還有一個測試端需要連接同一個onenet MQTT協(xié)議產(chǎn)品,就需要添加三個設(shè)備。
一個設(shè)備只能連接一個設(shè)備。
2)關(guān)于數(shù)據(jù)流
數(shù)據(jù)流是指你上傳上云的數(shù)據(jù)名稱及數(shù)據(jù)內(nèi)容,在onenet云平臺上你可以手動添加數(shù)據(jù)流模板。
當(dāng)你上傳上去的數(shù)據(jù)流名在模板中沒有時,onenet云也會自動給你添加進(jìn)數(shù)據(jù)流,這種情況在數(shù)據(jù)流模板中并不會顯示,只會在數(shù)據(jù)流中顯示。?
3)關(guān)于發(fā)布與發(fā)送
發(fā)送是指將數(shù)據(jù)上傳到onenet云平臺上,發(fā)送上云的數(shù)據(jù)會在云平臺上顯示,而發(fā)布并不相同,發(fā)布的數(shù)據(jù)并不會在云平臺上顯示,只會被訂閱端接收,所以使用發(fā)布功能是一般有一個訂閱設(shè)備,這個設(shè)備可以是其他不同的設(shè)備,也可以是發(fā)送的設(shè)備。
4)具體AT指令參考文檔鏈接:https://pan.baidu.com/s/1KZ6ep3upJfXPYVoI1WWxSA?
提取碼:flas
1、燒錄AT固件
esp8266要使用MQTT需要燒錄AT固件,目前市場上常用的是樂鑫官網(wǎng)及安信可官網(wǎng)的AT固件,不同的AT固件之間它們的AT指令可能有所差異。在本文中我們使用onenet官網(wǎng)上提供的MQTT固件來連接onenet。
燒錄固件的工具可以使用樂鑫官網(wǎng)提供的燒錄工具工具 | 樂鑫科技 (espressif.com),也可以使用安信可官網(wǎng)提供的燒錄工具開發(fā)工具清單 | 安信可科技 (ai-thinker.com),具體燒錄方式可以查看我的另一篇博客。http://t.csdn.cn/b41W3
固件資料可以在onenet官網(wǎng)下載,也可以點擊我的鏈接下載
onenet官網(wǎng)固件資料:ESP8266 OneNET-MQTT接入固件 - 開發(fā)板專區(qū) - OneNET設(shè)備云論壇 (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);//設(shè)置硬串口波特率
mySerial.begin(115200);//設(shè)置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())//獲取從軟串口讀取有效的字節(jié)數(shù)
{
Serial.write(mySerial.read());//硬串口寫軟串口中讀取的數(shù)據(jù)
}
if (Serial.available()) {//獲取從硬串口讀取有效的字節(jié)數(shù)
mySerial.write(Serial.read());//軟串口寫硬串口中讀取的數(shù)據(jù)
}
}
將代碼燒錄進(jìn)去,測試是否能連接上你的WiFi熱點。之后進(jìn)行下一步操作。
4、通過MQTT協(xié)議連接onenet云平臺
onenet云平臺創(chuàng)建產(chǎn)品添加設(shè)備可以參考我的博客:http://t.csdn.cn/Obt47
首先記錄下你的產(chǎn)品ID,設(shè)備ID,和鑒權(quán)信息,
?
具體連接代如下:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9,10); // RX, TX //模擬一個軟串口
void setup()
{
Serial.begin(115200);//設(shè)置硬串口波特率
mySerial.begin(115200);//設(shè)置8266的波特率為9600
mySerial.println("AT+CWQAP");//斷開wifi
delay(200);
mySerial.println("AT+CWJAP=nova,22222222");//連接wifi,此為wifi ssid和密碼
delay(200);
mySerial.println("AT+IOTCFG=設(shè)備ID,產(chǎn)品ID,鑒權(quán)信息");//連接onenet平臺,設(shè)備ID,產(chǎn)品ID,鑒權(quán)信息
delay(200);
}
void loop()
{
if (mySerial.available())//獲取從軟串口讀取有效的字節(jié)數(shù)
{
Serial.write(mySerial.read());//硬串口寫軟串口中讀取的數(shù)據(jù)
}
if (Serial.available()) {//獲取從硬串口讀取有效的字節(jié)數(shù)
mySerial.write(Serial.read());//軟串口寫硬串口中讀取的數(shù)據(jù)
}
}
連接成功顯示如下:
串口監(jiān)視如下:
如果未連接成功,可以手動輸入AT指令讓其連接
5、arduino UNO與onenet之間進(jìn)行信息傳輸
現(xiàn)先將代碼附上:
//發(fā)送temperature信息
mySerial.print("AT+IOTSEND=0,temperature,");
mySerial.println(111);
delay(75);
//發(fā)布temperature信息
mySerial.print("AT+IOTPUB=temperature,");
mySerial.println(Tem);
delay(75);
?發(fā)送是指將信息發(fā)送到onenet云平臺上并在數(shù)據(jù)流上顯示
發(fā)布是指將信息發(fā)布出去,對應(yīng)發(fā)布MQTT協(xié)議還有一個訂閱功能,訂閱就是監(jiān)聽設(shè)備發(fā)布的信息并將其接收,所以在使用發(fā)布功能的時候一般會有設(shè)備對齊進(jìn)行訂閱。
發(fā)送成功顯示Send OK,發(fā)布成功顯示Publish
6、關(guān)于訂閱
訂閱是MQTT協(xié)議中重要的組成部分。一個設(shè)備既可以當(dāng)發(fā)布端,也可以當(dāng)訂閱端。
mySerial.println("AT+IOTSUB=Controal");//訂閱主題,主題名為DHC
delay(200);
訂閱成功會返回如下字段:
這時在發(fā)布數(shù)據(jù)就會有接收返回,數(shù)據(jù)入下:文章來源:http://www.zghlxwxcb.cn/news/detail-427367.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-427367.html
7、總代碼
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9,10); // RX, TX //模擬一個軟串口
void setup()
{
Serial.begin(115200);//設(shè)置硬串口波特率
mySerial.begin(115200);//設(shè)置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平臺,設(shè)備ID,產(chǎn)品ID,鑒權(quán)信息
delay(200);
}
void loop()
{
if (mySerial.available())//獲取從軟串口讀取有效的字節(jié)數(shù)
{
Serial.write(mySerial.read());//硬串口寫軟串口中讀取的數(shù)據(jù)
}
if (Serial.available()) {//獲取從硬串口讀取有效的字節(jié)數(shù)
mySerial.write(Serial.read());//軟串口寫硬串口中讀取的數(shù)據(jù)
}
//發(fā)送temperature信息
mySerial.print("AT+IOTSEND=0,temperature,");
mySerial.println(111);
delay(75);
//發(fā)布temperature信息
mySerial.print("AT+IOTPUB=temperature,");
mySerial.println(Tem);
delay(75);
}
到了這里,關(guān)于arduino UNO通過AT指令控制esp8266連接WiFi及onenet云平臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!