非常荣幸参加意法半导体和 EEPW 论坛共同举办的活动,从2024年12月6号收到开发板到2025年1月12号完成项目任务,经过一个多月的学习、思考和实践,我对 NUCLEO-WBA55CG 开发板有了更深刻的理解,也在微信群里向各位大佬学习了很多知识,感谢大家的支持和帮助,感谢工作人员对参与者的大力支持。
下面我将此次活动的任务完成情况进行汇总。
所有项目设计过程已在 EEPW 论坛 板块分别发表分享帖,链接如下
1.
2.
3.
项目成果视频
https://www.bilibili.com/video/BV18vc3ekE5T/
硬件物料
NUCLEO-WBA55CB 开发板 (核心主控)
树莓派 4B (搭载 Home Assistant 平台)
COB 灯珠 x1
MOS开关驱动模块 x1
TP4056 电池充电模块 x1
18650 电池 x1
成果展示
介绍了开发环境搭建、工程上传、MQTT协议、EMQX 平台部署、Home Assistant 平台部署、心跳速率监测、LED 开关控制等。
一、蓝牙体温计1.开发环境
这里介绍编译环境的搭建流程。
(1)下载并安装 或下载并安装 ;
(2)下载并安装 ;
(3)下载 ST 官方资料: ;
示例工程位于 MCU and MPU embedded software 选项下
(4)Keil 和 STM32CubeMX 安装与 STM32WBA55CGU6 芯片对应的软件包;
打开 Keil MDK IDE,搜索并安装 STM32WBA55CGUx 设备包;
2.工程测试
这里以 ST 官方提供的蓝牙 Demo 工程进行测试,包括硬件和软件部分。
项目预期目标是实现 板载温度传感器数据的蓝牙传输 和 手机 APP 应用终端的远程监测。
3.硬件检测
1.检测跳帽是否接至 5V_ST-LINK 选项,将拨动开关调至 default 处;
2.使用恰当的 Typec-C 数据线连接开发板和电脑
4.软件测试
3.打开示例工程 BLE_HealthThermometer 文件路径位于
Nucleo-WBA55CGDocOfficialSTM32CubeWBAProjectsNUCLEO-WBA55CGApplicationsBLEBLE_HealthThermometer
4.重编译该工程,生成固件;
5.设置调试配置,使用板载 STLINK-V3
固件烧录
6.点击 Download 命令,待进度条完成,窗口显示 OK,短按 RST 键即可。
蓝牙连接
7.打开手机终端 APP —— ST BLE Toolbox 或 ST BLE Sensor
8.扫描蓝牙设备并连接
9.点击即可进入查看相关信息,如设备信息、信号强度、体温等
小结
展示和介绍了 NUCLEO-WBA55CG 开发板,包括功能、原理图等。此外,介绍了 IDE 开发环境的搭建、Keil 工程测试流程;完成了蓝牙 Demo 测试,并在智能手机终端应用中测试了开发板的蓝牙数据传输功能。
本文在前面关于开发板工程编译环境搭建及测试的基础上,进一步深入探讨该硬件与网络平台 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-WBA55CGDocOfficialSTM32CubeWBAProjectsNUCLEO-WBA55CGApplicationsBLEBLE_HealthThermometer
加载工程至开发板,短按 RESET 键重置并运行程序;
3 终端连接
(1)智能手机应用终端需下载并安装开发板对应的无线蓝牙应用,以识别蓝牙设备,获取发送的传感器数据。
安装 安卓或 iOS 客户端;
安装 安卓或 iOS 客户端;
(2)打开智能手机客户端应用 ST BLE Sensor,开启设备蓝牙,软件自动扫描周围的蓝牙设备,并显示 ST 无线设备 HR_70
(3)点击设备并连接,可获取心跳速率曲线、位置、能量消耗;还可查询蓝牙接收消息的文字信息;或通过 MQTT 协议上传至云端。
这里我们需要使用云端 MQTT 功能,因此需要对其进行配置
(4)点击进入 Cloud MQTT 后便进入参数配置界面,
根据 EMQX 客户端信息输入相应参数,确定即可;
这里 Device ID 即为订阅主题 Topic 。
4 MQTT
(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。
1.Docker
下载并安装 软件,
为不同软件提供相互隔离的容器环境,兼容运行 Linux 平台的软件 EMQX 和 Home Assistant;
2.部署 EMQX
具体操作如下
(1)进入 EMQX 官网,阅读 相关资料;
(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 平台;
若拉取失败,可尝试 yml 文件安装
在任意目录创建 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 的系统搭建。
在可预见的实际应用项目中,需要考虑成本及稳定性等指标,因此该项目还拥有较大的提升和改进空间。
此外,对于多传感器数据传输、低功耗传输等需求,还有待进一步开发和研究。
三、蓝牙控制 LED
本文介绍了通过蓝牙控制 LED 或开关的项目设计。
项目简介
主要分为两部分,
ST BLE Sensor 或 ST BLE Toolbox 控制 NUCLEO-WBA55CG 板载 LED 和控制外置 LED 或开关模块;
联系之前的工作,通过 MQTT 协议发送消息至 EMQX 和 Home Assistant 智能家居平台,实现 LED 或开关的联网远程控制。
项目方法
1.开发板 NUCLEO-WBA55CG 烧录官方例程 BLE_p2pServer;
2.ST BLE Sensor 或 ST BLE Toolbox 客户端连接并控制板载 LED ;
3.外置 LED 电路连接,并同样使用蓝牙 APP 控制测试;
4.连接 Home Assistant (HA) 添加仪表盘或修改配置文件,通过 HA 平台实现远程控制 LED 或开关。
1.硬件准备
NUCLEO-WBA55CG 开发板 x1
COB 灯珠 times1
MOS开关驱动模块 x1
TP4056 电池充电模块 x1
18650 电池 x1
杜邦线若干
2.工程编译和上传
示例工程压缩包,打开目标示例工程 BLE_p2pServer ,
工程路径为
Nucleo-WBA55CGDocOfficialSTM32CubeWBAProjectsNUCLEO-WBA55CGApplicationsBLEBLE_p2pServer
3.终端测试
工程上传后的效果
绿色 LD2 快速闪烁,指示连接状态。
1.使用 ST BLE Sensor 安卓客户端连接开发板蓝牙
手机 APP 控制 LED 效果
2.使用 ST BLE Toolbox 安卓客户端连接开发板
实现了 LED 的蓝牙客户端 APP 远程控制。
4.外置 LED
在完成板载 LED 蓝牙控制测试的基础上,这里介绍了外置 LED 的控制电路。
原理
根据用户手册或原理图可知,蓝色 LED 对应引脚号为 PB4/GPIO30
若要实现蓝牙远程控制外置 LED,则仅需控制对应 GPIO 引脚的输出电平即可,具体接线方式如下
效果
1.使用 ST BLE Sensor 应用客户端控制 GPIO 输出高低电平,实现外置 LED 的点亮和熄灭。
2.使用 ST BLE Toolbox 应用客户端控制 GPIO 输出高低电平,实现外置 LED 的点亮和熄灭。
3.使用 ST BLE Sensor 应用客户端控制 GPIO 输出高低电平,实现外置 LED 的点亮和熄灭,仅依靠电池供电。
需要注意的是,当充电模块连接数据线时,控制 MOS 开关仅需要输入GPIO 信号即可;当仅使用电池时,即 TP4056 模块未连接数据线,此时需要连接 VDD 和 PB4 两个引脚来实现 MOS 开关触发。
5.连接 MQTT
这里使用 ST BLE Sensor 应用的 Cloud MQTT 功能
连接开发板,进入 Cloud MQTT 配置,输入电脑 IP 地址,端口号,EMQX 平台建立的客户端名称和密码,设备 ID 号等信息。
测试
使用 MQTTX 软件进行连接和控制测试,配置相应的参数,注意订阅主题以及发送信息的 topic 要与 APP 参数一致。
发送 JSON 消息,即可控制 GPIO 电平以及 LED 。
6.连接 Home Assistant
打开 HA 主界面,进入 MQTT 通信测试页面
可配置主题并发送 LED 控制代码。
修改 configuration.yaml 文件,增加 LED 灯光控制按钮
mqtt: light: # Device name - name: "LED" # State topic state_topic: "phone_ljl/LED" # Command topic command_topic: "phone_ljl/LED" # Command type payload_on: "on" payload_off: "off" # unique_ID unique_id: "LED" # optimistic set optimistic: false
应用配置并刷新界面,即可通过按钮实现 LED 控制
项目成果
NUCLEO-WBA55CG 开发板连接 Home Assistant 控制 LED
Home Assistant 平台联网及控制
小结
本文介绍了 NUCLEO-WBA55CG 开发板蓝牙控制 LED 或开关的项目设计,工程烧录并通过 ST BLE Sensor 或 ST BLE Toolbox 安卓客户端控制板载 LED 和控制外置 LED 或开关模块;通过 MQTT 协议向开发板发送消息,依托 EMQX 和 Home Assistant 智能家居平台,实现 LED 或开关的联网远程控制。
开关控制在工业生产、消费电子、物联网、科学研究等领域有着广泛的市场需求,本文基于 NUCLEO-WBA55CG 开发板通过 MQTT 协议实现了开关模块的联网远程控制,为 NUCLEO-WBA55CG 系列开发板的应用拓宽了道路,并为相关产品的云端部署及智能化提供了参考。
总结
再次感谢活动主办方意法半导体和 EEPW 论坛的支持,以及微信大佬们的无私帮助,在大佬们的聊天对话中学到很多专业知识,开拓了视野,特别是 PWM 控制以及使用 STM32CubeMX 软件快速生成工程的学习,不断解决问题并最终实现目标。
HomeAssistant 的镜像下载安装、开发板和 HA 的连接等经历,极大地丰富了我对物联网的认知,也感受到自己的渺小。在阅读手册和访问官网链接等操作时明显感受到自身基础知识的匮乏,同时也激发了不断深入学习嵌入式开发的热情。
希望该活动越办越好,也希望越来越多的电子爱好者关注和参与 EEPW 举办的各种活动,共同学习、分享和成长,用科技创造美好未来。