ESP8266 SDK開發: 物聯網篇-Android和ESP8266連接阿里雲物聯網平台,並通過雲平台實現遠程溫濕度采集和繼電器控制


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/Learn8266ForSDK" 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.打開ESP8266源碼,並修改上面的三個參數

 

 

 

 

 

 

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.控制頁面會顯示當前ESP8266采集的溫濕度數據,還有開關狀態

 

 

 

 

5.控制繼電器

    

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

源碼說明

1.基礎的知識請用戶看前面的4.10 - 4.13章節學習

2.根據用戶填寫的阿里雲的設備信息,組合計算MQTT各個參數

 

 

注意:MQTT的ClientID 計算方式是拼接的ESP8266的MAC地址

 

 

 

3.APP添加設備以后發送給WiFi模塊的數據格式如下:

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

{"data":"switch","bit":"1","TargetDevice":"ESP8266","DeviceName":"Android","status":"-1"} //詢問開關狀態

{"data":"TH","bit":"1","TargetDevice":"ESP8266","DeviceName":"Android","status":"-1"} //詢問溫濕度

{"data":"switch","bit":"1","TargetDevice":"ESP8266","DeviceName":"Android","status":"1"} //控制繼電器吸合

{"data":"switch","bit":"1","TargetDevice":"ESP8266","DeviceName":"Android","status":"0"} //控制繼電器斷開

 

所有的數據里面都有 "TargetDevice":"ESP8266","DeviceName":"Android"

字段 TargetDevice 后面跟的是所添加設備的名字

 

 

 

 

 

 

字段 DeviceName 后面跟的是Android自身的設備的名字

 

 

 

4.關於規則引擎,雲產品流轉

1.編寫SQL 里面的SELECT為 * 代表所有消息

里面的FROM設置的是  /a1kalhdMH2Z/+/user/update  里面的 + 代表任意字符串

意思是提取發布主題 /a1kalhdMH2Z/+/user/update  里面的所有消息

 

APP發布的主題為 /a1kalhdMH2Z/Android/user/update

符合: /a1kalhdMH2Z/+/user/update  (+代表任意的字符串都可以,所以主題中的Android也不例外)

所以會提取這個主題里面的所有消息

 

 

2.編輯操作里面寫的是 發布到另一個 Topic

下面就是轉發給 /a1kalhdMH2Z/${TargetDevice}/user/get 這個主題

里面有一個 ${TargetDevice}

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

APP發送的消息是  {"data":"switch","bit":"1","TargetDevice":"ESP8266","DeviceName":"Android","status":"-1"}

所以提取消息里面的字段為 TargetDevice 的字段值 ESP8266

然后轉發的主題就變為了

/a1kalhdMH2Z/ESP8266/user/get  

 

 

 

 

 

 

5.WiFi模塊 本身就訂閱了這個主題.所以APP發送的消息發給了WiFi模塊

 

 

 

 

 

6.解析數據並上報數據

注:APP發送的消息是  {"data":"switch","bit":"1","TargetDevice":"ESP8266","DeviceName":"Android","status":"-1"}

 

ESP8266發布的主題為  /a1kalhdMH2Z/ESP8266/user/update

ESP8266要想發送數據給APP,那么消息里面 TargetDevice 字段后面跟的就應該是 APP使用的設備的名字  Android

然后APP為了便於區分是哪個設備發來的數據,那么DeviceName字段就需要跟上自身設備的名字

8266上報的數據為

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

 

 

7.經過規則引擎之后

經過SQL提取了/a1kalhdMH2Z/ESP8266/user/update 里面的所有消息

然后提取消息里面TargetDevice字段值 Android

最后消息就轉發給了 /a1kalhdMH2Z/Android/user/get  

 

8.APP本身就訂閱了這個主題

 

 

 

 

 

 

 

 

 

9.APP循環發送查詢繼電器和溫濕度指令

 

 

10.APP解析數據

 

 

 

關於MQTT

1.組合計算MQTT參數

 

 

 

 

計算密碼

 

 

 

2.APP添加設備,把設備名稱存入數據庫,和ListView

 

 

 

 

3.點擊設備,跳轉頁面的時候攜帶着所點擊設備的名稱

 

 

4.控制頁面獲取這個設備名字,並把這個名字放到消息里面

 

 


免責聲明!

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



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