当前位置:网站首页>基于STM32设计的蓝牙健康管理设备
基于STM32设计的蓝牙健康管理设备
2022-06-27 09:25:00 【InfoQ】
1. 前言


2. 功能总结
3. 硬件选型
3.1 MPU6050陀螺仪

3.2 STM32开发板

3.3 母对母杜邦线

3.4 温度传感器

通信协议
串口发送命令字节:
(1)、串口通信参数(默认波特率值9600 bps,可通过软件设定)
波特率:9600 bps 校验位:N 数据位:8 停止位:1
波特率:115200 bps 校验位:N 数据位:8 停止位:1
(2)、模块输入命令,由外部控制器发送至GY-MCU90615模块(十六进制)
1、帧头:0xa5
指令格式:帧头+指令+校验和(8bit)(如自动读取温度指令=0xA5+0x45+0xEA)
2、命令指令:
连续输出指令:0xA5+0x45+0xEA----------------温度数据(模块返回数据类型为0x45)
查询输出指令:
0xA5+0x15+0xBA ---------------温度数据(模块返回数据类型为0x45)
配置指令:(掉电重启后生效)
波特率配置:
0xA5+0xAE+0x53 ---------------9600(默认)
0xA5+0xAF+0x54 ---------------115200
上电是否自动发送温度数据配置:
0xA5+0x51+0xF6---------------上电后自动输出温度数据(默认)
0xA5+0x52+0xF7---------------上电后不自动输出温度数据
通信协议
串口接收:
(1)、串口通信参数(默认波特率值9600 bps,可通过软件设定)
波特率:9600 bps 校验位:N 数据位:8 停止位:1
波特率:115200 bps 校验位:N 数据位:8 停止位:1
(2)、模块输出格式,每帧包含9个字节(十六进制):
①.Byte0: 0x5A 帧头标志
②.Byte1: 0x5A 帧头标志
③.Byte2: 0X45 本帧数据类型(0X45:温度数据)
④.Byte3: 0x04 数据量(以下4个数据2组为例)
⑤.Byte4: 0x00~0xFF 数据1高8位
⑥.Byte5: 0x00~0xFF 数据1低8位
⑦.Byte6: 0x00~0xFF 数据2高8位
⑧.Byte7: 0x00~0xFF 数据2低8位
⑨.Byte8: 0x00~0xFF 校验和(前面数据累加和,仅留低8位)
(3)、数据计算方法
温度计算方法 :
温度= 高8位<<8 低8位(结果为实际角度乘以100)
例:发送指令:A5 45 EA ,接收到一帧数据:
<5A- 5A- 45- 04- 0C- 78- 0D- 19- A7 >
表示TO(有符号16bit,表示目标温度):TO=0x0C78/100=31.92 ℃
表示TA(有符号16bit,表示环境温度):TO=0x0D19/100=33.53 ℃
使用方法
该模块为串口输出数据,使用者通过串口连接后,发送输出指令,例如0xA5+0x45+0xEA给模块,模块将连续输出温度数据;如想通过查询输出可发送0xA5+0x15+0xBA给模块,每发送一次,模块将返回一次温度数据,查询频率应低于10hz,如需高于10hz请使用连续输出模式,即发送0xA5+0x45+0xEA指令;
3.5 脉搏传感器



3.6 PCB洞洞板

3.7 BLE低功耗蓝牙模块

4. 上位机程序设计
4.1 开发环境






4.2 设计效果

5. STM32开发
5.1 硬件接线
本设计的硬件接线说明:
(1)BLE低功耗蓝牙模块
PA2(TX)--RXD 模块接收脚
PA3(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V)
(2)红外测温模块
PB10(TX)--RXD 模块接收脚
PB11(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V)
(3)MPU6050陀螺仪
1 VCC 3.3V/5V 电源输入 ---->接3.3V
2 GND 地线 --->接GND
3 IIC_SDA IIC 通信数据线 -->PB6
4 IIC_SCL IIC 通信时钟线 -->PB7
5 MPU_INT 中断输出引脚 ---->未接
6 MPU_AD0 IIC 从机地址设置引脚-->未接
AD0引脚说明:ID=0X68(悬空/接 GND) ID=0X69(接 VCC)
(4)心率检测模块
PA1---心率模块的DAT输出脚
GND---GND 地
VCC---VCC 电源(3.3V)
(--)板载LED灯:低电平亮
LED1--PC13
BEEP2--PC14
(--)板载按键:
KEY1--PA0 按下为高电平
5.2 程序下载

5.3 系统原理图

5.4 keil工程


