2-STM32+ESP8266+AIR202基本控制篇-整體運行測試-APP使用APUConfig配網綁定ESP8266,並通過MQTT和ESP8266實現遠程通信控制


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

 

說明

這節測試一下android使用APUConfig配網綁定ESP8266,並通過MQTT和ESP8266實現遠程通信控制

 

測試准備工作

1.不同版本的PCB需要做不同的操作

2.x版本需要做如下操作:

使用杜邦線把單片機的串口2和WiFi模塊的串口相連接

(STM32)PA3 -- TX(WiFi)

(STM32)PA2 -- RX(WiFi)

撥碼開關撥動位置如下

 

 

3.x版本需要做如下操作:

短接跳線帽,讓單片機的串口2和WiFi模塊的串口相連接

 

 

 

4.x版本需要做如下操作:

只安裝上WiFi模組,不要安裝右上角的模組(模組都是使用單片機串口2連接通信,不能同時安裝,否則會造成通信混亂)

 

 

 

2.打開這節的單片機程序

 

 

根據自己的PCB版本修改LED,按鍵,和復位模組的引腳

 

 

 

 

 

 

 

3.安裝APP軟件

 

 

 

 

 

測試

1.打開APP,點擊右上角菜單,選擇添加設備 "APUConfig"

 

 

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

 

 

3.長按開發板上面的單片機按鍵引腳大約3S,直至指示燈快閃

2.x版本按鍵和指示燈

 

 

3.x版本按鍵和指示燈

 

 

 

4.x版本按鍵和指示燈

 

 

4.點擊 APP 綁定設備按鈕

 

 

 

注:android 10 版本會有如下提示

不要點擊取消,一直等待....

 

點擊確定,然后還是一直等待...

 

 

當出現以下頁面的時候點擊下 wifi_8266_bind 

 

 

 

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

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

 

 

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

 

 

 

整體說明

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

APP通過和設備配網綁定,讓設備連接上路由器.

通信過程中,APP也獲取到了設備的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,在定時器里面輪訓 config8266_loop(); 和綁定時快閃led

 

 

4.注意

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

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

 

 

5.現在看下APP的綁定程序,點擊右上角菜單跳轉到綁定頁面

 

 

 

7.設置連接Wifi模組的熱點,發送和接收UDP數據

 

 

 

 

注意:在啟動連接wifi熱點的同時就不停的每隔一段時間發送UDP數據(路由器名稱和密碼)

只要是連接上wifi的熱點,信息就會發送給wifi模組.

 

 

 

 

 

 提示:控制android連接WiFi熱點使用的是

 

 

 

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

 

 

 

 

8.其它程序是檢測wifi連接狀態,和獲取鏈接的wifi名稱

 

 

 

 

 

 

 

9.activity 接收數據並把信息存儲listview和數據庫

 

 

 

10,數據庫操作是使用的郭霖寫的litepel

 

 

 

 

 

程序MQTT通信過程

1.關於MQTT解析包

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

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

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

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

 

 

 

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

 

 

 

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

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

 

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

5.發送連接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

 

 

 

訂閱主題

 

 

 

 

 

 

 

發布消息

 

 

 

 

 

 

 

 

 

11.提取緩存數據和發送數據的地方

 

 

mqtt.c里面就需要這一個修改,替換自己的實際的tcp發送函數,在移植的時候十分的便捷.

 

 

 

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

wifi模塊透傳模式下每條數據的時間間隔需要保持在20ms以上,所以我直接設置的20

 

 

 

 

12,可在此處修改緩存管理大小

 

 

 

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

 

 

 

14,現在看APP端的程序

app使用的jar包為: org.eclipse.paho.client.mqttv3-1.2.0

MyMqttCLient是封裝的mqtt文件,用戶后期通信都是使用這個里面的api函數

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

 

 

 

 

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

MyMqttClient.sharedCenter().setConnect();//連接MQTT

然后內部就是自動連接.

 

 

 

 

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

 

 

 

17,控制頁面接收跳轉的數據

 

 

 

18.設置一些回調函數,啟動定時器訂閱主題

 

 

 

 

  

 

19.在handler中處理MQTT數據

 

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

 

 

 

 

結語

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

 


免責聲明!

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



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