物聯網資訊匯流第一站,教你如何以以 MQTT 連接微軟 Azure IoT HUB

IoT Hub 是 Azure 物聯網套件(Azure IoT Suite)中的主要 PaaS 服務,負責管理與連接物聯網裝置並協助企業蒐集、管理和處理從物聯網裝置上所產生的資料。
這個文章將提供逐步引導,如何以 MQTT 連接微軟 Azure IoT Hub,以及進階設定指令,與程式碼範例。
1. 若您沒有帳號,請於 https://azure.microsoft.com/en-us 建立
2. 登入您的帳號
3. 選取 New > Internet of Things > Azure IoT Hub.
4. 為新增的 Azure* IoT Hub 輸入必要資訊,並點選 Create
您的 Azure* IoT Hub 將馬上建立
一旦您的 Azure IoT Hub 被創造,您必須取得 SAS 簽章 token ,以執行主管理員動作,像是新增或列出裝置。
欲達成目標:
1. 在主控台,點選您新增的 Azure IoT Hub 連結.
2. 點選 Settings > Shared access policies > registryReadWrite.
3. 取得 Primary key 以及其對應的 Connection string
4. 新增 SAS token,如下步驟:
sastoken < 您的 IoT Hub 名>.azure-devices.net/devices/ < 您的 primary key> 1440 registryReadWrite
Note: 執行此步驟時,您必須在您下載(或複製)此範例的目錄下執行
(例如: C:\Users\me\Documents\GitHub\intel-iot-examples-mqtt\support\azure\build\windows)
您的 SAS token 應如下顯示:
該 SAS token 只會於 24 小時內有效,且只可用作執行 administrative 功能,例如新增新裝置。每個裝置亦需他自己的 SAS token,將在後續步驟中建立。
您可以在 support\azure 下找到 SAS token 程式, Windows 、 OS X 和 Linux 可在 support\azure\build 資料夾下找到 Precompiled binaries 檔。
你可以使用 cURL 指令於你的 Azure* IoT Hub 新增新裝置,以 SAS token registryReadWrite 權限獲取,如上述提及。例如,新增一個名為“edison1”的新裝置,請輸入以下指令:
$ curl -i -X PUT -H "Content-Type: application/json" -H "Authorization: < 您的 SharedAccessSignature>" -d "{deviceId: \"edison1\"}" https://< 您的 IoT Hub 名>.azure-devices.net/devices/edison1?api-version=2016-02-03
若您使用 Windows ,您需安裝 Cygwin 才可使用 cURL 。相關資訊請參考 installing cygwin.md。
您應接收到如下回應:
您可以使用 cURL 指令,以 SAS token registryReadWrite 權限獲取您的 Azure* IoT Hub 目前裝置清單,如下所示:
curl -i -H "Accept: application/json" -H "Authorization: " https://< 您的 IoT Hub 名>.azure-devices.net/devices?api-version=2016-02-03
您應接收到如下回應:
將裝置與 Azure* IoT Hub 連接,您需要裝置的 Primary key 或 Secondary key 以取得 SAS token 。
您需要新建一個 SAS token ,讓 Intel® Edison board 與您的 Azure* IoT Hub 連接並錄取資料。此種 SAS token 的權限比 administrative 的 SAS token 權限相較較小。您可以使用 SAS token 如下:
sastoken .azure-devices.net/devices/< 您的裝置名> 1440
您的 SAS token 應和下圖類似:
它的有效期限為 24 小時,且只應使用於它創建的裝置上。也就是說,每個您欲連接的裝置都需要自己的 SAS token。
若您依照上述步驟執行,應已經擁有您的程式與 MQTT 伺服器連接所需資訊:
在 Intel® Edison board 執行您的 C++ 程式碼時,您需要在 Eclipse 設定 MQTT 客戶端參數如下:
1. 於 Run configurations 以及 Commands to execute before application field 裡執行以下設定:
chmod 755 /tmp/< 您的應用程式名>; export MQTT_SERVER="ssl://< 您的 IoT Hub 名>.azure-devices.net:8883″; export MQTT_CLIENTID="< 您的裝置 ID>"; export MQTT_USERNAME=".azure-devices.net/< 您的裝置名>"; export MQTT_PASSWORD="< 您的裝置 SAS token>"; export MQTT_TOPIC="devices/< 您的裝置名>/messages/events/"
2. 點選 Apply 存取設定。
3. 點選 Run ,於您的主板上執行該程式碼。
在 Intel® Edison board 執行您的 JavaScript 程式碼時,您需要在 Intel® XDK IDE 設定 MQTT 客戶端參數。新增以下設定至 config.json 檔: