可恨相逢能几日,不知重会是何年。 

—— 苏轼《浣溪沙·重九旧韵》


目录

准备器材:

实验目标:

硬件感知层

数据传输层:

上位机展示:


代码在下期的文件里,之前的源文件还未压缩。

准备器材:

esp32WiFi传感器,stm32最小开发板,ds18b20体温检测触感器,max30102心率血氧触感器,oled显示器(自备,多大都可以),蜂鸣器,stlink数据传输,led小灯,小电阻,面包板。

实验目标:

在这个实验中我们要使用上述的两个开发板组合运行,然后使用我们的体温,血氧,心率传感器实时收集数据。在系统中我们设计了三个开发层:分别是硬件感知层,数据传输层,上位机的数据处理层。

首先:硬件感知层:我们通过查询硬件的数据操作手册,知道stm32最小开发板的电压无法满足esp的WiFi传输,还有两个传感器的电压要求。所以这就引出我们的第一个隐藏点:三个硬件的外接无法同时连接在stm32上。有两个解决方案,第一我们一开始就来买stm32的高级开发板,一块板用到毕业。第二是我们将esp32外接在上位机,中间使用飞线将stm32和esp的功能端口连接起来。

第二:数据传输层:我们的esp32自带WiFi传输,我们可以将上位机和esp32同时连接在一个一个局域网。我们优先使用手机的热点连接,校园网的局域网限制导致我们的esp32很容易无法识别。本手册统一采用手机热点连接硬件端和上位机。采用手机热点我们就要在电脑上搭建一个mqtt的本地栈,来中转数据。然后我们使用数据库软件来存储接受数据。基础的数据库软件都无法实时的接受数据,所以我们使用Java写一个脚本将数据实时的写入数据库,实时的时间为5ms。

第三:上位机数据展示,报警处理层:我们的前两步走通之后,就开始搭建能实时读取数据库数据的展示端口。大家可以选择微信小程序,实时的网页还有桌面端app。这里我们使用网页来展示数据和报警信号的处理。我们不需要去申请专属域名,直接在本地搭建一个个人的数据展示网页。

硬件感知层

接线:首先就是接线,我们大家将stm32的最小开发板接入上位机(个人pc),看到stlink亮起蓝色的灯即可(要提前将驱动刷入电脑,不然无法识别)。然后我们可以进行基础的点灯实验,来测试我们的代码能否烧录进去。我们可以在a1端口写上:将led小灯电压上升(亮),五秒之后电压下降(灭)加个循环。

led小灯,蜂鸣器连接,我们需要蜂鸣器的叫声来报警,led的闪烁来示警,所以我们首先连接蜂鸣器,和led小灯,然后我们通过stm32cubeide来写代码验证功能和接线是否正常。所有的硬件逻辑代码都通过stm32cubeide来编写和烧录。

ds18b20温度传感器我们第一个连接,该传感器的端口最少,只有3根线,一根是GND,一根是5V电压线连接在stm32的5v,然后就是数据传输的上下一条线,向上传输数据,向下接受指令。连接好端口之后我们就可以看到温度传感器的小灯熄灭(正常),无传输数据就是熄灭状态。

max30102的线比较多,因为这个传感器可以同时测出两种数据,心率数据和血氧数据。所以用到的端口也更多,除去GND和5V两个电源端口之外,我们还需要连接四个端口,这四个端口也是两两一组。我们接好线之后就可以看到正常的红色灯亮起。

esp32是最麻烦的,因为stm32最小开发板的端口占用过多,我们的esp32的基础供电电压不足,导致不亮,所以我们就要将esp32电压线接入到上位机来获取基础供电。然后其他的就查手册来连接端口。

上面是硬件传感器的的外接端口接线,大家一定要看清stm32的可用端口,有些端口不支持数据传输,有些是单端口(特定功能),大家打开手册就能看到。由于接线较多建议大家画一个简单的接线图,或者将那些端口对应哪个硬件的哪个端口写清楚,不然自己回搞混,后面的逻辑代码很容易写错端口。

逻辑代码:代码会打包放在文件里,代码有点长,毕竟要驱动四个硬件。大家要清楚基础流程:首先体温传感器是ds18b20,血氧心率传感器是max30102,所以需要这两个传感器同时传输数据通过esp32。所以要在数据库写入两个传感器,三个数据的定义,不然就会接收不到数据。

数据传输层:

搭建本地的mqtt通信栈,由于esp32的传输不稳定,我们不使用现成的mqtt传输软件,我们使用适配性更强的本地栈,更稳定的接收数据。这里提醒大家,我们一定要将mqtt的读取数据的间隔时间调整为和esp32的传输数据相同间隔,都是5ms(例如)。不然我们的本地栈接受数据就会少一部分且不是实时接收数据。还有就是上位机也要确保和传感器是出于同一局域网。

然后我们就开始为数据库的实时接收数据写一个自动化脚本,数据来源就写入我们的mqtt本地栈,数据录入在我们的Java编译器里。数据库的接收数据和数据定义都在数据库软件中。数据库大家就尽量放开1G左右的存储量,虽然压根用不到,大概也就是100MB最多,毕竟数据一点都不复杂,三个实体,三个数据,接收两个数据集。

上位机展示:

第一子叶:我们使用的是网站来进行实时数据的展示,网站的实时性最好,且本地网站搭建起来也是最简单。我们在网站中要实现数据的实时展示,我们可以设计三个曲线图,展示的时候就可以通过滑动这三个曲线图来看到数据的值和变化趋势。而且我们要知道三个数据折线图的横轴都是数据接受的时间,三个折线的时间轴要相同,这样我们才能看到数据在同一时间的意义。

第二子叶:我们在数据库中设计的预警阈值会将筛选出需要报警的数据,我们需要将数据实时展示在报警页面,操作员可以筛查数据来进行数据的报警处理。

第三子叶:我们可以展示数据的比例,好数据报警数据的占比。

第四子叶:我们需要展示我们全栈的连接状态,我们需要写上数据库连接状态,mqtt本地栈的连接状态,传感器的连接状态,eap32的连接状态,ds18b20的连接状态,max30102的连接状态,还有就是局域网的连接状态。传感器的连接状态大家可以将实时数据显示出来标识连接状态。

第五子叶:拓展,大家可以接入我们的对话式大模型,我们可以将数据结果,数据的占比告诉ai,可以询问ai建议,但是由于是身体健康数据,大家还是要严谨。

驱动手册:stm32官网

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