iOS x IoT ( 6 ) — iOS 溫濕度顯示器 & 總結
📗 Swift 主程式
🔌 建立 CocoaMQTT 物件
我們要接收從 MQTTBroker 傳來的資料,當然必須建立 CocoaMQTT 的物件實體,並且設定屬性:
第 3 行的 host
的值,是在第三章建立 VM 的外部 IP,如下紅框部分。
第 12 行 mqtt?.didReceiveMessage
是一個 Closure,處理接收到的資料,
接收到的 message.topic
會是一個 JSON 格式的字串 ( 請參考第五章的程式碼 ),要先把它轉成 Swift 裡面 Data
的格式,編碼設為 utf8:
let messageData = (message.string)?.data(using: .utf8)
接下來使用 JsonDecoder()
解析,mqtt?.didReceiveMessage
完整改寫如下:
其中,第 6 行的 JsonProvider
是一個自定義的 Struct ,結構如下:
有關解析 Json 資料,請參考情歌王子的文章:
🔌 訂閱主題 (Subscribe)
按下 Subscribe 按鈕後,會將 topic 字串:Arduino/DHT22 傳入程式中的 mqtt?.subscribe(topic!)
訂閱,基本程式碼:
特別注意的是,這裡的 topic 必須跟第五章的 Arduino 程式中設定的 topic 是一樣的,才能收到資料,如下:
📘 完整程式碼 & Demo
完整程式碼連結:
上個章節,我們在 Arduino 程式裡,設定了每兩秒會傳送溫濕度資料到Broker 的 Topic : Arduino/DHT22,接下來只要將 Arduino 電路打開,手機這邊點開 APP, Topic 輸入一樣的 : Arduino/DHT22 ,並且按下 Subscribe,就可以收到資料囉!當然,如果 Arduino 電路沒通電,是不會收到數值的。
📝 總結 & 心得
上面的 iOS 程式就是一個非常簡單的 SingleView App,重點只在如何運用 CocoaMQTT,本來想加點動畫效果,但是怕寫太多,考慮了一下還是下次的專案再使用吧!
這樣實際的走一遭,我們可以列出這系列文章的重點:
- 進一步認識並深入了解 MQTT 的運作方式。
- 在 Google Cloud Platform 建立 Virtual Machine。
- 使用 mosquitto 在雲端的 Ubuntu Server 內建立 Broker。
- 從零開始的 Arduino 電路與程式實作。
- 使用 Carthage 安裝 iOS 第三方套件、研究使用 CocoaMQTT。
- iOS 端解析 JSON 資料、完成畫面元件同時增加圓角 & 陰影。
其實很多都是 Google 就有的資料,我只是將他們用自己的方式寫出來,並重新組織了一遍,順便修正一些已經過時的步驟。
Arduino 部分用的是最基本的 Arduino Uno R3 主板 + ESP8266(ESP - 01)來進行 WiFi 連接,但是網路上有很多是使用 NodeMcu 這塊整合 WiFi 的開發版,有興趣可以參考:
文章到這裡,我們已經完成一個微型的 IoT 架構了!不過,這系列只是在演示一種用 iOS 裝置當做末端接收、展示資料的方式,真正的 IoT 可沒有那麼簡單,Server 的安全性、接收資料/送出命令的穩定度、末端裝置與介面的整合等,還有非常多需要考量的重點!更重要的:
把這些資料從單純的數據 ( Data ),組織成能運用的資訊 ( Information) 才是 IoT 的真正價值!
這個系列到此結束,如果您對本系列的文章有任何問題、或是覺得可以有更好的寫法,歡迎在任何一篇下面留言!
如果您覺得這篇文章還不錯或有幫助請幫我按個一兩下[拍手👏]給我點鼓勵吧!另外,您對文章內容有任何問題或發現錯誤,請不吝指正,強烈歡迎留言討論💬!
系列文章連結:
iOSxIoT(1) — Overview
iOSxIoT(2) — MQTT簡介
iOSxIoT(3) — 建立雲端Server
iOSxIoT(4) — 建立MQTT Broker
iOSxIoT(5) — Arduino Uno+ESP8266+DHT-22
iOSxIoT(6) — iOS溫濕度顯示器&總結