401-STM32+Air724UG基本控制篇(阿里雲物聯網平台)-Android掃碼綁定Air724UG並通過阿里雲物聯網平台實現遠程通信控制


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

 

 

說明

這一節實現Android掃碼綁定模組並通過阿里雲物聯網平台實現遠程通信控制.

概要:

APP和單片機設備分別作為設備以動態注冊方式連接阿里雲物聯網平台,然后通過規則引擎實現APP和設備之間通信.

此節教程是前面所有知識點的整合,希望用戶按部就班的學習了前面的內容,然后再學習此節.

APP頁面展示

 

 

 

雲平台顯示溫濕度數據

 

 

 

 

測試准備

1.打開這節的APP工程和單片機工程

 

 

 

2. 登錄自己的雲平台點擊產品的查看

 

 

 

 

3.打開動態注冊按鈕

 

 

 

 

4.查看自己產品的ProductSecret; ProductKey; 

 

 

 

 

 

5.修改單片機程序里面的參數 ProductSecret; ProductKey;

 

 

 

6.修改Android程序里面的參數 ProductSecret; ProductKey;

 

 

 

配置規則引擎

1.規則引擎 ,雲產品流轉,創建規則

 

 

 

 

 

2.選擇編寫 SQL

 

 

 

 

3.添加操作

 

 

 

4.注意①自己填寫   ${TargetDevice}

 

 

 

5.啟動規則

 

 

 

 

 

 

 

 

確認單片機工作正常

1.修改完成以后編譯下載單片機程序,安裝好手機卡和天線

 

 

 

2.如果日志看到訂閱主題成功,說明已經自動注冊並接入了平台

 

 

 

 

3.在平台上可以看到在相應的產品下面注冊了設備

注:設備名字使用的是模組的IMEI號

 

 

 

 

確認Android工作正常

1.重新安裝APP,運行APP會彈出注冊頁面.

注:接入的設備的名字做成了需要用戶去填寫

 

 

 

2.填寫 111111(隨意哈) 后點擊 注冊設備

 

 

 

3.注冊成功將會跳轉到主頁(允許權限)

 

 

 

4.在平台上可以看到在相應的產品下面注冊了設備

 

 

 

 

開始整體測試

1.點擊APP右上方的菜單欄,選擇 掃一掃

 

 

 

2.掃描模組上面的二維碼

 

 

 

 

 

3.掃描成功以后將會在主頁面添加一個設備

 

 

 

 

4.點擊顯示的設備,進入設備控制頁面

 

 

5.點擊右上角的開關控制繼電器

 

 

 

6.用手拖動,可以看到板子上的燈隨着拖動顏色的變化而變化

用手拖動,可以看到板子上的燈隨着拖動顏色的變化而變化

 

 

 

 

 

 

整體通信流程說明

1,APP和設備通信協議(APP和設備通過自定義主題通信)

/*APP發送數據控制繼電器*/
{"data":"switch","bit":"1","status":"-1"} //查詢繼電器狀態
{"data":"switch","bit":"1","status":"1"}  //控制繼電器吸合
{"data":"switch","bit":"1","status":"0"}  //控制繼電器斷開
//設備回復(根據繼電器狀態返回)
{"data":"switch","bit":"1","status":"1"}  //控制繼電器吸合
{"data":"switch","bit":"1","status":"0"}  //控制繼電器斷開


/*APP發送數據控制RGB燈*/
{"data":"rgb","red":20,"green":30,"blue":100} //控制RGB顏色


//APP查詢所有數據(定時查詢,直至查詢到回復)
{"data":"all"}
//設備返回
{"data":"all","switch":{"bit":"1","status":"1"},"sensor":{"temperature":25,"humidity":75,"light":20000},"rgb":{"red":20,"green":30,"blue":100}}

 

2.通信流程詳細說明

APP和單片機各自作為阿里雲的設備接入阿里雲服務器.

APP接入的名字為用戶注冊時填寫的名字;

單片機接入的名字為模組的IMEI號;

APP 添加設備的時候添加的模組的IMEI號.

 

假設APP注冊的設備的名字為: 111111

假設模組的IMEI為: 868591050594364

 

APP發布的主題: /a1m7er1nJbQ/111111/user/update

這個主題發給雲平台以后,經過了轉發規則里面的SQL語句

 

 

 

 

注: /a1m7er1nJbQ/+/user/update  (里面的 + 代表任意)

APP發布的主題為 /a1m7er1nJbQ/111111/user/update  所以,符合條件.便會提取這個主題里面的消息.

 

APP發布的消息為:(以控制繼電器為例子)

{"TargetDevice":"868591050594364","DeviceName":"111111","data":"switch","bit":"1","status":"1"}

