本文在前面关于开发板工程编译环境搭建及测试的基础上,进一步深入探讨该硬件与网络平台 Home Assistant 的连接,目标是实现开发板数据的网络访问,以及远程控制等功能的实现,以期拓展其物联网功能,为智能家居和智能工业的应用提供参考。
·项目简介
本项目基于 NUCLEO-WBA55CG 开发板官方例程进行二次开发。搭建 MQTT 协议传输平台,将开发板蓝牙传输信息发送至云端,并通过EMQX 平台发送至客户终端 Home Assistant,实现远程网络数据传输和访问。
·项目方法
1.开发板 NUCLEO-WBA55CG 烧录官方例程;
2.搭建 MQTT 协议传输平台,包括 EMQX 和 Home Assistant;
3.使用 MQTTX 软件测试连接状态
4.测试通过后,将数据发送至 Home Assistant 平台。
1 硬件准备
开发板、智能手机、Type-C 转 USB 数据线、Home Assistant 平台(树莓派 4 或 Docker)
2 工程上传
示例工程压缩包,打开目标示例工程 BLE_HealthRate ,
工程路径为
Nucleo-WBA55CG\DocOfficial\STM32CubeWBA\Projects\NUCLEO-WBA55CG\Applications\BLE\BLE_HealthThermometer
工程主函数代码
#include "main.h" ADC_HandleTypeDef hadc4; CRC_HandleTypeDef hcrc; RAMCFG_HandleTypeDef hramcfg_SRAM1; RNG_HandleTypeDef hrng; RTC_HandleTypeDef hrtc; UART_HandleTypeDef huart1; DMA_HandleTypeDef handle_GPDMA1_Channel1; DMA_HandleTypeDef handle_GPDMA1_Channel0; void SystemClock_Config(void); void PeriphCommonClock_Config(void); static void SystemPower_Config(void); int main(void) { HAL_Init(); MX_APPE_Config(); SystemClock_Config(); PeriphCommonClock_Config(); SystemPower_Config(); MX_GPIO_Init(); MX_GPDMA1_Init(); MX_RAMCFG_Init(); MX_RTC_Init(); MX_RNG_Init(); MX_ICACHE_Init(); ConfigureStandbyWakeupPins(); MX_APPE_Init(NULL); while (1) { MX_APPE_Process(); } }
加载工程至开发板,短按 RESET 键重置并运行程序;
完整工程见附件。
3 终端连接
(1)智能手机应用终端需下载并安装开发板对应的无线蓝牙应用,以识别蓝牙设备,获取发送的传感器数据。
安装 相关资料;
(2)命令行终端 CMD 运行如下指令
docker pull emqx/emqx:5.8.4 docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.8.4
自动拉取、下载、部署至 Docker 并运行 EMQX 平台;
在任意目录创建 docker-compose.yml 文件
version: '3' services: emqx1: image: emqx:5.8.4 container_name: emqx1 environment: - "EMQX_NODE_NAME=emqx@node1.emqx.io" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]" healthcheck: test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"] interval: 5s timeout: 25s retries: 5 networks: emqx-bridge: aliases: - node1.emqx.io ports: - 1883:1883 - 8083:8083 - 8084:8084 - 8883:8883 - 18083:18083 # volumes: # - $PWD/emqx1_data:/opt/emqx/data emqx2: image: emqx:5.8.4 container_name: emqx2 environment: - "EMQX_NODE_NAME=emqx@node2.emqx.io" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]" healthcheck: test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"] interval: 5s timeout: 25s retries: 5 networks: emqx-bridge: aliases: - node2.emqx.io # volumes: # - $PWD/emqx2_data:/opt/emqx/data networks: emqx-bridge: driver: bridge
通过命令行切换 docker-compose.yml 文件所在目录,并启动 EMQX 集群
cd C:/EMQX docker-compose up -d
此时可在 Docker Desktop - Images 中找到 emqx/emqx5.8.4 镜像文件,通过指令
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.8.4
即可装载运行 EMQX 平台。
(3)点击 Docker 容器 EMQX 设备链接,进入 EMQX 平台,
初始登录账户名和密码为 admin ,public ;
(4)建立和配置客户端信息
依次打开 `访问控制` - `客户端认证` - `创建` - `Password-Based` - `内置数据库` - (默认配置)- `创建` ;
`用户管理` - `新建用户` - 自定义用户名和密码;
回到平台主界面,可观察节点和连接数目等信息
观察信息流和连接状态以及数据传输情况,实现后台数据流监控
3.部署Home Assistant 智能家居平台
这里我们介绍树莓派部署 Home Assistant 的主要流程
(1)下载 Home Assistant 镜像文件
https://github.com/home-assistant/operating-system/releases/download/14.1/haos_rpi4-64-14.1.img.xz
(2)使用 BalenaEther 软件加载镜像,并烧录至 SD 卡
提示烧录成功后,装载 SD 卡
(3)浏览器输入 http://homeassistant:8123/ 即可进入 Home Assistant 系统界面
(4)添加 MQTT 集成
依次点击设置 - 设备与服务 - 添加集成 - 搜索 MQTT - 填写代理信息,
代理栏输入计算机 IP 地址,端口 1883,用户名和密码为 EMQX 中创建的用户信息;
创建成功后,可在 设备与服务 选项下看到 MQTT 应用图标;
(5)根据开发板蓝牙发送的信息格式,配置 YAML 参数
打开 Home Assistant 安装根目录下的 configuration.yaml 文件,并添加如下代码
# Example configuration.yaml entry mqtt: sensor: - name: "Heart Rate" state_topic: "phone_ljl/Heart Rate" suggested_display_precision: 1 unit_of_measurement: "bmp" value_template: "{{ value_json.heart_rate_measurement }}"
需要注意主题 state_topic 和 value_template 的定义。
在 开发者工具 界面 重新加载 YAML 所有配置 并刷新浏览器界面,即可看到 Heart Rate 传感器选项。
5 连接测试
这里展示使用 MQTTX 软件进行连接测试的方案
(1)下载并安装 软件
(2)点击连接右侧的加号 - 新建连接,配置参数信息,服务器地址、端口、用户名、密码信息与 EMQX 中的客户端对应即可;
点击 添加订阅 按钮,输入手机客户端配置的 Topic 信息,
点击连接按钮即可接收信息。
6 连接 Home Assistant
从接收到的信息条可知,每条消息包含三组数据,分别是心跳速率、能量扩散、测试间隔。
这里我们仅展示心跳速率的数据。
由于前面我们已经配置了 MQTT 集成参数,以及 configuration.yaml 文件,在 概况 界面即显示心跳速率信息。
·项目成果
点击 Home Assistant 网页链接 http://homeassistant:8123/ ,进入传感器面板,即可观察到心跳速率的动态变化,更新时间间隔为 1 秒(可通过 ST BLE Sensor 应用调整采样速率)
历史曲线,描述数据演化过程
动态效果展示
手机端安装 Home Assistant 应用也可获取相同信息。
·总结
本文介绍了 NUCLEO-WBA55CG 开发板通过 MQTT 协议与 Home Assistant 智能家居平台的连接,关键在于 EMQX 平台、Home Assistant 的系统搭建。
在可预见的实际应用项目中,需要考虑成本及稳定性等指标,因此该项目还拥有较大的提升和改进空间。