实现思路及部分代码MPU6050+HC-SR04=>身高

STM32F407标准库结合MPU6050和HC-SR04测距(应用到身高测量)

串口获取不定长数据

HAL库下串口接收不定长数据时轮询、中断方式比较.

Python获取EMQ服务器主题中的数据并写入MySQL数据库

win10环境下Python获取EMQ服务器主题中的数据并写入MySQL数据库.

摘要

为满足家居生活中检测身体健康状况的需求,鉴于现有的健康检测系统具有使用环境局限性大、测试指标不够完善、不能联网等缺点,本系统从物联网感知出发,利用MQTT传输协议实现了健康检测数据传输无线化,大大减小了装置体积的同时实现家庭互联;使用陀螺仪和超声波结合的方法测试身高,解决身高测试受设备限制的问题;自主设计的系统手臂结构集成血压,脉搏,血氧和体温传感器,实现装置结构的简洁化和高集成度。 本系统综合MySQL数据库、微控制器技术,3维数字建模等相关知识,集成多种嵌入式传感器,构建了一个感知身体健康状况的健康测量系统,经测试,该系统具有良好的稳定性和高效性。

整体框架


本系统的设计理念共分为三个层面,分别是感知层,传输层和应用层。以精确检测人体基本健康指标数据并记录为目的出发,本系统选择了HX711等一系列具有优质功能的芯片,在充分了解其工作原理并学习设计应用这些传感器后,获得了体重、高低血压、血氧、脉搏、体温和身高数据;在获得数据后,本系统选择了低功耗的STM32F103STM32F407来进行数据的初步处理和传输,并通过ESP8266连接上路由器网关后用 MQTT协议(Message Queuing Telemetry Transport,消息队列遥测传输)将健康数据传输到EMQ(Erlang/Enterprise/Elastic MQTT Broker)服务器上,后端Python程序会从EMQ服务器对应主题中取出数据并对数据进行整合分析后存入数据库中,最后前端程序会将数据库中的数据渲染在PC端的网页上,而且有数据折现图能让用户清楚了解自己的身体状况变化情况。

物联网模型感知层手臂子系统

图片

电路原理图

数据处理
当手臂子系统上电开启之后,STM32F103进行初始化并开始主循环,主循环内先判断选择模式按钮是否按下。如果没有按下,则轮询UART1和UART2,接收温度模块以及血氧模块的数据进行处理并规整格式后通过UART1发送给ESP8266。如果判断到选择模式按钮按下,停止发送温度数据和血氧数,开始轮询UART3血压模块的数据进行处理并规整格式后通过UART1发送给ESP8266,当血压模块数据感知完毕并且由ESP8266通过路由器发送给EMQ服务器之后,重新开启UART1和UART2的轮询和数据发送。

手持子系统

图片

电路原理图

数据处理
因为整个系统的数据需要传输到后端数据库中,而数据入库需要ID索引,而且数据入库的时机也应该由用户来决定,因此手持子系统同样也需要一块ESP8266,将ID数据,write_enable(是否写入数据库标志位)和身高数据发送到服务器中,当后端python程序在EMQ服务器中取到身高和ID数据之后就将该数据写入程序里的字典中,当程序接收到的write_enable变量为1的时候将字典中的数据写入数据库中。工作流程图如下:

体重子系统

图片

电路原理图


数据处理
当体重子系统上电启动之后,STM32F103进行初始化并接收到初始毛皮重量,主循环内接受到新的体重数据减去初始毛皮重量,数据处理后通过UART1发送给ESP8266,由ESP8266通过路由器将数据发送至EMQ服务器。

传输层

本系统的ESP8266是通过本地路由器的方式来连接网络的,首先需要对ESP8266进行配网,具体操作流程是使用连上了网络的手机扫描配网二维码,然后ESP8266的配置程序就可以使ESP8266手机连上同一个网络了,至此完成了ESP8266的配网操作,完成了该操作之后,ESP8266就可以通过本地路由器连接上网络。完成ESP8266的网络配置之后,在mqtt_config.h头文件里面配置好EMQ服务器的地址以及三个子系统广播数据的主题,在user_main.c文件里面配置好串口接收的波特率9600之后,ESP8266就可以接收到各个子系统里面的主控发送给ESP8266的数据在EMQ服务器中进行广播了。

应用层

Python后端程序会不停的在PC后台运行,并对EMQ服务器中正在广播的数据进行一个获取。具体方案就是Python脚本先导入PyMySQL和paho.mqtt.client这2个关键的库,pymysql支持python的数据库操作,paho.mqtt.client支持python在EMQ服务器中捕捉相应主题下面广播的数据,在导入这2个包和一些必要的开发包之后在主函数里面开3个线程,分别在服务器的height_pub,weight_pub,lzhpub主题中获取感知层中各个ESP8266通过路由器发送的数据

除了舒张压,收缩压,脉搏之外,其他的数据是一直在服务器中进行广播的,因此只要遇到手持子系统发送的write_enable为1时,python脚本就会将数据写入数据库中,而血压和脉搏模块则是在接收到数据时,python脚本就会将其写入数据库中,程序如下图示:


web页面显示
本系统使用的数据库管理系统每隔1s将数据库中的数据渲染到PC端的web网页上。为了简化前端的操作,本系统在PC机上建立了本地数据库,前端会从本地数据库(localhost)中取出用户的身体健康数据并且渲染在前端页面上,并且该数据库管理系统还可以绘制相关数据的折线图。

软硬件实物图