温度监测系统实现案例 
使用小机云自定义页面,快速实现STM32+蓝牙模块的灯光控制功能
准备工作 
使用X-B01蓝牙模块,已经完成X-B01入门指引操作
确保小机云设备使用指定的控制页。目标控制页样式如下:

可使用正面两种配置方法(配置前请确认小机云网页端已经存在目标控制页,如果没有可以在页面模板中创建)
- 在设备列表中找到对应mac地址的设备,选择绑定的页面。
 - 把目标页面设置为项目的默认页面
 
硬件结构 
从机:小机云蓝牙模块,型号X-B01
主机:STM32F103C8T6核心板,如下图 
附件材料:
usb转串口:用于stm32串口打印日志到PC
stm32仿真器:stm32固件下载仿真
| STM32引脚 | 功能 | 对应界面组件 | 
|---|---|---|
| PA2 | 日志打印串口 TX | 无 | 
| PA3 | 日志打印串口 TRX | 无 | 
| PA9 | 指令通讯口TX | 无 | 
| PA10 | 指令通讯口RX | 无 | 
| PA6 | PWM1 | 灯光亮度滑动条 | 
| PA7 | PWM2 | 暂无 | 
| 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线后由此给单片机和蓝牙模块供电(注意,请连接好所有的线后再上电)
启动流程 
- 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:按键中断的函数
 
小机云