基于stm32设计的云端健康管理系统(采用阿里云物联网平台)(代码片段)

DS小龙哥 DS小龙哥     2022-10-22     811

关键词:

1. 前言

近几年随着科技的进步和智能化浪潮的到来,智能穿戴设备也在飞速火爆发展,各种健康智能手环,智能手表、智能跑鞋、智能眼镜纷纷上市,并出现了很多针对个人家庭的健康管理设备。比如: 智能血压计、智能心率检测、脂肪秤、智能体重秤等等,都带上了智能、健康各种标签。

可穿戴设备,即直接穿在身上,或是整合到用户的衣服或配件的一种便携式设备。可穿戴设备不仅仅是一种硬件设备,更是通过软件支持以及数据交互、云端交互来实现强大的功能,可穿戴设备将会对生活、感知带来很大的转变。

当前采用STM32加上各种外设传感器配合物联网平台设计一个健康管理设备,通过ESP8266+MQTT协议将数据传输到物联网平台,实现云端健康管理。

物联网平台采用阿里云,下面是设计的界面与设备的整体效果:




2. 设计需求

设备需要支持以下功能:

(1)人体温度测量
(2)运动监测、计步功能
(3)睡眠监测
(4)心率测量

STM32采集这些传感器数据之后,进行处理,在本地OLED显示屏上完成显示;再通过ESP8266将数据传递到物联网平台,完成云端数据展示。

人体温度测量超过规定阈值时、心率测量超过规定阈值、睡眠监测睡眠时长如超出8h,云端以及本地0led屏发出文字提醒并且蜂鸣器报警。

3. 硬件选型

3.1 MAX30102血氧传感器

MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块。它集成了一个红光LED和一个红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。MAX30102采用一个1.8V电源和一个独立的5.0V用于内部LED的电源,应用于可穿戴设备进行心率和血氧采集检测,佩戴于手指、耳垂和手腕等处。标准的I2C兼容的通信接口可以将采集到的数值传输给Arduino、KL25Z、51、STM32等单片机进行心率和血氧计算。此外,该芯片还可通过软件关断模块,待机电流接近为零,实现电源始终维持供电状态。

接线如下:

产品名称      MAX30102心率模块
LED峰值波长   660nm/880nm
LED供电电压   3.3~5V
检测信号类型  光反射信号(PPG)
输出信号接口   I2C接口
通信接口电压   1.8~3.3V5V(可选)

原理说明:

光溶积法: 利用人体组织在血管搏动时造成透光率不同来进行脉搏和血氧饱和度测量的;

光源: 采用对动脉血中氧合血红蛋白(Hb02)-和血红蛋白(Hb)有选择性的特定波长的发光极管透光率转化为电信号:动脉搏动充血容积委化导致够束光的透光率发生改变,此时由光电变换接收经人体组织反身光线,转变为电信号并将其放大输出。

引脚说明:

VIN:主电源电源输入端,1.8V-5V 3位焊盘:选择总线上的拉电平,取决于引脚主控电压,可选1.8V端或者3.3v端(此端包含3.3V及以上)
SCL:接IIC总线的时钟
SDA:接IIC总线的数据
NT: MAX30102芯片的中断引脚
RD: MAX30102芯片的 RED LED接地端,一般不接
IRD: MAX30102芯片的RLED接地端,一般不接
GND:接地线

PulseSensor 是一款用于脉搏心率测量的光电反射式模拟传感器。将其佩戴于手指、耳垂等处,通过导线连接可将采集到的模拟信号传输给 Arduino 等单片机用来转换为数字信号,再通过 arduino 等单片机简单计算后就可以得到心率数值,此外还可将脉搏波形通过串口上传到电脑显示波形。 PulseSensor 是一款开源硬件, 目前国外官网上已有其对应的 arduino 程序和上位机 Processing 程序, 其适用于心率方面的科学研究和教学演示,也非常适合用于二次开发。

