MTQQ 物聯網

這個是學校的SRP項目。去年12月作了大概3周。
直接摘我的總結報告以下:
在本次「學生研究計劃」項目,研究課題是「基於JAVA的智能家居公衆號」。根據課題要求之一:以微信做爲媒介,實現智能設備的遠程控制。爲肯定系統整體架構,我先是尋找到了微信硬件平臺,並閱讀其開發文檔中介紹的三種方案,通過初步瞭解和後來的實際嘗試,最終肯定應該使用設備商雲鏈接硬件雲平臺的方案。在設備端方面,我尋找到一種性價比高的wifi開發模塊ESP8266,並瞭解到了樂鑫官網和安信可官網,找到了NONOS-SDK,並在微信硬件雲平臺找到相應airkiss靜態庫,接觸到airkiss是微信關於物理網一鍵配置smartconfig技術的一種實現。剛開始先嚐試微信硬件平臺直連雲方案,成功在ESP8266上運行與微信硬件雲直接通訊的代碼系統。
接着尋找設備商雲端的實現方案,發現物聯網通訊協議當前比較流行的有MQTT協議、COAP協議、uIP協議、google Weave協議等,通過一番摸索比較,最終選用了輕量級的MQTT協議,適用於低帶寬、低功耗等設備條件環境,實現了異步通訊消息隊列,支持多層服務質量Qos,還有基於topic主題的消息過濾認證機制等特點。又摸索瞭解到很多開源MQTT代理服務器的實現,如Mosquito、rabbitmq mqtt、EMQ等,出於開源性、成熟性、可擴展性等方面的考慮,選用EMQ做爲MQTT代理,並在本地嘗試運行測試成功。
因爲採用了MQTT做爲物聯網通訊協議,而現有微信硬件平臺與設備商雲端的通訊依然是基於HTTP的方式,這就須要咱們在設備商雲端實現一個web應用服務,支持接收微信硬件平臺消息並轉化爲MQTT消息再發布到MQTT代理服務器上,並支持將訂閱到的MQTT消息轉化爲HTTP消息發送回微信硬件雲平臺。因而學習了比較流行的SpingMVC開發框架和tomcat容器,並使用智能的IntelliJ IDEA開發環境進行代碼開發部署和調試。
再學習微信公衆號開發的接入方法,找到了github上的基於SpringMVC的Java-mp-demo項目,和eclipse的paho系列開源java項目中的MQTT客戶端實現的項目,該項目未實現硬件平臺相關的處理接口,因而在該項目基礎上增長實現了微信到MQTT代理的中轉服務。期間開發調試遇到各類問題,如配置servlet、bean、convertor等相關的坑。剛開始使用的是遠程部署到阿里雲服務器,在線調試的方式,發現log打印只能在遠程服務器上查看太麻煩,因而找到ngrok技術,一種將對域名訪問請求代理轉發到本身本地電腦端口上再交由本地web服務處理的內網穿透映射的服務。這樣在本地就能方便直接調試和查看log信息。
MQTT代理用的EMQ,其開發文檔中有關與ACL訪問控制的介紹,根據其原理,我設計了一套MQTT主題ACL訪問控制機制,遠期擴展還可開啓EMQ的auth-mysql插件,實現更安全的用戶系統。
在設備端移植了微信硬件雲平臺的直連雲方案的DEMO代碼,並移植了MQTT底層實現庫。html

架構圖

 
 

如圖所示,本項目主要分爲微信客戶端、微信硬件雲、設備商雲、設備端四大部分。爲實現以微信爲媒介遠程控制智能設備,本項目採用微信硬件平臺的「設備商雲鏈接微信硬件雲接入流程」方案,在微信硬件雲與設備端二者通訊間加入一層設備商雲,實現數據的中轉。其中微信綁定設備的操做使用微信硬件平臺的Airkiss協議,實現設備端在無需自啓AP熱點的硬件條件下獲取微信客戶端傳遞的WIFI設置信息從而聯網綁定。而設備商雲與設備商的通訊採用MQTT物聯網協議方案,設備商雲上使用MQTT代理服務器EMQ,並實現基於SpringMVC架構的IoT雲服務器端的中轉和處理服務,負責將從微信硬件雲接收到的HTTP消息轉化成MQTT消息併發布到EMQ上,並負責訂閱相關主題,接收來自設備端發佈上EMQ的異步消息並經過微信硬件雲HTTP API接口上傳給微信硬件雲,由微信硬件雲負責與微信客戶端的通訊。本方案使用的MQTT代理,亦可實現微信客戶端上基於微信JDK的H5頁面實現的自定義面板,直接與EMQ進行通訊。java

設備商雲服務端設計

最主要是MQTT EMQ和微信公衆號服務兩部分。以下:mysql


 
 

MQTT EMQ配置:

