0-STM32+ESP8266+Air302基本控制篇(自建物聯網平臺)-整體執行測試-微信小程式使用APUConfig配網繫結ESP8266,並通過MQTT和ESP8266實現遠端通訊控制
阿新 • • 發佈:2022-04-02
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_A/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
這節測試一下微信小程式使用APUConfig配網繫結ESP8266,並通過MQTT和模組實現遠端通訊控制
這一節作為板子的整體功能測試,使用者下載這一節的程式用來測試基本控制篇實現的基本功能
還有就是測試一下板子是否工作正常.
提示
微控制器都是使用串列埠2和模組進行通訊, 開發板只安裝上WiFi模組.
測試準備工作
1.下載這節程式到微控制器
2.微控制器工程目錄
3.Hex檔案位置
4.使用微控制器串列埠1列印串列埠日誌(115200)
正常情況下會列印
5.安裝微信小程式(使用開發工具匯入以下工程)
注:如果沒有學習過小程式,請先學習微信小程式開源教程
6.設定域名
注:預設連線的我的伺服器,mnif.cn,使用者可以在詳情裡面選擇不校驗域名(不推薦,可能通訊有問題)
也可以在微信小程式平臺上設定域名白名單(推薦)
7,點選 預覽,使用微信掃碼以後安裝到手機
8.新增裝置
9.新增WiFi裝置
10.手機連線自家的路由器,輸入自家路由器密碼
11.長按開發板上面的微控制器按鍵引腳大約3S,直至指示燈快閃
12.點選 APP 繫結裝置按鈕
13,繫結成功以後自動跳轉到主頁面,並添加了一個裝置
14.點選裝置進入裝置控制頁面
整體說明
整個程式就是利用MQTT伺服器實現APP和裝置之間通訊.
APP通過APUConfig配置模組連線路由器,並獲取模組的MAC地址資訊
裝置連線上MQTT伺服器以後,裝置訂閱的主題是: user/裝置的MAC 裝置釋出的主題是: device/裝置的MAC
APP獲取裝置的MAC地址後,APP釋出的主題是: user/裝置的MAC APP訂閱的主題是: device/裝置的MAC
APP和裝置的釋出和訂閱的主題相對應,APP和裝置的訊息發給MQTT伺服器以後,MQTT伺服器就為各自的訊息互相轉發.
程式繫結過程
1.整體
APP連線WiFi模組發出的無線訊號(ssid:wifi_8266_bind; Password:11223344),然後使用UDP和模組進行通訊
APP連線上wifi模組的無線以後,不停的使用udp把路由器資訊發給模組
模組接收到路由器資訊以後把自身的MAC地址發給APP
2,啟動繫結
3.注意
按常理來講,應該是模組獲取到路由器資訊,然後連線上之後再把自己的MAC傳遞給APP,然後實現繫結.
但是以上程式並沒有這樣做,因為測試發現,如果控制了模組連線路由器,會導致APP斷開和wifi的無線連線.
4.現在看下微信小程式的繫結程式,點選新增裝置選單跳轉到新增裝置頁面
5.點選新增WiFi裝置按鈕跳轉到繫結頁面
6.點選繫結按鈕連線WiFi模組的熱點
7.連線上熱點以後初始化UDP
8.每隔1S傳送路由器資訊給WiFi模組
9,接收到模組返回的mac地址資料,攜帶著資料跳轉到index
10,儲存資料
11,顯示資料
微控制器程式細節說明
1,串列埠2接收模組資料的時候,單獨使用一個快取,快取了TCP接收的資料
程式MQTT通訊過程
1.關於MQTT解析包
mqtt_msg 檔案是最底層的mqtt協議封裝檔案, 使用者不需要研究
mqtt 檔案是在mqtt_msg之上封裝的一套檔案,該檔案內部處理了mqtt各種通訊流程,使用者也是呼叫這裡面的api函式.
具體使用可以接著往下看.
使用者始終記住:和mqtt伺服器通訊就是和tcp伺服器通訊.不過他們之間的通訊資料需要按照mqtt協議規定.
2.配置所連線的MQTT伺服器的引數
3.初始化MQTT變數,註冊相應的回撥函式
我編寫的包是以註冊回撥函式的形式使用.
4.先使用TCP連線上TCP伺服器(MQTT伺服器就是TCP伺服器嘛)
控制連線伺服器使用的是 ConfigModuleNoBlock 框架
提示:這個裡面也獲取了模組的MAC, 作為了MQTT客戶端的ClientID
5.連線上TCP以後,傳送連線MQTT協議
6.把伺服器返回的資料交給mqtt_function_connect_ack 函式處理
如果返回的資料是連線成功,此函式便會呼叫上面註冊的連線成功回撥函式
6.在連線成功回撥函式中訂閱主題,組合釋出的主題
7.連線成功MQTT伺服器以後解析伺服器下發的MQTT資料是下面的函式
把接收的mqtt資料交給這個函式,函式內部解析之後會呼叫相應的回撥函式
8.接收處理MQTT訊息
控制繼電器吸合 {"data":"switch","bit":"1","status":"1"}
控制繼電器斷開 {"data":"switch","bit":"1","status":"0"}
查詢繼電器狀態 {"data":"switch","bit":"1","status":"-1"}
9.傳送溫溼度資料
10.提示
只要是連線上MQTT了,使用者只需要在任意地方呼叫訂閱主題和釋出訊息就可以.
使用者呼叫其api函式所打包的資料會儲存在mqtt內部快取管理裡面,然後內部自動把資料通過tcp傳送出去.
把打包好的MQTT協議資料提取出來併發送給伺服器的地方
關於下面的 mymqtt.timer_out_send = mqtt_timerout_send_default;
這個是模組傳送資料之後再次傳送資料需要等待,當前我設定的為50ms
11,快取管理是使用的我編寫的 BufferManage
12,如果傳送的MQTT訊息比較大,可在此處修改快取管理大小
13.如果自己的MQTT資料包超過16383位元組,則還需要修改底層
當前是使用兩位元組儲存資料個數
14.這裡有mqtt包的使用流程,瞭解一下就可以,後面有詳細的移植教程
15,現在看微信小程式端的程式
paho-mqtt.js 官方底層包 mqtt.js本人再次封裝的mqtt包,使用者後期通訊都是使用這個裡面的api函式
使用者可以根據自己的mqtt伺服器更改引數
16,連線mqtt只需要在一開始的時候呼叫下
MQTT.ConnectMqtt();//連結MQTT
然後內部就是自動連線.
17,點選頁面上的裝置,攜帶著裝置的MAC地址資訊跳轉到裝置控制頁面
18,控制頁面在onLoad函式裡面接收跳轉的資料,並在裡面設定MQTT回撥函式
19.在定時器裡訂閱主題
20.在MQTT接收回調函式中接收處理資料
21.點選按鈕釋出繼電器控制命令
結語
對於初學者,感受一下遠端通訊就可以.在後面的章節中將會詳細的學習到是怎麼做到的.