title: 基於MQTT協議的WZ指令開發
tags: WZ指令
date: 2018-10-11 10:53:00
這是一款真正的基於MQTT的AT指令
基於MQTT協議的MCU通訊指令-WZ指令
2.0版本已完結,可用於STM32的數據發送。
名稱:基於MQTT的萬能AT指令(名稱來源於本人名字故取名爲WZ指令)
特點: 簡單到只需要一行代碼就可以將數據點推送至MQTT服務器 可用於個人EMQ服務器,或者樹莓派搭建的局域網服務器(暫不支持onenet等商用平臺)
默認端口:1883
同時支持微信配網、安卓APP配網,支持掉電存儲、支持用戶名密碼校驗、 支持wifi掉線重連、支持服務器掉線重連。
版本號:V2.0
作者:阿正
網站:wenzheng.club
固件可以加羣下載:476840321
- 目前市面上能找到的兼容MQTT的AT指令少之又少
- 而且安信可和樂鑫官方也沒有開發這個AT指令,基本上都是基於MCU端的處理,同時MQTT是基於TCP轉化而來,
- 如果想要用MQTT就把TCP數據封包成爲MQTT協議,就可以用TCP發出MQTT的數據。
這是arduino中文社區的一篇帖子,感覺講的非常好https://www.arduino.cn/thread-82851-1-1.html
我的方法,與上面的方法不同,我是從用戶端的邏輯來進行的操作,以至於達到了很好的用戶體驗!
最終效果:
使用說明:
****************************
名稱:基於MQTT的萬能AT指令(名稱來源於本人名字故取名爲WZ指令)
特點:
簡單到只需要一行代碼就可以將數據點推送至MQTT服務器
可用於個人EMQ服務器,或者樹莓派搭建的局域網服務器(暫不支持onenet等商用平臺)
默認端口:1883
同時支持微信配網、安卓APP配網,支持掉電存儲、支持用戶名密碼校驗、
支持wifi掉線重連、支持服務器掉線重連。
版本號:V2.0
作者:阿正
網站:wenzheng.club
*****************************
燒寫位置:0x00000000
建議將ESP01清除緩存後再燒寫
配網:微信智能配網(或者安卓APP配網),可掉電存儲,不需要AT指令單獨配置。
AT指令:僅此一條json數據,沒有繁瑣的其他配置環節,簡單粗暴
{"wz":"wenzheng.club","server":"60.205.203.64","user":"admin1","password":"public","topic":"20190213134505","message":"test2019"}
AT指令說明:
1、"wz":"wenzheng.club" 爲必填項!無此字段無法使用此指令。
2、服務器連接:第一次發送這條AT指令時會進行服務器連接,
3、消息發佈:後續發送這條AT指令則代表發送指定主題的消息。message目前最大支持200字節。
3、主題訂閱:目前暫不支持用戶自定義訂閱主題,
但是系統開機默認訂閱主題名爲:wz_server 的主題!
4、消息接收:wz_server 發佈的消息會在串口中打印出來,
如:WZ:[Hello world!]
用戶可對此進行處理然後執行相關動作。
後續版本會支持用戶自定義。
代碼舉例:
**arduino**
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println({\"wz\":\"wenzheng.club\",\"server\":\"60.205.203.64\",\"user\":\"root\",\"password\":\"citc2018\",\"topic\":\"ZX1040300101000\",\"message\":\"T:226;H:232;\"}");
//真正的只需要一行代碼實現數據發送!!用戶只需要拼接字符即可!
delay(1000);
}
**STM32**
單片機配置好串口直接
printf("{\"wz\":\"wenzheng.club\",\"server\":\"60.205.203.64\",\"user\":\"root\",\"password\":\"citc2018\",\"topic\":\"ZX10403001010000\",\"message\":\"T:226;H:232;\"}");
即可!
///**************///
更新日誌:
2019年2月13日晚上製作V2.0版本
添加mqtt_user驗證
添加mqtt_passward驗證
2019年2月13日上午製作V1.0版本
實現基本通訊
2019年初有初步想法
STM32串口測試:
總結,經過我的測試,還是相對穩定的,無論是Arduino還是STM32進行數據發送,都是可以的。經測試Arduino不間斷髮送3000+數據,服務器接收依然正常!