<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/MN316/my.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
這節測試一下Android掃碼綁定MN316(NB-IOT),並通過MQTT和模組實現遠程通信控制
這一節作為板子的整體功能測試,用戶下載這一節的程序用來測試基本控制篇實現的基本功能
還有就是測試一下板子是否工作正常.
GPRS模塊和底板安裝說明
測試准備工作
1.下載這節程序到單片機
2.單片機工程目錄
3.Hex文件位置
4.使用usb口打印串口日志
正常情況下會打印
5.安裝手機APP
6.手機APP安裝包位置
7.點擊APP右上方的菜單欄,選擇 掃一掃
8.掃描模組上面的二維碼
9.掃描成功以后將會在主頁面添加一個設備
注:顯示的內容為模組的IMEI號
10.點擊顯示的設備,進入設備控制頁面
設備會顯示當前溫濕度數據,也可以點擊按鈕控制開發板上的繼電器
整體說明
整個程序就是利用MQTT服務器實現APP和設備之間通信.
APP通過掃碼獲取設備的IMEI號
設備連接上MQTT服務器以后,設備訂閱的主題是: user/設備的IMEI號 設備發布的主題是: device/設備的IMEI號
APP獲取設備的MAC地址后,APP發布的主題是: user/設備的IMEI號 APP訂閱的主題是: device/設備的IMEI號
APP和設備的發布和訂閱的主題相對應,APP和設備的消息發給MQTT服務器以后,MQTT服務器就為各自的消息互相轉發.
APP掃碼程序
1.APP掃碼程序使用的是Google 谷歌的zxing
2.點擊掃一掃進入掃描頁面
2.掃碼成功以后攜帶着數據跳轉到主頁
3.activity 接收數據並把信息存儲listview和數據庫
4.數據庫操作是使用的郭霖寫的litepel
單片機程序細節說明
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 框架
提示:這個里面也獲取了模組的IMEI, 使用IMEI作為了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了,用戶只需要在任意地方調用訂閱主題(mqtt_subscribe)和發布消息(mqtt_publish)就可以.
用戶調用其api函數所打包的數據會存儲在mqtt內部緩存管理里面,然后內部自動把數據通過tcp發送出去.
把打包好的MQTT協議數據提取出來並發送給服務器的地方
11,緩存管理是使用的我編寫的 BufferManage
12,如果發送的MQTT消息比較大,可在此處修改緩存管理大小
13.如果自己的MQTT數據包超過16383字節,則還需要修改底層
當前是使用兩字節保存數據個數
14.這里有mqtt包的使用流程,了解一下就可以,后面有詳細的移植教程
15,現在看APP端的程序
app使用的jar包為: org.eclipse.paho.client.mqttv3-1.2.0
MyMqttCLient是封裝的mqtt文件,用戶后期通信都是使用這個里面的api函數
用戶可以根據自己的mqtt服務器更改參數
16,連接mqtt只需要在一開始的時候調用下
MyMqttClient.sharedCenter().setConnect();//連接MQTT
然后內部就是自動連接.
17,點擊APP頁面上的設備,攜帶着設備的MAC地址信息跳轉到設備控制頁面
18,控制頁面接收跳轉的數據
19.設置一些回調函數,啟動定時器訂閱主題
20.在handler中處理MQTT數據
21.點擊按鈕發布繼電器控制命令
結語
對於初學者,感受一下遠程通信就可以.在后面的章節中將會詳細的學習到是怎么做到的.