一個關於小程序Iot的具體實現(MQTT版)

前言

Iot,這個名詞應該不少人都聽過了吧,即大數據、Ai等興起後也緊跟着研發大潮流的到來,即物聯網。傳統簡單的說就是智能化、程序化的控制硬件設施,你們最容易想到的應該是智能家居,經過一個App或者遙控進行對傢俱設置的遠程控制。而今天要說的是人與物之間的通訊控制,且經過互聯網產品來執行人的命令,而機器進行應答。前端

競品

說到小程序控制硬件,你們應該立馬想到什麼產品呢?某拜、某FO、售貨機等等,他們的架構上會大體上有一個共通點就是存在或者相似的雲Iot功能。就拿某拜的雲架構來講就用了Azure IoT 中心、存儲、虛擬機等服務。
圖片描述java

作小想大

那麼咱們能夠展望更大的架構與實現、或者但願能配出、實現出相似的功能也好,可是咱們仍是要一步一步的實現一下這個功能或小產品的功效。git

目標擬定:用戶控制端是小程序,硬件端咱們選用簡單的售貨機(或快遞櫃),咱們要實現的就是針對性的經過小程序命令通知售貨機對應的櫃子開鎖關鎖。github

那麼咱們須要構思對應的簡易版架構還有對接的實現方式了!小程序

目前傳統且你們熟悉的先後端交互方式應該大部分是REST API吧,那麼咱們在小程序(將它僅僅視爲一個單純的前端展現)與後臺(這裏就是下圖的Iot,咱們能夠用SpringBoot+Netty構建一個Iot中心)之間的通訊就選用API的形式,後臺開放對應的指令接口,由小程序去調用,這裏可能還有一個業務就是:那麼服務器對小程序的主動通訊還有通知呢?這裏就不細講了,這個能夠看成是產品迭代的後期考慮問題,你們也能夠考慮下實現方式。後端

本文小程序爲MQTT調試測試Demo,未作REST API對接,下一篇文章會着重介紹。服務器

那麼Iot中心與售貨機(快遞櫃)的通訊呢?可能只作軟件的同窗通常比較少接觸到,我一開始作的時候也是很懵,不過大體說下就是不一樣的通訊協議來實現通訊,咱們就拿單片機來講的話,能夠了解到它支持多少種通訊協議,好比MQTT或者TCP/IP等等。架構

這個版本咱們就作MQTT的通訊版本,那麼流程圖就以下啦。
圖片描述異步

【圖片】socket

準備什麼?

選擇已有的現成Github資源,本次選用paho.js用來方便MQTT通訊

本文將着重講解小程序與MQTT之間的對接通訊,暫未出現API調用

小程序端:你須要必定的小程序開發基礎,我此次選擇了友人的一個Github項目做爲我小程序的Demo

後臺端:使用SpringBoot+Netty作一個對接MQTT和小程序的小的Iot中心

MQTT硬件模擬端:我選用了Github權威的Eclipse的paho,mqtt.java做爲模擬

很簡單,你須要實現的就是核心的後臺端也是你最擅長的Java端。

先簡後難

當你的職位作到必定的程度後,你可能須要作的不是去寫底層詳細的實現代碼,而是一個這樣實現的模板或者思路與流程,因此咱們暫時先作一個簡單版的小程序到硬件之間的通訊流程。

netty很好,這裏我很少說,因BAT大廠對高級的定義通常也是須要了解到Netty的源碼程度等。那麼你須要基於SpringBoot去加Netty,自定義對應的編解碼內容,因爲咱們使用的paho,因此有它自己的一些格式,大體的思路就是定義協議規範,通訊這塊其實相較簡單由於很大一部分netty其實已經幫你作好了。

小程序的socket通訊是ws的開頭,那麼咱們的Iot中心也須要有ws的通訊通道。

這裏咱們的通訊地址是:ws://localhost:8094/mqtt

並未使用wss,同樣的說法吧,先把簡單的實現了再想複雜的。

那麼小程序對應也是鏈接這個地址,小程序能夠調式下啓動鏈接,而Mqtt的Java硬件模擬端也是同一個地址的鏈接。

對於MQTT而言,小程序須要去訂閱一個主題,Java模擬端也正對這個主題去發送信息,若是兩端都發送接收正常且都經過了咱們的Iot中心,那麼咱們的這個小項目就是已經成功啦!

效果

圖片描述
圖片描述圖片描述圖片描述

GitHub

本文的相關所有源碼已經放到了GitHub項目上的paho-mqtt項目上了

地址:paho-mqtt
項目介紹:基於Netty4與SpringBoot,聊天室WebSocket(文字圖片)加API調用Netty長連接執行發送消息(在線數、用戶列表)、Iot物聯網-MQTT協議、TCP/IP協議單片機通訊,異步存儲聊天數據


圖片描述

相關文章
相關標籤/搜索