特别提醒:传感器背面是电子元件,请不要用手指直接接触, 以免静电或汗液造成背面器件损坏。 可以在背面粘贴黑色粘扣, 正面粘贴透明膜来保护传感器。

传感器的接口一共 3 个, 如上图红框内所示。 请大家千万不要根据线的颜色来自行推测, 而要根据电路板的背面标识来分辨。
红框中的 3 根线,标有 S 的为模拟信号输出线(最左边) ; 标有+的为电源输入线(中间);标有-的为地线(最右边) 。
总结一下:
S → 脉搏信号输出(要接单片机 AD 接口)

  • → 5v(或 3.3v)电源输入
  • → GND 地

3.2 MPU6050

MPU6050特点:

(1)高性能三轴加速度+三轴陀螺仪的六轴传感器模块MPU6050芯片;

(2)可利用自带的数字运动处理器(DMP)硬件加速引擎,通过主IKC接口,向应用端输出姿态解算后的数据,使用InvenSense公司提供的运动处理资料库,实现姿态解算,降低了运动处理运算对操作系统的负荷同时大大降低了开发难度;

(3)体积小,自带温度传感器;

(4)支持IIC从机地址设置和中断;

(5)兼容3.3V/5V系统;

3.3 STM32开发板

STM32F103RCT6的芯体规格是32位,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量是48K。

3.4 ESP8266 WIFI

ESP8266是一款物联网WiFi芯片,基于ESP8266可以开发物联网串口WiFi模块,像SKYLAB的WG219/WG229专为移动设备和物联网应用设计,可将用户的物理设备连接到WiFi无线网络上,进行互联网或局域网通信,实现联网功能。

ESP8266,专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。ESP8266EX 具有的省电模式适用于各种低功耗应用场景。

ESP8266内置超低功耗 Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,支持实时操作系统 (RTOS) 和 Wi-Fi 协议栈,可将高达 80% 的处理能力留给应用编程和开发。

3.5 GY-MCU90615V2体温传感器

通信协议:

串口发送命令字节:
(1)、串口通信参数(默认波特率值9600 bps,可通过软件设定)
波特率:9600 bps     校验位:N   数据位:8   停止位:1
波特率:115200 bps   校验位:N   数据位:8   停止位:12)、模块输入命令,由外部控制器发送至GY-MCU90615模块(十六进制)

1、帧头:0xa5
指令格式:帧头+指令+校验和(8bit)(如自动读取温度指令=0xA5+0x45+0xEA2、命令指令: 
连续输出指令:
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   停止位:12)、模块输出格式,每帧包含9个字节(十六进制):
①.Byte0:   0x5A        帧头标志 
②.Byte1:   0x5A        帧头标志 
③.Byte2:   0X45        本帧数据类型(0X45:温度数据)
④.Byte3:   0x04       数据量(以下4个数据2组为例)
⑤.Byte4:   0x00~0xFF   数据18位
⑥.Byte5:   0x00~0xFF   数据18位
⑦.Byte6:   0x00~0xFF   数据28位
⑧.Byte7:   0x00~0xFF   数据28位
⑨.Byte8:   0x00~0xFF   校验和(前面数据累加和,仅留低8位) 
    
