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