005-STM32+ESP8266+AIR202/302基本控制篇--Android和ESP8266連接阿里雲物聯網平台,並通過雲平台實現遠程溫濕度采集和繼電器控制(預注冊方式)


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

實現的功能

Android和ESP8266連接阿里雲平台,並實現Android和ESP8266之間通信控制.

 

 

 

 

前要

為了使得這一節可以單獨使用,這節將重新開始注冊一個新的產品!

其余的細節問題請用戶參考前面的內容!

 

開通阿里雲物聯網平台

https://www.aliyun.com/

1.搜索阿里雲物聯網平台(如果沒有開通請自行開通)

 

 

 

 

創建產品(並在產品下面添加設備)

 

1.創建產品

 

 

 

2.設置下產品的名稱

 

 

 

 

 

 

3.添加設備,設備名字我寫的是ESP8266

 

 

 

 

 

 

 

4.點擊查看

 

 

 

 

 

 

 

 

 

 

注意地域!后面有說明!

 

5.打開單片機程序源碼,並修改上面的三個參數

 

 

 

 

 

 

 

 

6.關於地域,請參考

 

 

 

 

7.我的是上海,所以填寫的是  cn-shanghai

 

 

 

 

 

8.修改連接路由器的信息

 

 

 

 

 

 

 

9.下載並查看打印

打印連接成功,並在每個一段時間發布消息.

然后后台上面顯示上線

 

 

 

 

 

再添加一個設備,作為Android接入

1.添加設備,設備名字我寫的是 Android

 

 

 

 

 

2.點擊查看

 

 

 

 

 

 

3.打開本節Android源碼,並修改上面相應的參數

 

 

 

 

 

 

 

4.安裝到手機並打開,如果日志打印有 Connect Success

說明已經接入了阿里雲

 

 

 

配置規則引擎(如果前面配置了這個規則,無需重復配置)

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

 

 

 

 

 

2.選擇編寫 SQL

 

 

 

 

 

 

 

3.添加操作

 

 

 

 

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

 

 

 

5.啟動規則

 

 

 

 

 

 

 

 

 

 

 

 

點擊APP右上角菜單,選擇添加設備

1.點擊添加設備

 

 

 

 

2.輸入WiFi模塊程序中使用的注冊的設備的名字

 

 

 

3.然后點擊確定,頁面上將添加一個設備,點擊這個設備

 

 

 

4.控制頁面會顯示當前單片機采集的溫濕度數據,還有開關狀態

 

 

 

 

5.控制繼電器

   

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

源碼說明

我再解釋下一個事情:

阿里雲注冊的一個設備就作為了一個mqtt客戶端,你可以把這個設備作為單片機使用也可以作為APP使用.

一個設備的信息同一時間只能一個設備去用,如果同時使用,就會擠掉線!!!!

 

1.整體通信流程說明

APP和單片機設備都是作為了阿里雲注冊的設備接入.

其實就是阿里雲上面注冊的兩個設備通信.

這節的APP軟件使用的雲端注冊的設備名字為 Android 的設備接入雲平台

發布的主題是:  /{ProductKey}/{DeviceName}/user/update

即:/a1kalhdMH2Z/Android/user/update

 

訂閱的主題為:/{ProductKey}/{DeviceName}/user/get

即:/a1kalhdMH2Z/Android/user/get

 

這節的單片機使用的雲端注冊的設備名字為 ESP8266 的設備接入雲平台

發布的主題是:  /{ProductKey}/{DeviceName}/user/update

即:/a1kalhdMH2Z/ESP8266/user/update

 

訂閱的主題為:/{ProductKey}/{DeviceName}/user/get

即:/a1kalhdMH2Z/ESP8266/user/get

 

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

然后APP 添加設備的時候是添加的單片機設備注冊的名字

然后APP發布的消息為:(以控制繼電器吸合為例)

{"TargetDevice":"ESP8266","DeviceName":"Android","data":"switch","bit":"1","status":"1"}

 

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

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

這條信息發給雲平台以后,經過了轉發規則

 

注:(提取數據)  /a1kalhdMH2Z/+/user/update  里面的 + 代表任意字符串

意思是提取符合主題 /a1kalhdMH2Z/任意/user/update  里面的所有消息

上面的就提取了  

{"TargetDevice":"ESP8266","DeviceName":"Android","data":"switch","bit":"1","status":"1"}

 

 

 

 

注:(對數據進行操作)   發布到另一個 Topic    /a1kalhdMH2Z/${TargetDevice}/user/get 

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

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

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

/a1kalhdMH2Z/ESP8266/user/get 

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

 

 

 

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

然后用自己的發布主題發布消息  /a1kalhdMH2Z/ESP8266/user/update

消息為:

{"TargetDevice":"Android","DeviceName":"ESP8266","data":"switch","bit":"1","status":"1"}

 

TargetDevice 字段的值改為了 Android

DeviceName 字段的值為單片機自己的設備名字  ESP8266

 

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

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

 

 

2.APP程序執行流程說明

 

1.作為阿里雲的一個設備接入雲平台

 

 

 

 

 

2.添加一個設備,並把添加的設備的名字存儲到數據庫

 

 

 

 

3.點擊跳轉到控制頁面時把設備名字傳遞過去

 

 

 

4.控制頁面獲取設備名稱並組合發送的消息

 

 

 

5.組合自己的自定義主題

 

 

 

6.發送消息

 

 

 

7.接收處理消息

 

 

 

 

 

 

 

 

3.單片機程序執行流程

1.作為阿里雲的一個設備接入雲平台

 

 

 

2.接收到數據以后,提取字段DeviceName 的值 Android

把TargetDevice字段的值改為 Android

DeviceName 字段的值改為 ESP8266

用自己的主題發送消息

 

 

 

結語

當前的程序雖然實現了設備之間的通信,

1.但是呢設備是咱先在雲平台上面注冊,然后把信息寫到單片機和APP里面.

2.需要APP先發信息給設備,設備才可以發信息給APP,因為設備需要在信息中

提取 DeviceName 字段的值 ,才知道要發給誰.

 

對於 1  而言咱后面有動態注冊.

APP和單片機通過程序自己去注冊一個設備

然后用自己注冊的設備連接上雲平台.

當然,為了讓APP獲取單片機的設備名字

單片機注冊的時候可以使用WiFi模塊的MAC地址或者GPRS模塊的 IMEI

 

對於2而言我也沒什么好的解決方式

 


免責聲明!

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



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