注:

TargetDevice 字段的值是APP添加的設備的名字

DeviceName 字段的值是APP本身設備的名字.

 

 然后下面的配置是對提取的消息進行操作

 

 

 

 

 

發布到另一個 Topic    /a1kalhdMH2Z/${TargetDevice}/user/get 

${TargetDevice}意思是提取消息里面字段為 TargetDevice 的字段值,然后替換上面的  ${TargetDevice}

咱的消息是 {"TargetDevice":"868591050594364","DeviceName":"111111","data":"switch","bit":"1","status":"1"}

所以最終消息轉發給下面的主題(也就是單片機訂閱的主題)

/a1kalhdMH2Z/868591050594364/user/get 

然后單片機就收到了消息 {"TargetDevice":"868591050594364","DeviceName":"111111","data":"switch","bit":"1","status":"1"}

 

單片機接收到消息以后,提取 "DeviceName":"111111"

然后用自己的發布主題發布消息  

發布的主題: /a1kalhdMH2Z/868591050594364/user/update

發布的消息: {"TargetDevice":"111111","DeviceName":"868591050594364","data":"switch","bit":"1","status":"1"}

 

TargetDevice 字段的值改為了 111111

DeviceName 字段的值為單片機設備的名字  868591050594364

 

消息發給了服務器,然后經過轉發規則,同理 ,消息便會轉發給了APP

最后APP 提取消息里面的數據,就完成了通信

 

單片機程序說明

1.注冊,連接服務器

 

 

 

 

2.連接成功之后訂閱主題

 

 

3.在MQTT回調函數里面接收處理和返回消息

 

 

 

 

 

 

 4.如果繼電器狀態改變,上報繼電器狀態

 

5.定時上報溫濕度數據(通過物模型主題上報到網頁端)

 

單片機程序細節說明

1.為使設備可以同時和與其綁定的APP實現通信控制,代碼中使用了 BufferRankOrder 記錄APP設備名稱

設備發送數據的時候輪訓把數據發給和自己綁定的APP.

 

 

 

關於為啥要記錄APP設備的信息?

因為如果多個用戶同時在控制,設備必須把數據返回給每一個控制的APP.

如果誰控制就返回給誰數據,就會出現誰控制誰的頁面有變化,其他人的控制頁面沒有變化的尷尬局面.

這對於產品而言就讓用戶難以接受.所以需要把數據返回給所有的APP.

 

但是也不能把所有的APP設備都記錄下來,因為不合理.

需要把這些APP做個優先等級排序.經常控制的要靠前,不經常的靠后,基本上沒影了的放到最后,直至丟棄

 

關於 BufferRankOrder  https://www.cnblogs.com/yangfengwu/p/14164215.html

假設有5個APP和單片機通信,APP設備的名字分別為: "111111","222222","333333","444444","555555"

假設這5個設備依次和單片機通信,1-5 (誰最后和單片機通信就把誰放到第一個位置.)

那么這些名字在BufferRankOrder內存里面的排序 "555555","444444","333333","222222","111111"

哪個APP不經常和設備通信,那么這個APP最終將會被擠掉.最終只留下經常和設備通信的.

 

 

 

Android程序詳細說明

1.基本目錄說明

 

 

 

 

1.控制頁面

2.注冊頁面

3.sha計算mqtt密碼

4.使用Litepal存儲綁定的設備信息

5.正常運行時使用的MQTT程序

6.注冊設備時使用的MQTT程序

7.存儲注冊的信息

 

2.如果APP沒有注冊,跳轉到注冊設備頁面

 

 

 

3.點擊按鈕注冊設備,並把注冊信息存儲以后跳轉到主頁面

 

 

 

 

4.獲取注冊的數據,組合MQTT參數,並執行連接

 

 

 

5.點擊掃描二維碼,進入掃描頁面

 

 

 

7.掃碼成功,攜帶着數據跳轉到主頁

 

 

 

 

8.MainActivity在onNewIntent中接收返回的數據

 

 

 

 9.把數據存儲到數據庫,並刷新頁面

 

 

 

 

10.點擊設備,攜帶着提取點擊的設備名字跳轉到控制頁面

 

 

 

10.獲取APP設備的productKey和deviceName,並拼接其自定義的主題

 

 

 

11.獲取傳遞進來的所點擊的設備的名字,組合開關控制數據

 

 

 

13.APP訂閱自身的自定義主題

 

 

 

 

 

 

14.定時請求設備數據

 

 

 

15.每隔300ms檢測RGB是否需要調整

 

 

 

16.點擊按鈕發送控制繼電器指令

 

17.接收數據

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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