整体框架
本系统的设计理念共分为三个层面,分别是感知层,传输层和应用层。以精确检测人体基本健康指标数据并记录为目的出发,本系统选择了HX711等一系列具有优质功能的芯片,在充分了解其工作原理并学习设计应用这些传感器后,获得了体重、高低血压、血氧、脉搏、体温和身高数据;在获得数据后,本系统选择了低功耗的STM32F103和STM32F407来进行数据的初步处理和传输,并通过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)中取出用户的身体健康数据并且渲染在前端页面上,并且该数据库管理系统还可以绘制相关数据的折线图。
系统全家福
附在最后
(づ ̄3 ̄)づ╭❤~一键三连,这次一定(๑•̀ㅂ•́)و✧