這里我們使用了一個庫: PubSubClient
中移動ONENET平臺 IP地址: 183.230.40.39
舊版MQTT端口號: 6002
一. 在ONENET平臺添加MQTT設備(舊版)
1. 添加
找到多協議接入入口
添加舊版MQTT產品
添加產品
添加產品成功
然后添加設備
2. 舊版MQTT關鍵信息
接下來我們來找到舊版MQTT關鍵的信息:
產品ID(在產品頁面)
2.設備ID(在設備界面)
3.設備鑒權信息
二. ESP32連接ONENET舊版MQTT
思路: 1.連接網絡 2.登錄ONENET 3.發布主題信息
#include delay(10); Serial.println('連接WIFI'); WiFi.begin(ssid, password); while (!WiFi.isConnected()) { Serial.print('.'); delay(500); } Serial.println('OK'); Serial.println('Wifi連接成功');}//收到主題下發的回調, 注意這個回調要實現三個形參 1:topic 主題, 2: payload: 傳遞過來的信息 3: length: 長度void callback(char *topic, byte *payload, unsigned int length){ Serial.println('message rev:'); Serial.println(topic); for (size_t i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println();}//向主題發送模擬的溫濕度數據void sendTempAndHumi(){ if (client.connected()) { snprintf(msgJson, 40, dataTemplate, 22.31, 25.92); //將模擬溫濕度數據套入dataTemplate模板中, 生成的字符串傳給msgJson json_len = strlen(msgJson); //msgJson的長度 msg_buf[0] = char(0x03); //要發送的數據必須按照ONENET的要求發送, 根據要求,數據第一位是3 msg_buf[1] = char(json_len >> 8); //數據第二位是要發送的數據長度的高八位 msg_buf[2] = char(json_len & 0xff); //數據第三位是要發送數據的長度的低八位 memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //從msg_buf的第四位開始,放入要傳的數據msgJson msg_buf[3 + strlen(msgJson)] = 0; //添加一個0作為最后一位, 這樣要發送的msg_buf準備好了 Serial.print('public message:'); Serial.println(msgJson); client.publish('$dp', (uint8_t *)msg_buf, 3 + strlen(msgJson)); //發送數據到主題$dp }}//重連函數, 如果客戶端斷線,可以通過此函數重連void clientReconnect(){ while (!client.connected()) //再重連客戶端 { Serial.println('reconnect MQTT...'); if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)) { Serial.println('connected'); } else { Serial.println('failed'); Serial.println(client.state()); Serial.println('try again in 5 sec'); delay(5000); } }}void setup(){ Serial.begin(115200); //初始化串口 delay(3000); //這個延時是為了讓我打開串口助手 setupWifi(); //調用函數連接WIFI client.setServer(mqtt_server, 6002); //設置客戶端連接的服務器,連接Onenet服務器, 使用6002端口 client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客戶端連接到指定的產品的指定設備.同時輸入鑒權信息 client.setCallback(callback); //設置好客戶端收到信息是的回調 tim1.attach(20, sendTempAndHumi); //定時每20秒調用一次發送數據函數sendTempAndHumi}void loop(){ if (!WiFi.isConnected()) //先看WIFI是否還在連接 { setupWifi(); } if (!client.connected()) //如果客戶端沒連接ONENET, 重新連接 { clientReconnect(); } client.loop(); //客戶端循環檢測} 可以上傳數據,也能接收到OneNet下發的命令 后來又在接收命令的callback里寫了一個點燈, 下發命令1就開燈, 0就關燈 if (payload[0] == 49)
{
digitalWrite(2, HIGH);
}
if (payload[0] == 48)
{
digitalWrite(2, LOW);
}
上一篇:玩轉 ESP32 + Arduino (十三) 通過MQTTs協議上傳數據至OneNet云平臺
下一篇:最后一頁
推薦閱讀最新更新時間:2025-04-07 16:28

設計資源 培訓 開發板 精華推薦
- YD75:基于apmc8t6的75配列鍵盤
- EVAL-AD7797EBZ,用于應變計的 AD7797、24 位、123SPS ADC 的評估板
- L4949ED-E 多功能極低壓降穩壓器的典型應用
- MPC5748G-GW-RDB、MPC5748G 安全以太網網關參考設計
- 使用 Microchip Technology 的 DVR2802B3 的參考設計
- 用于 2.8V 至 32V 輸入的完整 5V 隔離反激式轉換器
- Z8F04A28100KITG、Z8 Encore XP F042A 開發套件
- LED聲控燈
- NCL30160GEVB:1 A LED 驅動器降壓評估板
- AM6TW-4818DH35Z ±18V 6 瓦單路輸出 DC/DC 轉換器的典型應用
- 看視頻贏50元京東卡|泰享實測之水哥秘籍第四期
- 【貝能好禮相送】我們拼啦 尋覓Infineon 調光恒流LED驅動器 ICL5102寫真
- 最后一周:免費獲取Pasternack《RF產品選型指南》2018 印刷版!
- 有獎直播|TI毫米波雷達在汽車領域的最新應用
- 有獎直播 | 羅徹斯特電子為您細說:半導體停產后的挑戰與解決方案
- 【MPS有獎分享】便攜式多功能電工臺的核“芯”功能測試與結構設計
- Quartus Prime設計軟件15.1版 帶你體驗革命性的設計生涯
- 收藏英飛凌天貓店 或 下單都有禮、打折滿減同享!
- ADI有獎直播:基準電壓源產品技術及應用選擇 7月25日上午10:00-11:30 不容錯過~
- 看咱壇友自己的研討會~ST-EEWORLD線下網友見面會實錄