2-CH579M+ESP8266(WiFi)基本控制篇-整體運行測試-微信小程序使用APUConfig配網綁定ESP8266,並通過MQTT和單片機CH579M實現遠程通信控制


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLCH579M/ESP8266/my.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

 

說明

這節測試一下CH579M通過串口AT指令控制ESP8266(WiFi)連接MQTT服務器;

微信小程序通過APUConfig配網綁定ESP8266,並通過MQTT和單片機實現遠程通信控制;

 

測試本節例程

1.硬件連接(單片機使用串口0和模組通信,使用PB5復位模組; 串口1作為日志打印)

 

3.根據硬件使用說明下載這節的單片機程序到開發板

 

 

 

4.打開串口調試助手打印串口日志

 

 

正常情況下單片機會控制模組嘗試連接TCP服務器

 

3.打開微信小程序工程(使用開發工具打開以下工程)

注:如果沒有學習過小程序,請先學習微信小程序開源教程

 

 

 

4.點擊 預覽,使用微信掃碼以后安裝到手機

注:默認連接的我的服務器,mnif.cn,用戶可以在詳情里面選擇不校驗域名(不推薦,可能通信有問題)

 

 

 

也可以在微信小程序平台上設置域名白名單(推薦)

 

 

 

 

 

 

 

注:預覽模式有時間限制,如想長期使用,請發布小程序

 

 

 

測試

1.添加設備

 

 

2.添加WiFi設備

 

 

3.手機連接自家的路由器,輸入自家路由器密碼

 

4.長按開發板上面的RST按鍵引腳大約3S,直至指示燈快閃(已經被底板遮擋了)

 

 

4.點擊 APP 綁定設備按鈕

 

 

 

 

綁定成功以后自動跳轉到主頁面,並添加了一個設備

可以點擊下面的地方連接自己原先連接路由器!

 

 

5.點擊設備進入設備控制頁面

注:開發板上並沒有溫濕度,是自己寫的一個隨機的數發上來的

 

注:APP的控制是控制的這個小燈(已經被底板遮擋了)

 

 

整體說明

整個程序就是利用MQTT服務器實現微信小程序和設備之間通信.

微信小程序通過和設備配網綁定,讓設備連接上路由器.

通信過程中,APP也獲取到了設備的MAC地址信息.

 

設備連接上MQTT服務器以后,設備訂閱的主題是: user/設備的MAC地址   設備發布的主題是: device/設備的MAC地址

微信小程序獲取設備的MAC地址后,微信小程序發布的主題是: user/設備的MAC地址   微信小程序訂閱的主題是: device/設備的MAC地址

微信小程序和設備的發布和訂閱的主題相對應,APP和設備的消息發給MQTT服務器以后,MQTT服務器就為各自的消息互相轉發.

 

 

程序綁定過程

1.整體

微信小程序連接WiFi模塊發出的無線信號(ssid:wifi_8266_bind; Password:11223344),然后使用UDP和模組進行通信

微信小程序連接上wifi模塊的無線以后,不停的使用udp把路由器信息發給模組

模組接收到路由器信息以后把自身的MAC地址發給微信小程序

 

程序綁定過程

1.整體

APP連接WiFi模塊發出的無線信號(ssid:wifi_8266_bind; Password:11223344),然后使用UDP和模組進行通信

APP連接上wifi模塊的無線以后,不停的使用udp把路由器信息發給模組

模組接收到路由器信息以后把自身的MAC地址發給APP

 

2,啟動綁定

 

 

 

 

 

 

 

 

 

3,綁定時快閃led

 

 

4.注意

按常理來講,應該是模塊獲取到路由器信息,然后連接上之后再把自己的MAC傳遞給APP,然后實現綁定.

但是以上程序並沒有這樣做,因為測試發現,如果控制了模組連接路由器,會導致APP斷開和wifi的無線連接.

 

5.現在看下微信小程序的綁定程序,點擊添加設備菜單跳轉到添加設備頁面

 

 

6.點擊添加WiFi設備按鈕跳轉到綁定頁面

 

 

 

 

 

7.點擊綁定按鈕連接WiFi模塊的熱點,初始化UDP

注:用戶不用過於關心內部細致的流程,以后移植使用的時候知道大體就可以

 

 

 

 

8.連接上熱點以后允許UDP每隔1S發送路由器信息給WiFi模組

 

 

 

 

 

 

  

9,接收到模組返回的mac地址數據,攜帶着數據跳轉到index

 

 

 

 

10.index把接收的數據存儲起來

 

 

11.在onShow顯示數據

 

程序MQTT通信過程

1.關於MQTT解析包

mqtt_msg 文件是最底層的mqtt協議封裝文件, 用戶不需要研究

mqtt 文件是在mqtt_msg之上封裝的一套文件,該文件內部處理了mqtt各種通信流程,用戶也是調用這里面的api函數.

具體使用可以接着往下看.

用戶始終記住:和mqtt服務器通信就是和tcp服務器通信.不過他們之間的通信數據需要按照mqtt協議規定.

 

 

 

2.配置所連接的MQTT服務器的參數

 

 

 

 

3.初始化MQTT變量,注冊相應的回調函數

我編寫的包是以注冊回調函數的形式使用.

 

 

 

 

4.先使用TCP連接上TCP服務器(MQTT服務器就是TCP服務器嘛)

控制連接服務器使用的是 ConfigModuleNoBlock 框架

注意哈連接上TCP以后設置為了透傳, 以后單片機串口發送的數據就會直接通過模組發到服務器

服務器接收的數據直接就通過串口發給了單片機

 

 

 

 

 

 

 

 

 

5.連接上TCP以后,發送連接MQTT協議

 

 

 

 

 

6.把服務器返回的數據交給mqtt_function_connect_ack 函數處理

如果返回的數據是連接成功,此函數便會調用上面注冊的連接成功回調函數

 

 

 

6.在連接成功回調函數中訂閱主題,發布消息

 

 

 

 

7.連接成功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發送出去.

緩存管理是使用的我編寫的 BufferManage

 

 

 

 

把打包好的MQTT協議數據提取出來並發送給服務器的地方

 

 

 

 

 

關於下面的 mymqtt.timer_out_send = 0; 這個是預防有的模塊發送數據之后需要等待,按照提示修改就可以

當前我設置的為20ms

 

 

 

 

12,如果發送的MQTT消息比較大,可在此處修改緩存管理大小

 

 

 

13.如果自己的MQTT數據包超過16383字節,則還需要修改底層

當前是使用兩字節保存數據個數

 

 

 

 

 

14.這里有mqtt包的使用流程,了解一下就可以,后面有詳細的移植教程

 

 

14,現在看微信小程序端的程序

paho-mqtt.js 官方底層包  mqtt.js本人再次封裝的mqtt包,用戶后期通信都是使用這個里面的api函數

用戶可以根據自己的mqtt服務器更改參數

 

 

 

15,連接mqtt只需要在一開始的時候調用下 

MQTT.ConnectMqtt();//鏈接MQTT

然后內部就是自動連接.

 

 

 

16,點擊頁面上的設備,攜帶着設備的MAC地址信息跳轉到設備控制頁面

 

 

 

17,控制頁面在onLoad函數里面接收跳轉的數據,並在里面設置MQTT回調函數

 

 

 

18.在定時器里訂閱主題

 

 

 

 

 

 

 

 

19.在MQTT接收回調函數中接收處理數據

 

 

 

 

 

20.點擊按鈕發布繼電器控制命令

 

 

 

結語

這節測試了基本的MQTT遠程通信控制,在后面的章節中將學習到整個流程是如何實現的.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM