传感器是物联网 (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 文件夹中。
程序执行中途将显示:
Copy
/* REGISTERED DEVICE */
/* Need to be customized */
The fourth through eighth line will look like this when completed:
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 标签中。 一旦 STM32 Nucleo 开发板连接到 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 的特定硬件信息。 此结构提高了库代码的可重用性,并确保可轻松移植于其他设备。
软件包的“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 必须连接到云的重要意义。
本文探讨了一个具体实现选项,以及最近发布的硬件开发套件和相关软件如何使传感器与云端的连接变得容易。 用户不仅可以借此监控对象的当前状态和特定参数,还可以使用云服务来进行预测性分析。
参考资料
- 探索 IBM Watson 物联网
- 用于物联网节点的 FP-CLD-BLUEMIX1 STM32 ODE 功能包
- IBM Watson 物联网快速入门