iOS x IoT ( 6 ) — iOS 溫濕度顯示器 & 總結

Syashin Chen
彼得潘的 Swift iOS App 開發教室
7 min readJul 2, 2018

--

iOS 溫濕度顯示器 (Dashboard)
本系列文旨在實驗一個用iOS App接收資料的微型物聯網(IoT)架構。

系列文的最後,我們將建立一個接收 MQTT 訊息的 iOS 應用程式,程式裡面會用到第三方套件 — CocoaMQTTGithub 說明裡面有提到,這個套件可以使用 CocoaPods 或是 Carthage 的方式安裝。

CocoaMQTT 安裝方式

以往可能會選擇 CocoaPods ,但是這種方式會動到原本的專案結構,所以我選擇使用較輕量的 Carthage,使用教學可以參考 CarthageGithub 或閱讀這篇文章

接下來說明一下程式的重點段落。

📗 Swift 主程式

🔌 建立 CocoaMQTT 物件

我們要接收從 MQTTBroker 傳來的資料,當然必須建立 CocoaMQTT 的物件實體,並且設定屬性:

建立 CocoaMQTT 物件實體

第 3 行 host 的值,是在第三章建立 VM 外部 IP,如下紅框部分。

外部 IP 位址

第 12 行 mqtt?.didReceiveMessage 是一個 Closure,處理接收到的資料,

接收到的 message.topic 會是一個 JSON 格式的字串 ( 請參考第五章的程式碼 ),要先把它轉成 Swift 裡面 Data 的格式,編碼設為 utf8

let messageData = (message.string)?.data(using: .utf8)

接下來使用 JsonDecoder() 解析,mqtt?.didReceiveMessage 完整改寫如下:

mqtt?.didReceiveMessage

其中,第 6 行JsonProvider 是一個自定義的 Struct ,結構如下:

JsonProvider.swift

有關解析 Json 資料,請參考情歌王子的文章:

🔌 訂閱主題 (Subscribe)

Subscribe

按下 Subscribe 按鈕後,會將 topic 字串:Arduino/DHT22 傳入程式中的 mqtt?.subscribe(topic!)訂閱,基本程式碼:

subscribeTopic function

特別注意的是,這裡的 topic 必須跟第五章Arduino 程式中設定的 topic 是一樣的,才能收到資料,如下:

iOS x IoT ( 5 ) — Arduino Uno + ESP8266 + DHT-22 程式一隅

🔌 同時新增圓角 & 陰影

參考這篇文章:

裡面的方法二,加以修改而成:

extension CALayer

📘 完整程式碼 & Demo

完整程式碼連結:

上個章節,我們在 Arduino 程式裡,設定了每兩秒會傳送溫濕度資料到Broker Topic : Arduino/DHT22,接下來只要將 Arduino 電路打開,手機這邊點開 APPTopic 輸入一樣的 : Arduino/DHT22 ,並且按下 Subscribe,就可以收到資料囉!當然,如果 Arduino 電路沒通電,是不會收到數值的。

MQTT_Dashboard Demo

📝 總結 & 心得

上面的 iOS 程式就是一個非常簡單的 SingleView App,重點只在如何運用 CocoaMQTT,本來想加點動畫效果,但是怕寫太多,考慮了一下還是下次的專案再使用吧!

這樣實際的走一遭,我們可以列出這系列文章的重點:

  • 進一步認識並深入了解 MQTT 的運作方式。
  • Google Cloud Platform 建立 Virtual Machine
  • 使用 mosquitto 在雲端的 Ubuntu Server 內建立 Broker
  • 從零開始的 Arduino 電路與程式實作。
  • 使用 Carthage 安裝 iOS 第三方套件、研究使用 CocoaMQTT
  • iOS 端解析 JSON 資料、完成畫面元件同時增加圓角 & 陰影。

其實很多都是 Google 就有的資料,我只是將他們用自己的方式寫出來,並重新組織了一遍,順便修正一些已經過時的步驟。

文章到這裡,我們已經完成一個微型的 IoT 架構了!不過,這系列只是在演示一種用 iOS 裝置當做末端接收、展示資料的方式,真正的 IoT 可沒有那麼簡單,Server安全性接收資料送出命令的穩定度、末端裝置與介面的整合等,還有非常多需要考量的重點!更重要的:

把這些資料從單純的數據 ( Data ),組織成能運用的資訊 ( Information) 才是 IoT 的真正價值!

IoT picture from Freepik

這個系列到此結束,如果您對本系列的文章有任何問題、或是覺得可以有更好的寫法,歡迎在任何一篇下面留言!

如果您覺得這篇文章還不錯或有幫助請幫我按個一兩下[拍手👏]給我點鼓勵吧!另外,您對文章內容有任何問題或發現錯誤,請不吝指正,強烈歡迎留言討論💬!

--

--

Syashin Chen
彼得潘的 Swift iOS App 開發教室

轉行滿兩年的小RD,喜歡做簡單有趣的東西,常常不小心複雜化。