<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.控制頁面獲取這個設備名字,並把這個名字放到消息里面