M-Design设计竞赛 - 基于WB09KE设计智能家居蓝牙中枢从站
该项目使用了NUCLEO-WB09KE,实现了蓝牙中枢的设计,它的主要功能为:实时上报传感器数据、接收数据控制风扇/灯光的开关。
标签
智能家居
M-Design
NUCLEO-WB09KE
蓝牙中枢
鲍飞.
更新2025-04-01
28


项目介绍

项目背景随着物联网(IoT)技术的迅速发展,智能家居系统的需求日益增加。因此,我使用了STM32WB09KE为核心主控设计了一个智能家居蓝牙控制中枢这么一个项目。这个项目不仅能够通过无线通信技术实现对家庭环境中灯光、风扇等设备的远程控制,还能实时采集温度、湿度、光照强度等环境参数,并将这些数据反馈终端(手机、电脑等),从而让居家生活更加的舒适。

创新点

  1. 双向通信控制:不同于传统的单向控制系统,这个项目实现了指令下发与设备状态反馈的闭环控制逻辑。这意味我不仅可以发送控制命令,比如开关灯或调整风扇速度,还可以实时接收设备的状态信息,确保操作的有效性和准确性。
  2. 多任务实时处理:这个项目能够在控制设备的同时完成对多个传感器的数据采集工作,并且还可以实时上报数据终端设备。
  3. 低功耗设计:利用WB09KE是一款低功耗蓝牙和超低功耗的芯片,在不影响性能的前提下大幅降低了功耗,并且在没有连接蓝牙的情况下让它会进入睡眠模式。这对于电池供电且需要长时间供电的它来说,能够显著延长设备的工作时间,减少了频繁充电的情况。
  4. 支持蓝牙中继:扩展了终端的无线覆盖的范围,实现更广泛的网络覆盖和更稳定的通信质量

方案框图与设计思路

本次项目采用星型拓扑结构,以STM32WB09KE为核心节点,构建了多设备协同的智能家居网络。这样窝在家中的某一个角落中就可以控制家中的蓝牙设备。具体架构如下:


image.png
需要实现以下功能

  • 主控制器(STM32WB09KE)作为网络协调器,负责:
  • 接收手机/PC端的控制指令并分发至目标设备
  • 聚合各从设备的传感器数据并回传至手机/PC端
  • 维护蓝牙网络连接状态
  • 从设备节点
  • 执行器模块:驱动灯光和风扇
  • 传感器模块:实时采集温湿度、光照等环境参数
  • 独立通信协议栈:支持自定义数据帧格式(设备ID+指令/数据)
    完成本次项目大致可以以下分为5个步骤


    image.png

硬件介绍

  • 主控:
    • NUCLEO-WB09KE开发板
  • 执行单元:
    • 风扇
    • 灯条
  • 传感器模块:
    • 光照传感器
  • 蓝牙终端:
    • 手机
    • PC

主控

  • STM32WB09KE 是 Arm Cortex-M0+ 内核,具有 512 KB 的闪存和 64 KB 的 SRAM,采用VFQFPN32封装
  • 符合Bluetooth®低功耗SIG核心规范版本5.3,支持点对点连接和Bluetooth® Mesh网络,允许以可靠的方式建立大规模设备网络
  • 超低功耗和出色无线电性能的优化,电池寿命遥遥领先,关断模式下12 nA (1.8 V)
  • 包含专用硬件功能:符合NIST特别出版物800-90B要求的真随机数发生器 (TRNG)、用于128位AES加密的安全协处理器、CRC计算单元、64位唯一ID、Flash存储器读/写保护以及公钥加速器 (PKA)
    如下是NUCLEO-WB09KE这个板子的正反面介绍,标注出了重要的部分



    image-20250224143836582.pngimage-20250224143840014.png
    这个内部框图庖丁解牛般的展示了电源的脉络、对外的接口。



    image-20250306191447726.png

执行单元


image.png

使用光耦来进行隔力,通过继电器来控制设备的通和断开,可以支持220V的交流电(但注意高压有风险,行动需谨慎!)


image.png
绘制的原理图和PCB就是硬件介绍中的执行单元

image.png

image-20250323131535892.png

软件流程图

MCU


代码是参考官方提供的例程修修补补而来的,过程是非不易。以下是代码整体的运行流程图