5.5 功能代码
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include <string.h>
#include <stdlib.h>
#include "timer.h"
#include "adc.h"
#include "mpu6050.h"
/*---------心率相关的数据值---------------*/
extern int IBI; //相邻节拍时间
extern int BPM; //心率值
extern int Signal; //原始信号值
extern unsigned char QS; //发现心跳标志
short aacx,aacy,aacz; //加速度传感器原始数据
short gyrox,gyroy,gyroz; //陀螺仪原始数据
float TO=0; //红外测温温度-目标温度
float TA=0; //红外测温温度-物体温度
//蓝牙发送缓冲区
u8 BLE_TX_BUFF[100];
/*
主函数: 程序执行的入口
*/
int main(void)
{
u32 i=0;
u8 key_val;
u32 wifi_TimeCnt=0;
JTAG_Set();
USART1_Init(115200); //串口1的初始化
USART2_Init(9600); //串口-蓝牙
TIMER2_Init(72,20000); //超时时间20ms
USART3_Init(9600); //串口-红外线测温模块
TIMER3_Init(36,20000); //超时时间20ms
//板载按键初始化
KEY_Init();
//板载LED灯初始化
LED_Init();
//ADC初始化
ADC_Init();
//超时时间2ms
TIMER1_Init(72,2000);
//初始化MPU6050
while(MPU6050_Init())
{
printf("三轴加速度计、陀螺仪初始化失败!\r\n");
DelayMs(1000);
}
printf("系统工作正常..\r\n");
while(1)
{
//板载按键检测
key_val=KEY_GetValue();
if(key_val)
{
printf("按键按下...\r\n");
}
//时间记录
DelayMs(10);
wifi_TimeCnt++;
if(wifi_TimeCnt>=100) //1000毫秒一次
{
wifi_TimeCnt=0;
LED1=!LED1;
MPU6050_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪原始数据
MPU6050_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度传感器数据
printf("三轴陀螺仪:x=%d y=%d z=%d\r\n",gyrox,gyroy,gyroz);
printf("三轴加速度:x=%d y=%d z=%d\r\n",aacx,aacy,aacz);
printf("(心率)BPM=%d\r\n",BPM);
//向蓝牙发送数据,发送给上位机
//例如: update,12,13,14,15,20.5
//分别表示:加速度X轴,加速度Y轴,加速度Z轴,心率、体温
sprintf((char*)BLE_TX_BUFF,"update,%d,%d,%d,%d,%f",aacx,aacy,aacz,BPM,TO);
USARTx_StringSend(USART2,(char*)BLE_TX_BUFF);
}
// 接收蓝牙返回的数据
if(USART2_RX_FLAG)
{
USART2_RX_BUFFER[USART2_RX_CNT]='\0';
printf("蓝牙收到数据:\r\n");
//向串口打印服务器返回的数据
for(i=0;i<USART2_RX_CNT;i++)
{
printf("%c",USART2_RX_BUFFER[i]);
}
USART2_RX_CNT=0;
USART2_RX_FLAG=0;
}
//实时接收红外测温模块收到的数据
if(USART3_RX_FLAG)
{
printf("\r\n红外测温开始:");
for(i=0;i<USART3_RX_CNT;i++)
{
printf("%#x ",USART3_RX_BUFFER[i]);
}
printf("红外测温结束.\r\n");
u8 sum=0,i=0;
for(sum=0,i=0;i<(USART3_RX_BUFFER[3]+4);i++)
{
sum+=USART3_RX_BUFFER[i];
}
/*
温度计算方法 :
温度=高 8 位<<8|低 8 位(结果为实际角度乘以 100)
例:发送指令: A5 45 EA ,接收到一帧数据: <5A- 5A- 45- 04- 0C- 78- 0D- 19- A7 >
表示 TO(有符号 16bit,表示目标温度): TO=0x0C78/100=31.92 ℃
表示 TA(有符号 16bit,表示环境温度): TO=0x0D19/100=33.53 ℃
*/
if(sum==USART3_RX_BUFFER[i])//校验和判断
{
TO=(float)((USART3_RX_BUFFER[4]<<8)|USART3_RX_BUFFER[5])/100.0; //得到真实温度
TA=(float)((USART3_RX_BUFFER[6]<<8)|USART3_RX_BUFFER[7])/100.0; //得到真实温度
}
printf("TO: %f\r\n",TO);
printf("TA: %f\r\n",TA);
memset(USART3_RX_BUFFER,0,sizeof(USART3_RX_BUFFER));
USART3_RX_CNT=0;
USART3_RX_FLAG=0;
}
}
}
边栏推荐
- 队列,双向队列,及其运用
- Use CAS to complete concurrent operations with atomic variables
- E+H二次表维修PH变送器二次显示仪修理CPM253-MR0005
- June 26, 2022 (LC 6100 counts the number of ways to place houses)
- vector::data() 指针使用细节
- Reading and writing Apache poi
- Some considerations on operation / method overloading for thread to release lock resources
- Video file too large? Use ffmpeg to compress it losslessly
- [system design] proximity service
- 数据类型占内存大小?LongVsObject
猜你喜欢

Installation and usage of source insight tool

有關二叉樹的一些練習題

数字IC-1.9 吃透通信协议中状态机的代码编写套路

Installation and use of SVN version controller

Obsidian 一周使用心得(配置、主题和插件)

When multiple network devices exist, how to configure their Internet access priority?

VIM from dislike to dependence (20) -- global command

Rough reading DS transunet: dual swing transformer u-net for medical image segmentation

Semi-supervised Learning入门学习——Π-Model、Temporal Ensembling、Mean Teacher简介

2022.06.26 (LC Luo 6101 Luo determines whether the matrix is an X matrix)
随机推荐
我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!
Digital ic-1.9 understands the coding routine of state machine in communication protocol
Advanced mathematics Chapter 7 differential equations
The largest rectangle in the bar graph of force buckle 84
视频文件太大?使用FFmpeg来无损压缩它
this,构造器,静态,之间调用,必须搞懂啊!
Rough reading DS transunet: dual swing transformer u-net for medical image segmentation
Installation and usage of source insight tool
How Oracle converts strings to multiple lines
【mysql篇-基础篇】通用语法1
Pakistani security forces killed 7 terrorists in anti-terrorism operation
不容置疑,这是一个绝对精心制作的项目
借助原子变量,使用CAS完成并发操作
Prometheus alarm process and related time parameter description
Introduction to websocket protocol
Enumeration? Constructor? Interview demo
RockerMQ消息发送模式
[diffusion model]
Obsidian 一周使用心得(配置、主题和插件)
openpyxl表格读取实例