傳感器是物聯網 (IoT) 的眼睛和耳朵,提供分析和大數據應用需要的信息,幫助用戶做出明智的決策。 盡管有許多方法可以連接多個無線傳感器來執行該分析,但連接到云端仍然具有挑戰性。 在空間、功率和成本以及配置和管理所有傳感器的同時又要確保強大的安全性方面尤其如此。
為了縮短開發周期,有些開發套件兼具傳感器節點開發和云連接功能。 開發人員無需就如何將云服務集成到最終用戶體驗中做出架構決策(包括系統將執行的操作以及哪些操作會觸發設備的特定功能),即可使用這些“開箱即用”套件相對較快地啟動并運行具有傳感器功能的設計。
本文將介紹 STMicroelectronics 的 STM32 Nucleo 開發板和 X-NUCLEO 擴展板,它們集成了實現所選應用專門功能所需的組件。閃存 Nucleo 傳感器節點 文中還將說明如何使用 FP-CLD-BLUEMIX1 擴展軟件包,通過幾個簡單的步驟來發出 Nucleo 傳感器節點信號并將 Nucleo 電路板連接到 IBM Watson IoT 云平臺。1
Nucleo 平臺和軟件
STM32 Nucleo 開發板為工程師提供了一種靈活的方式來嘗試新的概念,并使用 STMicroelectronics STM32 微控制器構建原型。 這種開發板具有在所有 Nucleo 電路板上通用的擴展針座,因此很容易添加擴展模塊。
Nucleo 開發板集成了 ST-LINK / V2-1 調試器/編程器,因此支持 Arduino 作為其開放生態系統方法的一部分,并且不需要單獨的探頭。 開發板隨附 STM32 軟件庫以及各種封裝軟件示例。
包括 Arduino 在內,有多種不同的盾板可以使用。 使用 STMicroelectronics 的 Morpho 針座的開發板可用于所有應用類型的盾板擴展,包括射頻、工業和家庭自動化盾板應用。 此外,還提供藍牙 LE、Wi-Fi 和視聽應用的盾板。
庫支持涵蓋用于 STM32 的標準庫,以及對 ARM? 免費在線 mbed 的支持。ARM? mbed 是一個 IoT 設備平臺,提供操作系統、工具和開發人員生態系統,使設計人員能夠評估并開始使用 Nucleo 開發板。
為了幫助形成從傳感器到云端的連接,STMicroelectronics 還提供了 FP-CLD-BLUEMIX1,這是一種可在 STM32 微控制器上運行、用于 STM32Cube 的 IoT 節點擴展軟件包,可從 STMicroelectronics 的網站獲取。2 STM32Cube 的主要目標是使開發應用的過程變得更容易。 為此,該擴展軟件包包含了 STM32CubeMX 和 STM32Cube 嵌入式軟件庫(圖 1)。
圖 1: FP-CLD-BLUEMIX1 提供了完整的中間件來構建基于 Wi-Fi 連接的應用,并將STM32 Nucleo 開發板鏈接到基于云的服務。 (圖片來源: STMicroelectronics)
STM32CubeMX 從圖形用戶界面生成 STM32 MCU 的初始化 C 代碼。 STM32MX 還生成 IDE 就緒型項目,提供功耗計算器,并允許直接從 st.com 導入 STM32Cube 嵌入式軟件庫。
每個 STM32 產品系列都有一個 STM32Cube 嵌入式軟件包。 該嵌入式軟件庫包括用于 STM32 外圍設備的硬件抽象層 (HAL) 和低層 (LL) 應用編程接口 (API),以及基于 STMicroelectronics 開發或開源組件的一組中間件(RTOS、USB、TCP/IP、圖形等)。 初始化代碼、中間件元器件、HAL 和 LL API 與所有 STM32 編譯器兼容。
就其本身而言,FP-CLD-BLUEMIX1 軟件包通過為 Wi-Fi、NFC 和傳感器擴展板提供板級支持包 (BSP) 來擴展 STM32Cube。 其作用是實現與 IBM Bluemix 云的連接來傳輸傳感器數據并從云應用接收命令。 該軟件包本質上有助于快速啟動端到端 IoT 開發,以便您可以專注差異化設計。
連接傳感器
提供了一個軟件界面,用于訪問 Nucleo 開發板的溫度和濕度傳感器 (HTS221)、壓力傳感器 (LPS25HB)、運動傳感器(LIS3MDL 和 LSM6DS0)以及寫入和讀取 RFID / NFC 標簽。 X-NUCLEO-IKS01A1 包含所有這些傳感器(圖 2)。
圖 2: X-NUCLEO-IKS01A1 是一種運動 MEMS 和環境傳感器評估板系統。 (圖片來源: STMicroelectronics)
IKS01A1 與 Arduino UNO R3 連接器布局兼容,圍繞 STMicroelectronics 的 LSM6DS0 3 軸加速計 + 3 軸陀螺儀、LIS3MDL 3 軸磁力儀、HTS221 濕度和溫度傳感器以及 LPS25HB 壓力傳感器設計而成。
IKS01A1 還包括實現 MQ 遙測傳輸 (MQTT) 協議的中間件包,以促進 STM32 Nucleo 開發板與 IBM Bluemix Cloud 服務之間的交互。 該軟件包括用于查看傳感器數據以及通過 IBM Bluemix 控制設備的示例。
除了中間件堆棧,還提供了一個用于測試與 IBM Watson IoT 平臺連接的示例應用。 它用于建立端到端 IoT 應用的原型。 在 IBM Bluemix 云服務中注冊 STM32 Nucleo 微系統后,該微系統即可用于傳輸實時傳感器數據。 使用 NFC 動態標簽時,用戶還可以自動打開 IBM 提供的試用網頁,并將 STM32 Nucleo 開發板上所有傳感器生成的數據可視化。
為了將 STM32 Nucleo 微系統與 IBM Bluemix 云進行連接,STMicroelectronics 移植了 MQTT 應用級網絡協議的開源實現。 MQTT 是一種機器到機器 (M2M) IoT 連接協議,用于通過少量的代碼連接遠程設備,特別是在網絡帶寬有限的情況下。 消息傳遞協議是輕型的,因此節省了電力,這使其特別適合用于嵌入式系統中的傳感器數據遙測和實現。 在 FP-CLD-BLUEMIX1 中,MQTT 作為中間件庫集成到 STM32 軟件包中。
功能包中提供了將 X-NUCLEO-IKS01A1、X-NUCLEO-IDW01M1 和 XNUCLEO-NFC01A1 擴展板與 NUCLEO-F401RE 板一起使用的示例應用。 此應用從溫度、濕度、壓力、加速計、磁力儀和陀螺儀傳感器讀取數據值,并通過 Wi-Fi 將其傳輸到 IBM Bluemix。
此應用默認配置為僅針對數據可視化目的在快速啟動模式下運行。 但很容易修改為在 IBM Bluemix 中注冊和控制設備(需要 IBM Bluemix 帳戶)。
注冊 IBM Bluemix 帳戶
在 IBM Bluemix 云服務中注冊 STM32 Nucleo 微系統后,該微系統即可用于建立端到端 IoT 應用的原型,并開始傳輸實時傳感器數據。
登錄或創建 Bluemix 帳戶(請參見“參考資料 1”中的完整說明)即可開始。 注冊時必須提供幾個屬性和參數,如下所示:
OrganizaTIon ID (i.e., “1w8a05”)。
Device type (i.e.: “stm32_nucleo”)。
UM2007 FP-CLD-BLUEMIX1 software descripTIon
DocID028875 Rev 2 13/23
AuthenTIcaTIon Method (only “use-token-auth” supported)。
Authentication token (i.e., “uUURNRbeQQaX+Fvi&8”)。
將設備屬性復制到位于源代碼文件 IBM_Bluemix_Config.c 中的 Config_MQTT_IBM 函數中。 該文件位于 FP-CLD-BLUEMIX1 軟件包的 Projects/Multi/Applications/MQTT_IBM/Src 文件夾中。
然后,ibm_mode 變量需要設置為 “REGISTERED”,如下所示(代碼列表):
Void Config_MQTT_IBM (MQTT_vars * mqtt_ibm_setup , uint8_t *macadd):
/* Default Configuration for QUICKSTART. REGISTERED mode requires account on Bluemix */
mqtt_ibm_setup-》ibm_mode = REGISTERED
然后,需要將 IBM Bluemix 中提供的設備屬性復制到名為 IBM_Bluemix_Config.c 的源代碼文件中的 Config_MQTT_IBM 函數中。 該文件位于 Projects/Multi/Applications/MQTT_IBM/Src 文件夾中。
程序執行中途將顯示:
/* REGISTERED DEVICE */
/* Need to be customized */
完成后第四到第八行將顯示如下:
strcpy ((char*)mqtt_ibm_setup-》username,”use-token-auth); //customize
strcpy ((char*)mqtt_ibm_setup-》password,” uUURNRbeQQax+Fvit&8”);
strcpy ((char*)mqtt_ibm_setup-》hostname,”1w8a05.messaging.internetofthings.ibmcloud.com);
strcpy ((char*)mqtt_ibm_setup-》device_type, “stm32_nucleo”);
strcpy ((char*)mqtt_ibm_setup-》org_id, “1w8a05”);
代碼列表:IBM 設備注冊和屬性插入要求。 完成注冊后,STM32 Nucleo 微系統將能夠向 IBM Watson IoT 應用發送信息并從其接收信息。 (來源:STMicroelectronics)
FP-CLD-BLUEMIX1 軟件包示例應用包含默認配置,以根據設備的 MAC 地址在 IBM Quickstart 網頁3 上查看傳感器數據。 URL 頁面也被寫入 NFC 標簽中。 一旦 STM32Nucleo 開發板連接到 Wi-Fi 接入點,就會自動與 IBM Bluemix 交互并開始傳輸傳感器數據。 Wi-Fi 擴展板的 MAC 地址和 IBM Quickstart URL 打印在串行終端接口中。
要查看實時傳感器數據,可以將 Quickstart URL 復制并粘貼到 Web 瀏覽器中。 使用支持 NFC 的移動設備時,將設備靠近 NFC 標簽可以更容易打開網頁。 為了實現連接狀態視覺指示,一旦 Nucleo 連接到 IBM Bluemix,STM32 Nucleo 開發板上的綠色 LED2 將變為 “ON”。 每次傳輸傳感器數據樣本時,就會閃爍。
FP-CLD-BLUEMIX1 包本身帶有一個 STM32 層, 其中包括一組簡單的與上層應用、庫和堆棧交互的通用多實例 API。 這些通用和擴展 API 基于一個通用框架。 這讓它們構建的任意層(例如中間件層)可以實現其功能,而無需具備既定 MCU 的特定硬件信息。 此結構提高了庫代碼的可重用性,并確??奢p松移植于其他設備。
軟件包的“Documentation”文件夾中的編譯 HTML 文件中為用戶提供了完整描述 API 函數和參數的詳細技術信息。
IBM 樣本使用的主要 API 有:
· ·void Config_MQTT_IBM(MQTT_vars * mqtt_ibm_setup , uint8_t * macadd);配置用于 IBM 云連接的 MQTT 參數,指定 Wi-Fi 擴展板的 MAC 地址。
· int spwf_socket_create(Network* net, uint8_t * hostname, uint32_t port_number,uint8_t * protocol);打開套接字,指定主機名、端口號和協議類型(TCP 或 TLS)。 返回成功或失敗結果以及網絡結構中的套接字 ID。
· ·void MQTTClient(Client* c, Network* network, unsigned intcommand_timeout_ms, unsigned char* buf, size_tbuf_size, unsigned char* readbuf, size_treadbuf_size);配置客戶端結構,指定輸入參數。
· int MQTTConnect(Client* c, MQTTPacket_connectData* options);連接 IBM MQTT 代理,指定客戶端和 MQTTPacket_connect 數據結構中的參數。 返回成功或失敗結果。
· int MQTTSubscribe(Client* c, const char* topicFilter, enumQoSqos, messageHandlermessageHandler);訂閱數據結構客戶端中定義的 MQTT 主題。 返回成功或失敗結果。
總結
對分析數據不斷增長的需求以及簡化組織獲得數據訪問權限的需要,凸顯了無線傳感器及其相關 MCU 必須連接到云的重要意義。
本文探討了一個具體實現選項,以及最近發布的硬件開發套件和相關軟件如何使傳感器與云端的連接變得容易。 用戶不僅可以借此監控對象的當前狀態和特定參數,還可以使用云服務來進行預測性分析。