graph TD
A[系统初始化] --> B[硬件抽象层初始化 HAL_Init]
B --> C[系统时钟配置 SystemClock_Config]
C --> D[外设时钟配置 PeriphCommonClock_Config]
D --> E[外设初始化]
E --> F[GPIO初始化 MX_GPIO_Init]
E --> G[无线电模块初始化 MX_RADIO_Init]
E --> H[定时器初始化 MX_TIM16_Init]
E --> I[加密模块初始化 MX_PKA_Init]
I --> J[BLE应用层初始化 MX_APPE_Init]
J --> K[主循环]

K --> L[BLE事件处理 MX_APPE_Process]
K --> M{按键检测}
M --> |B1按下| N[BLE数据4号位+1]
M --> |B3按下| O[BLE数据4号位+10]
K --> P{接收数据处理}
P --> |0x01标志| Q[切换蓝灯状态]
P --> |0x01标志| R[更新BLE数据2号位]
P --> |0x01标志| S[切换红灯状态]
P --> |0x01标志| T[更新BLE数据3号位]

H --> U[定时器中断触发]
U --> V[周期计数器+1]
V --> W[发送BLE数据]

上位机

PC端使用python来开发,下面是代码运行的主要流程图

graph T
A[启动应用] --> B[初始化界面]
B --> C[创建异步事件循环]
C --> D[显示主界面]
D --> E{用户操作}

E --> |扫描设备| F[启动BleakScanner]
F --> G[填充设备列表]
G --> D

E --> |选择设备| H[发起连接请求]
H --> I{连接成功?}
I --> || J[启用功能按钮]
I --> || K[显示错误信息]
J --> D

E --> |发送数据| L[选择特征UUID]
L --> M[编码输入数据]
M --> N[通过GATT发送]
N --> D

E --> |订阅通知| O[选择特征UUID]
O --> P[注册回调函数]
P --> Q[持续接收数据]
Q --> R[更新全局字节数组]
R --> S[刷新界面状态]

E --> |控制中心| T[显示控制面板]
T --> U[设备状态操作]
U --> V[发送控制指令]
V --> D

Q --> W[解析数据包]
W --> X{灯光状态变化?}
X --> || Y[更新LED图片]
X --> || Z{风扇状态变化?}
Z --> || AA[更新风扇图片]
AA --> AB[温度/湿度显示]

运行程序,首先会显示主界面,点击扫描设备就会罗列出附件的蓝牙设备(注意,需要开启电脑的蓝牙。若未开启,日志和弹窗会提示)
image-20250307162735237.png
主要可以操作以下几个功能:

  • 扫描设备
  • 选择需要连接的设备
  • 断开当前连接的设备
  • 查看连接设备的UID
  • 向连接的设备发送数据
  • 订阅连接设置中的指定UID
  • 控制中心:可以控制和查看设备的状态和数据。
    整体代码还算比较简洁吧……,main函数中就三行【狗头】,将操作和显示的内容都封装到了BluetoothApp这个类中了

    image-20250315101753988.png

功能展示图说明

以下是实际的连接图,STM32WB09KE连接了一个风扇和灯条
0c3986c45a476cee8c17d595bd56464.jpg

image.png

风扇和灯条均处于未启动的状态,可以看到上位机中都是黑色的,实物里面灯条未亮起、风扇没有转动
停止.png

风扇和灯条均处于启动的状态,可以看到上位机中已经亮起来了,实物里面灯条亮起、风扇处于转动(拍摄都有残影了)
开.png

遇到的问题

1. IDE不兼容

image-20250116203820417.png
这个问题还是比较好解决的,去官网下载最新版本的Cube IDE即可(可能这个芯片比较新,老的版本不支持)

2. 蓝牙数据无法发送


需要按照定义的数据长度来发送,必须一致!下面是对这个信息的描述(写入或通知的字节数)

image-20250323132903663.png

3.2 继电器驱动的问题


硬件设计错了,打了了两次板子,左边的是成功的,右边的是失败的image-20250323133933287.png

总结

2025贸泽电子M-Design创意设计竞赛是一次难忘的旅程,让我学习了蓝牙的通信技术和使用,以及python上位机蓝牙的开发。未来,我将继续保持对科技创新的热情,不断探索未知的世界,争取在更多的舞台上展现自我价值。




附件下载
stm32WB.zip.001
stm32WB.zip.002
stm32WB.zip.003
stm32WB.zip.004
python.zip
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号