Skip to content

温度监测系统实现案例

使用小机云自定义页面,快速实现STM32+蓝牙模块的灯光控制功能

准备工作

  • 使用X-B01蓝牙模块,已经完成X-B01入门指引操作

  • 确保小机云设备使用指定的控制页。目标控制页样式如下:

可使用正面两种配置方法(配置前请确认小机云网页端已经存在目标控制页,如果没有可以在页面模板中创建)

  1. 在设备列表中找到对应mac地址的设备,选择绑定的页面。
  2. 把目标页面设置为项目的默认页面

硬件结构

从机:小机云蓝牙模块,型号X-B01

主机:STM32F103C8T6核心板,如下图

附件材料:

  • usb转串口:用于stm32串口打印日志到PC

  • stm32仿真器:stm32固件下载仿真

STM32引脚功能对应界面组件
PA2日志打印串口 TX
PA3日志打印串口 TRX
PA9指令通讯口TX
PA10指令通讯口RX
PA6PWM1灯光亮度滑动条
PA7PWM2暂无
PB3控制IO灯光选择1(红灯)
PB4控制IO灯光选择2(绿灯)
PB5控制IO灯光选择3(蓝灯)
PB6中断阀门1
PB7中断阀门2
PB8控制IO开关1
PB9控制IO开关2
PC13状态

接线

电脑使用串口工具与STM32 PA2/3连接,查看STM32运行日志

STM32引脚PA9/10与蓝牙模块 RX/TX 连接

STM32核心板的3.3V和G分别连接蓝牙模块的3.3V和GND

使用仿真器连接STM32的GND,SWCLK,SWO,3V3

仿真器插入USB线后由此给单片机和蓝牙模块供电(注意,请连接好所有的线后再上电)

启动流程

  1. STM32上电后会日志串口会收到的日志
c
- 程序启动:This is a xgc ble demo 
- 复位蓝牙模块:sendCmd: AT+REBOOT=1
- 模块启动成功:RECV--->+READY
- 查询MAC地址:sendCmd: AT+MAC?
- 收到MAC回复:get mac E2E05A707F18
- 查询模块是否已经配置项目信息:send_cmd: AT+PID?
- 返回是否已经配置项目信息:is_module_project_id_empty 0  //0表示模块项目信息不为空

  APP连接蓝牙后日志串口会收到的日志
- 连接成功:is_ble_connected 1
- 校验成功:crc ok !!!    //核验成功后APP可以正常使用

效果测试

APP与蓝牙连接成功后

点击APP的开关1,PB8会有状态变化

点击APP的开关2,PB9会有状态变化

拖动灯光亮度条后,PA6 PWM有变化

STM32的PB6/PB7 IO高电平中断后APP指示灯组件会有变化

点击通道选择,引脚PB3,4,5状态会变化

点击方向键的OK键,日志打印串口会有ok button down日志打印

STM32会模拟温度数据,您也可以看到APP温度值的变化

源码分析

重要的两个文件,更多具体的内容请看源码,源码有详细的注释

xgc_handler.c:收到APP指令后的解析处理工作

xgc_cmd.c:小机云常用的文本协议指令

xgc_at_handler.c:蓝牙模块AT指令入处理

xgc_at_cmd.c:蓝牙模块AT指令

如何快速迁移至其他平台

如果您需要把STM32的源码迁移到其他C语言的硬件平台,如Ardurino。您可以直接使用STM32 demo项目下USER/application的源码,所有主要的小机云服务和蓝牙模块的交互逻辑都在application目录下。您只需要实现几个硬件相关的函数即可迁移成功。 必要实现的函数:

  • USART1_IRQHandler: 串口接收函数,主要用来接收小机云服务协议和蓝牙模块协议,接收到的内容交给parse函数处理。
  • sendCmd:向蓝牙模块串口发送数据的函数

根据项目需求实现或留空的函数:

  • LED8,LED9,LEDR,LEDG,LEDB:设置LED的函数,这个几是#define
  • getPB6Leve,getPB7Leve:获取LED电平的函数
  • set_led_brightness:设置LED pwm亮度的函数
  • key_callback:按键中断的函数