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