1. 程式人生 > 其它 >2-STM32+ESP8266+AIR202基本控制篇-整體執行測試-APP使用SmartConfig配網繫結ESP8266,並通過MQTT和ESP8266實現遠端通訊控制

2-STM32+ESP8266+AIR202基本控制篇-整體執行測試-APP使用SmartConfig配網繫結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使用SmartConfig配網繫結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,點選右上角選單,選擇新增裝置 "Esptouch"

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

3.長按開發板上面的微控制器按鍵引腳大約3S,直至指示燈快閃

2.x版本按鍵和指示燈

3.x版本按鍵和指示燈

4.x版本按鍵和指示燈

4.點選 APP 繫結裝置按鈕

5.繫結成功以後自動跳轉到主頁面,並添加了一個裝置

6.點選裝置進入裝置控制頁面

整體說明

整個程式就是利用MQTT伺服器實現APP和裝置之間通訊.

APP通過和裝置配網繫結,讓裝置連線上路由器.

通訊過程中,APP也獲取到了裝置的MAC地址資訊.

裝置連線上MQTT伺服器以後,裝置訂閱的主題是: user/裝置的MAC地址 裝置釋出的主題是: device/裝置的MAC地址

APP獲取裝置的MAC地址後,APP釋出的主題是:user/裝置的MAC地址 APP訂閱的主題是:device/裝置的MAC地址

APP和裝置的釋出和訂閱的主題相對應,APP和裝置的訊息發給MQTT伺服器以後,MQTT伺服器就為各自的訊息互相轉發.

程式繫結過程

1.整體

APP通過SmartConfig給裝置配網,裝置通過無線嗅探,獲取到所連線的路由器名稱和密碼

裝置連線上路由器以後把自己的MAC地址等資訊傳給APP.

2,啟動繫結

3,在定時器裡面輪訓 config8266_loop(); 和繫結時快閃led

5.現在看下APP的繫結程式,點選右上角選單跳轉到繫結頁面

7.SmartConfig是使用的這個包

提示:後面有配網程式的移植使用教程,使用者這節只需要先了解程式整個執行過程.

官方APPhttps://github.com/EspressifApp

8.點選按鈕呼叫SmartConfig繫結程式

9.使用的AsyncTask監聽繫結狀態.

10.activity 接收資料並把資訊儲存listview和資料庫

11,資料庫操作是使用的郭霖寫的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遠端通訊控制,在後面的章節中將學習到整個流程是如何實現的.