Skip to content

温度监测系统实现案例

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

准备工作

  • 确保已经在小机云的项目中已经创建设备,且该小机云控制台上设备的MAC(需要带冒号)与蓝牙的MAC(不带冒号)号一致。即蓝牙MAC为1122334455即平台上需要创建11:22:33:44:55

  • 确保小机云设备绑定的是默认控制页(创建后默认使用该页)。控制页样式如下:

硬件结构

从机:小机云蓝牙模块,型号MB026A

主机: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. 在项目卡片中,点击设置图标,查看项目ID(ProjectId)与项目密钥(ProjectSecret)

image.png

  1. 在源码中填入上面得到的ProjectId与ProjectSecret

    c
    //xgc_cmd.c
    //填入小机云项目的ProjectId与ProjectSecret
    char project_id[] = "xxxxxxxxxxxxx";
    char project_secret[] = "xxxxxxxxxxxxxxxx";
  2. stm32的源码中默认包含KeyContent流程,需要在xgc_cmd.c的cmd_crc()函数中配置您的校验内容。如果您没有改过项目的校验方式,只需要填入ProjectId与ProjectSecret即可,蓝牙与APP连接成功后会自动进行检验

  3. 配置ProjectId和ProjectSecret后,烧录到单片机,并重启单片机。

  4. STM32相关的日志打印 STM32上电后会日志串口会收到的日志

  • 程序启动:This is a xgc ble demo
  • 复位蓝牙模块:sendCmd: AT+REBOOT=1
  • 查询MAC地址:sendCmd: AT+MAC?
  • 收到MAC回复:get mac E2E05A707F18 E2:E0:5A:70:7F:18 APP连接蓝牙后日志串口会收到的日志
  • 连接成功:is_ble_connected 1
  • 查询时间:sendCmd: $X#N&11
  • 收到时间回复:timesatmp 1737093438434
  • 向APP发送校验:sendCmd: $X#K#xxxxxxxxxxxxxxxxxx&33
  • 校验成功,核验成功后APP可以正常使用:crc ok !!!

效果测试

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:按键中断的函数

其他需要注意的事项: 该例程会在main()中调用chckBleState检查蓝牙状态,如果蓝牙已经连接,且没有拿到时间戳,会循环向蓝牙模块请求时间戳,当蓝牙与手机连接成功后,单片机即可拿到时间戳,进行下一步的与服务器检验