MQTT代理服務器EMQ的配置
(1)在EMQ軟件目錄下的etc/plugins/emq_auth_username.conf文件中,配置以下:git

auth.user.1.username = device
auth.user.1.password = password
auth.user.2.username = server
auth.user.2.password = password

(2)在dashboard控制檯網頁上,開啓auth-username認證插件。github

(3)在EMQ軟件目錄下的etc/acl.conf中,設計以下ACL訪問控制配置:web

{allow, {user, "server"}, publish, ["server/bind/+","server/unbind/+","server/get/+","server/set/+"]}. {allow, {user, "device"}, subscribe, ["server/bind/%c","server/unbind/%c","server/get/%c","server/set/%c"]}. {allow, {user, "device"}, publish, ["device/%c/ack/bind","device/%c/ack/unbind","device/%c/ack/get","device/%c/ack/set","device/%c/notify"]}. {allow, {user, "server"}, subscribe, ["device/+/#"]}. {deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. {deny, all}. 

設備商雲端微信公衆號web服務

具體圖spring


 
 

本設備商雲端微信公衆號web服務項目底層使用springMVC框架+tomcat容器,並基於開源的java-mp-demo微信公衆號項目進行擴展開發,實現的代碼頂層包名爲com.srpgroup.iot,分爲6個模塊: 其中mqtt.config包爲初始配置文件模塊、service包爲服務模塊(包含微信硬件雲到Mqtt的中轉服務Wx2MqttService和微信硬件雲API接口服務WxIotDeviceService)、wx.bean包爲微信硬件雲API接口的數據模型,wx.controller爲微信硬件平臺通訊入口,wx.handler包下爲publisher包和subscriber包,分別處理來自微信硬件雲和設備端的消息。sql

設備端設計代碼框架圖

 
 

如代碼框架圖所示,最底層是ESP-NONOS-SDK代碼靜態庫,由樂鑫官網提供,中間層由三層模塊組成 ,最上層爲產品層模塊,中間層的基本模塊有airkiss庫、mqtt庫、json庫和driver-key驅動庫。其上層分別是與iot系統有關的四個模塊以下:
 Smartlink模塊:負責基於airkiss協議的配對發現功能;
 IOT-mqtt客戶端模塊:負責鏈接設備商雲MQTT代理服務器;
 network模塊:負責當前系統所處網絡狀態的處理的分配,由iot-platform進行回調;包括定時器中斷,每隔必定時間檢測並更新狀態信息。
 config配置模塊:負責存取配置信息;
再上層爲Iot-platform模塊,負責調度下層模塊,並解耦product模塊與iot基礎模塊間的聯繫。
最上層爲應用層,分別有以下模塊:
 user_main入口模塊:負責運行初始化platform模塊和其餘無關iot系統的操做。
 product模塊:各類產品功能可集中在此實現和擴展;
 user_key等其餘模塊:與硬件交互有關的其餘功能,如user_key主要定義了負責開啓airkiss的按鍵事件和開關燈等物理操做事件相關的函數。json

流程分析:
當設備上電時,硬件調用user_main.c中的main()函數,對platform.c模塊進行調用,platform.c模塊初始化函數中先調用config模塊,檢查是否已配置wifi熱點信息,並嘗試聯網,第一次運行或嘗試聯網超時失敗,或用戶點擊相關按鈕事件時,會觸發platform模塊調用smartlink模塊進入等待用戶配對狀態。當聯網成功時,network.c調用iot-mqtt模塊嘗試鏈接MQTT代理並訂閱相關主題,由此進入正常運行狀態。tomcat

//TODO

源代碼

設備端-源代碼和設備商雲端-源代碼 已上傳
設備商雲端 https://github.com/fightfa/weixin-java-mp-demo-springmvc
設備端 https://github.com/fightfa/SmartHome

參考文獻

[1].微信硬件平臺
[2].基於MQTT協議的物聯網通訊系統的研究與實現姚丹
[3].基於MQTT物聯網消息推送系統
姜妮
[4].基於ZigBee與MQTT的物聯網網關通訊框架的設計與實現_譚方勇
[5].EMQ官方文檔:http://emqtt.com/docs/v2/index.html
[6].姜 妮 張 宇 趙志軍.基於MQTT物聯網消息推送系統.網絡新媒體技術(第3卷第6期) 2014,11
[7].微信硬件雲官方文檔:http://iot.weixin.qq.com/wiki/new/index.html?page=1-2 姚 丹,謝雪松,楊建軍.基於 MQTT 協議的物聯網通訊系統的研究與實現. 信息通訊(159期) 2016,03 [8].微信硬件平臺AirKiss3.0開發文檔 [9].微信公衆測試號接口與權限開發文檔 [10].ESP8266EX 技術規格表 [11].Windows環境下搭建MosQuitto服務器 - CSDN博客 [12].Airkiss智能配置上網 - CSDN博客

相關文章
相關標籤/搜索