(3)、数据计算方法
温度计算方法 :
温度=8<<88位(结果为实际角度乘以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.6 OLED显示屏

特点:

OLED是有机发光二极管又称为有机激光显示、OLED显示技术具有自发光的特性、采用非常薄的有机材料涂层、和玻璃基板、当有电流通过时、这些有机材料就会发光、而且OLED显示屏幕可视角大、功耗低、OLED由于同时具备自发光、不需背光源(只是供电不会亮的、驱动程序和接线正确才会点亮)对比度高、厚度薄视角广、反应速度快、可用于挠曲面板、使用温度范围广、结构及制程等优异之特性、先接触的1286屏都是LCD的、需要背光、功耗较高、而OLED的功耗低、更加适合小系统、由于两者发光材料的不同、在不同的环境中、OLED的显示效果好、模块供电可以是3.3v也可以是5V、不需要修改模块电路、OLED屏具有多个控制指令、可以控制oLED的亮度、对比度、开关升压电路等指令、操作方便、功能丰富、可显示汉字、ASCH、图案等、同时为了方便应用在产品上、预留4个M3固定孔、方便用户固在机壳上。

3.7 母对母杜邦线

三、阿里云物联网云平台

3.1 创建产品

官网地址: https://iot.console.aliyun.com/lk/summary/new

没有账号需要先注册账号,实名认证之后登录。

(1)选择公共实例

(2)创建产品

(3)配置产品信息

3.2 创建设备

(1)点击添加设备

产品下可以创建多个具体设备,设备也可以使用接口让设备端自动创建,下面采用网页手动添加的方式,添加设备。

(2)点击添加设备

(3)填入设备的信息

(4)保存设备信息

创建成功后复制设备证书信息,方便后续生成MQTT登录参数使用。


  "ProductKey": "a1cMlEwEwjg",
  "DeviceName": "healthy_iot_dev",
  "DeviceSecret": "9203ea85a963b40ace7686d01046598f"

(5)创建成功

(6)查看设备证书信息

如果刚才没有复制保存,可以在设备详情页面查看设备证书。

3.3 创建自定义属性

云端的产品、设备创建完毕之后,那么本地具体的设备肯定会向云端设备上传数据,那上传的数据用什么字段保存,数据是什么类型,这些需要提前创建,这样约定好之后,设备端才可以正常的上传数据上来。

(1)找到功能定义选项页面

(2)添加自定义功能

根据自己传感器的数据属性添加即可。

(3)添加心率属性

(4)添加血氧饱和度属性

(5)添加人体体温属性

(5)添加行走的步数

(6)添加完毕发布上线

(4)完成

3.4 查看物模型

接下来设备端的数据上报就要参考物模型的格式来完成数据拼接。

(1)完整物模型


  "schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
  "profile": 
    "version": "1.0",
    "productKey": "a1cMlEwEwjg"
  ,
  "properties": [
    
      "identifier": "HeartRate",
      "name": "心率",
      "accessMode": "r",
      "desc": "心率",
      "required": false,
      "dataType": 
        "type": "int",
        "specs": 
          "min": "1",
          "max": "500",
          "step": "1"
        
      
    ,
    
      "identifier": "BloodOxygen",
      "name": "血氧饱和度",
      "accessMode": "rw",
      "desc": "血氧饱和度",
      "required": false,
      "dataType": 
        "type": "int",
        "specs": 
          "min": "1",
          "max": "100",
          "unit": "%",
          "unitName": "百分比",
          "step": "1"
        
      
    ,
    
      "identifier": "temperature",
      "name": "人体体温",
      "accessMode": "r",
      "desc": "人体体温",
      "required": false,
      "dataType": 
        "type": "int",
        "specs": 
          "min": "1",
          "max": "100",
          "unit": "°C",
          "unitName": "摄氏度",
          "step": "1"
        
      
    ,
    
      "identifier": "steps",
      "name": "行走步数",
      "accessMode": "r",
      "desc": "行走步数",
      "required": false,
      "dataType": 
        "type": "int",
        "specs": 
          "min": "1",
          "max": "100000",
          "unit": "stepCount",
          "unitName": "步",
          "step": "1"
        
      
    
  ],
  "events": [
    
      "identifier": "post",
      "name": "post",
      "type": "info",
      "required": true,
      "desc": "属性上报",
      "method": "thing.event.property.post",
      "outputData": [
        
          "identifier": "HeartRate",
          "name": "心率",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "500",
              "step": "1"
            
          
        ,
        
          "identifier": "BloodOxygen",
          "name": "血氧饱和度",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "100",
              "unit": "%",
              "unitName": "百分比",
              "step": "1"
            
          
        ,
        
          "identifier": "temperature",
          "name": "人体体温",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "100",
              "unit": "°C",
              "unitName": "摄氏度",
              "step": "1"
            
          
        ,
        
          "identifier": "steps",
          "name": "行走步数",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "100000",
              "unit": "stepCount",
              "unitName": "步",
              "step": "1"
            
          
        
      ]
    
  ],
  "services": [
    
      "identifier": "set",
      "name": "set",
      "required": true,
      "callType": "async",
      "desc": "属性设置",
      "method": "thing.service.property.set",
      "inputData": [
        
          "identifier": "BloodOxygen",
          "name": "血氧饱和度",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "100",
              "unit": "%",
              "unitName": "百分比",
              "step": "1"
            
          
        
      ],
      "outputData": []
    ,
    
      "identifier": "get",
      "name": "get",
      "required": true,
      "callType": "async",
      "desc": "属性获取",
      "method": "thing.service.property.get",
      "inputData": [
        "HeartRate",
        "BloodOxygen",
        "temperature",
        "steps"
      ],
      "outputData": [
        
          "identifier": "HeartRate",
          "name": "心率",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "500",
              "step": "1"
            
          
        ,
        
          "identifier": "BloodOxygen",
          "name": "血氧饱和度",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "100",
              "unit": "%",
              "unitName": "百分比",
              "step": "1"
            
          
        ,
        
          "identifier": "temperature",
          "name": "人体体温",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "100",
              "unit": "°C",
              "unitName": "摄氏度",
              "step": "1"
            
          
        ,
        
          "identifier": "steps",
          "name": "行走步数",
          "dataType": 
            "type": "int",
            "specs": 
              "min": "1",
              "max": "100000",
              "unit": "stepCount",
              "unitName": "步",
              "step": "1"
            
          
        
      ]
    
  ]

(2)精简物模型


  "properties": [
    
      "identifier": "HeartRate",
      "dataType": 
        "type": "int"
      
    ,
    
      "identifier": "BloodOxygen",
      "dataType": 
        "type": "int"
      
    ,
    
      "identifier": "temperature",
      "dataType": 基于stm32设计的健康检测设备(测温心率计步)(代码片段)

1.项目介绍本文介绍的项目是基于STM32设计的健康检测设备,支持体温测量,心率检测,支持运动计步(采用MPU6050陀螺仪实现),支持WIFI传输数据到手机APP打印显示。硬件环境介绍:MCU采用STM32F103C8T6心率传感器采用PulseSenso... 查看详情

基于阿里云物联网平台设计的实时图传系统_采用mqtt协议传输图像

一、项目功能介绍当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B... 查看详情

基于华为云设计的智能家居控制系统(stm32+esp8266)(代码片段)

1.功能介绍现在物联网已经遍布生活每个角落,几乎哪里都能看到物联网的应用。物联网就是物物相连的互联网,可以将之前单机设备全部接入互联网,完成数据交互,远程控制。比如:智能电表(远程抄表),智... 查看详情

基于华为云设计的智能家居控制系统(stm32+esp8266)(代码片段)

1.功能介绍现在物联网已经遍布生活每个角落,几乎哪里都能看到物联网的应用。物联网就是物物相连的互联网,可以将之前单机设备全部接入互联网,完成数据交互,远程控制。比如:智能电表(远程抄表),智... 查看详情

基于stm32的阿里云物联网项目实战

引言:之前自学了一些关于阿里云物联网项目的开发,收获颇丰,但是总感觉网上的东西太散了,需要自己去不停的收集整理,于是在项目结束后决心自己写一篇比较具有实用性的指导文档,需要声明的是... 查看详情

基于stm32设计的智慧路灯(太阳能+华为云iot)(代码片段)

1.前言随着工业和城市的快速发展,道路照明系统的产业也在迅速发展,并趋于复杂化,为了更经济地控制和维护复杂的路灯系统,市面上各大科技公司开发了各种路灯控制系统,并且路灯都连上物联网云端,... 查看详情

基于stm32设计的蓝牙健康管理设备(代码片段)

1.前言随着移动通信技术的发展,移动互联网日益普及,传统互联网已经在向移动互联网迁移,智能穿戴设备近年来发展的非常迅速,成为一个热点行业,它通过借助传感器,与人体进行信息交互,是一种在新理念下诞生的智能... 查看详情

基于stm32设计的蓝牙健康管理设备(代码片段)

1.前言随着移动通信技术的发展,移动互联网日益普及,传统互联网已经在向移动互联网迁移,智能穿戴设备近年来发展的非常迅速,成为一个热点行业,它通过借助传感器,与人体进行信息交互,是... 查看详情

基于stm32和阿里云的环境检测系统设计

一、主要实现功能1、STM32采集温湿度,二氧化碳浓度在本地OLED进行数据显示2、STM32通过串口将数据发送给ESP8266,然后将数据上传到阿里云3、手机app进行远程查看数据+远程控制开关的打开状态4、温度高于设置的阈值... 查看详情

基于stm32和阿里云的环境检测系统设计

一、主要实现功能1、STM32采集温湿度,二氧化碳浓度在本地OLED进行数据显示2、STM32通过串口将数据发送给ESP8266,然后将数据上传到阿里云3、手机app进行远程查看数据+远程控制开关的打开状态4、温度高于设置的阈值... 查看详情

基于stm32腾讯云物联网平台和微信小程序应用

...er)是面向智慧生活与产业互联应用的物联网PaaS平台,为基于物联网的各行业设备制造商、方案商及应用开发商提供一站式设备智能化服务。平台提供海量设备连接与管理能力及基于腾讯连连的小程序应用开发能力,并打通腾讯... 查看详情

智慧农业:stm32f103ze+esp8266+腾讯云物联网平台+微信小程序设计

一、环境介绍单片机采用:STM32F103ZET6上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可。比如:GSM模块、有线网卡等。与物联网云平台的通信协议:  标准MQTT协议3.1.1(TCP)开发软件:keil5物联网平台:腾... 查看详情

基于stm32的数显温度计设计

一、设计目的利用STM32完成数显温度计的制作,功能包括实时温度显示(摄氏度与华氏度),高温与低温报警,以及温区设置。二、设计方案系统采用STM2F103C8T6芯片实现,温度传感器采用DS18B20与LM335,显示采... 查看详情

基于stm32的数显温度计设计

一、设计目的利用STM32完成数显温度计的制作,功能包括实时温度显示(摄氏度与华氏度),高温与低温报警,以及温区设置。二、设计方案系统采用STM2F103C8T6芯片实现,温度传感器采用DS18B20与LM335,显示采... 查看详情

基于stm32水温炉温温度控制系统电路设计-分享(代码片段)

(1)、主控制器采用STM32单片机(2)、必须要有温度检测装置,采用DS18B20(3)、要有加热装置,采用220V交流电供电(4)、要能够设置报警的温度上限值以及温度加热的下限值(5)、要有声光报警装置,用于报警温度上限(6)、要... 查看详情

物联网云端对接-2通过mqtt协议与阿里云物联网套件进行云端通信

 在《程序员》杂志2017.4刊上,曾写过一篇《微软百度阿里三大物联网平台探析》,上面曾介绍了阿里云物联网套件的一些内容,在写该篇文章的时候,凌霄物联网网关还无法对接到此平台(TLS必须1.1版本以上)。但是随着阿... 查看详情

基于onenet平台设计的多节点温度采集系统-有人云4g模块+stm32(代码片段)

一、设计说明设计思路:每个测量点采用4G+STM32+温度测量模块组成;采集温度数据之后直接上传到OneNet物联网云平台,在OneNET云平台上设计可视化界面进行显示,并且也可以在手机APP设备云上显示。当前采用的物联网平台是OneNET... 查看详情

基于stm32+华为云iot设计的酒驾监控系统(代码片段)

1.前言随着人们生活水平的提高,为了减少和杜绝车的现象越来越多,所引发的交通事故也引起了人们的重视,为了减少和杜绝酒后驾车导致事故发生,当前设计了一种安装在驾驶室内,能根据具体功能进行鉴... 查看详情