资讯详情

使用ESP32 + HaaS Python打造运动心率检测系统 云上实时守护运动健康

?? 在当今社会,人们经常通过跑步和其他运动来锻炼。适当的运动可以提高免疫力,促进身心健康。 然而,无论是跑步还是其他健身运动,过度运动都会对身体造成伤害,甚至导致休克、猝死等严重后果。

?? 心率是判断运动是否过度的重要指标。方便使用心率检测系统的设备可以实时检测心率,心率值和心电图可以在网页上动态显示,供运动员参考,并在心率过快(超过设定的阀门值)时通过报警提醒运动员注意保护。

?? 本课程介绍了如何构建心率检测系统。

?? 心率是人们每分钟心跳的次数,一般人在安静的情况下是 每分钟60~100次。运动时,人的心跳会加速。这时候叫运动心率,一般每分钟100~150次。如果超过150次/分钟,人就会胸闷,心悸需要停下来休息。

?? 运动时心率控制可参考以下公式:

  • (220─现在年龄)×0.8=最大运动心率
  • (220─现在年龄)×0.6=最小运动心率

?? 本场景的示意图如下图所示,场景设计如下:

  1. 心率的大小由心率传感器测量
  2. 当心率在控制范围内时,绿灯按心率闪烁
  3. 当心率低于最小运动心率时,蓝灯按心率闪烁
  4. 当心率高于最大运动心率时,红灯按心率闪烁,打开蜂鸣器发出警报

准备

?? 本案例需要以下硬件:

  • ESP32一台
  • MK002508心率传感器
  • RGB三色LED灯一个
  • Micro-USB数据线一条
  • 蜂鸣器一个
  • 杜邦线若干

硬件连线图

?? 如下图所示:硬件连线图:

开发物联网平台

开放公共实例

?? 对于第一次使用物联网平台的读者,需要打开使用物联网平台功能的实例。免费公共实例可用于开发。

?? 在物联网平台中,左上角选择华东2-上海,点击公共实例即可打开。

?? 开通物联网平台功能之后,需要完成下面的4个步骤完成云端设备的设定:

  1. 创建云产品
  2. 创建产品属性(物模型)
  3. 创建云设备(获取三元组)
  4. 多设备场景联动设置

创建云产品

?? 点击上图中的公共实例进入控制台创建产品。然后点击创建产品按钮,如下图所示。

?? 如下图所示,在新产品设置页面上设置产品名称,选择自定义类别,节点类型选择直接连接设备,网络模式选择Wi-Fi数据格式选择ICA标准数据格式,默认设置检验类型和认证方法。您还可以根据开发者自己的需要在产品描述页面添加产品描述。

?? 选择后,单击确认按钮完成产品创建。返回产品页面后,您可以看到新创建的心率检测装置产品将出现在产品类别表中,如下图所示。

创建产品属性(物模型)

?? 点击上图中的查看按钮,即可查看产品信息,Topic与产品相关的功能设置,如列表、功能定义、数据分析等。点击功能定义标签页,可以看到设备模型的定义。

?? 标识符是设备端上报设备属性状态的信息中需要使用的标识符,只有当设备上报的属性内容符合数据定义中的数据值范围时,才会被物联网平台记录下来,否则会被物联网平台认定为非法属性并过滤掉。

?? 本节我们选择创建自定义物模型的方式来创建此系统需要的物模型信息,点击上图中的”编辑草稿“按钮。然后按照下图的步骤,选择添加自定义功能。

?? 然后根据下图选择心率大小和蜂鸣器属性添加。

  • 心率大小

  • 蜂鸣器

?? 产品及其对象模型创建完成后,点击发布按钮,按照系统提示逐步发布刚创建的对象模型属性.

创建云设备(获取三元组)

?? 点击产品列表页面中的管理设备,进入设备管理页面。

?? 点击添加设备按钮,如下图所示。

?? 设置添加设备页面deviceName开发人员可以填写他们想要设置的设备名称,或者让系统自动生成设备名称,如下图所示。

?? 添加设备后,点击查看按钮,查看设备端的详细信息。

?? 有两种信息需要与设备端开发相匹配:

  1. 三元组
  2. 物体模型属性信息

?? 如上图所示,点击查看按钮可以看到设备的三元组信息。三元组是物联网设备端与物联网云设备相关的唯一标识符。当设备端连接到云时,将使用三元组信息和云进行识别。识别通过后,云将认为设备已被激活并在线。

?? 设备的所有属性信息、设备时间报告和设备服务呼叫都可以在设备详细信息页面的物体模型数据标签页面上看到,如下图所示。当物联网设备根据设备属性对应的标识符报告设备属性时,本图中的心率大小属性值将显示设备的最新属性信息。

创建产品和设备的过程是根据面向对象的想法设计的,其中创建产品可以看作是一个新的类别,物体模型是类别的对象,创建设备是类别的实例。

?? 在本产品的物型中有一个bool类型属性,命名为"蜂鸣器",代表是否打开蜂鸣器。

?? 实现控制逻辑有两种方法:

  1. 使用物联网平台的规则引擎功能
  2. 使用IoT Studio业务逻辑功能

?? 接下来,本节开始介绍使用物联网平台的规则引擎来设置控制逻辑。

?? 按照下图所示的步骤创建场景联动的规则:

?? 点击创建规则后,填写场景规则名称。在这里,我们首先创建第一个心率过快开蜂鸣器的规则。

?? 规则创建完成后,等待几秒钟系统会自动跳转到规则编辑页面,这里需要配置如下两步完整一整条规则的创建:

  1. 心率检测系统设置了触发器"如下图所示,当属性高于150时的执行,如下图所示

  1. 设置执行动作"为控制设备打开蜂鸣器属性

?? 创建了心率过快开蜂鸣器的场景联动规则。

?? 创建规则后,单击场景联动页面中规则后面的启动按钮,设置的规则就会运行。

设备端开发

开发环境

?? 下一步前请确保ESP32开发环境已建成。详情请参考esp开发环境的说明。

创建解决方案

?? 点击下图中的"快速开始"按键(

)会弹出HaaS Studio欢迎页面,请点击创建项目按钮。

?? 在随后的弹框中设置项目名称(heartrate_detector工作区路径后,选择硬件类型nodemcu32s,点击立即创建Python轻应用解决方案。

?? 下载设备端代码并解压,覆盖解压后的所有脚本heartrate_detector工程目录下的原始文件。main.py如下图所示:

?? 然后对main.py内容需要完成以下三个部分码修改。

Python脚本的详细说明请参考脚本内嵌的文字版注释

  1.    修改heartrate_detector工程里main.py中wifiSsid和wifiPassword的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在""符号中间)。
# Wi-Fi SSID和Password设置
wifiSsid = "请填写您的路由器名称"
wifiPassword = "请填写您的路由器密码"

   修改完成之后get_wifi_status函数中的wlan.connect(wifiSsid, wifiPassword)语句就会连接读者自己设定的路由器。

   修改heartrate_detector工程里main.py中productKey、deviceName和deviceSecret的值为读者创建的物联网设备的三元组信息,如下图所示:

# 三元组信息
productKey = "产品密钥"
deviceName = "设备名称"
deviceSecret = "设备密钥"

   heartrate_detector工程里main.py中下面的代码实现的是上传心率大小到云端的功能。其中HeartRate便是心率大小上报时所用的标识符。

# 上传心率到物联网平台
def upload_heartbeat():
    global device, heartbeatdev
    while True:
        # 生成上报到物联网平台的属性值
        value = getBPM()
        prop = ujson.dumps({
            'HeartRate': value
            })
        print('uploading data: ', prop)
        # 上传心率值到物联网平台
        upload_data = {'params': prop}
        device.postProps(upload_data)
        utime.sleep(2)

   确保这个标识符和物联网产品的物模型中属性标识符是一样的,如下图所示:

  

  • 新增一个变量用来控制蜂鸣器对应的GPIO
# 蜂鸣器控制变量
buzzeron =0
  • 新增函数处理云端信息并控制GPIO的接口
# 设置props 事件接收函数(当云平台向设备下发属性时)
def on_props(request):
    global buzzeron
    payload = ujson.loads(request['params'])
    # 获取dict状态字段
    if "Buzzer" in payload.keys():
        buzzeron = payload["Buzzer"]
        if(buzzeron):
            print("打开蜂鸣器")
    buzzerobj.write(buzzeron)      # 控制蜂蜜器
    # 要将更改后的状态同步上报到云平台
    prop = ujson.dumps({
        'Buzzer': buzzeron,
    })
    upload_data = {'params': prop}
    # 上报蜂鸣器属性到云端
    device.postProps(upload_data)

运行结果

   推送此脚本到ESP32之后,运行此脚本,ESP32串口会周期性的打印如下日志。其中:

  • “物联网平台连接成功” 代表成功连接到物联网平台
  • "uploading data:"之后跟着的为设备端向云端发布的心率大小属性信息,其中HeartRate后面的数值为心率大小,单位:BPM。
  • 设备端解析到云端送下来的控制指令包含“{"Buzzer":1}”之后会打印"打开蜂鸣器"并打开蜂鸣器
==== python file check /data/pyamp/main.py ====
 ==== python execute from /data/pyamp/main.py ====
voice inited!
led inited!
buzzer inited!
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
('192.168.43.45', '255.255.255.0', '192.168.43.1', '192.168.43.1')
establish tcp connection with server(host='gv4cuThyf0j.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
sleep for 1 s
sleep for 1 s
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
sleep for 1 s
物联网平台连接成功
sleep for 2s
sleep for 2s before start heartbeatsensor
heartbeat inited!
uploading data:  {"HeartRate": 0}
uploading data:  {"HeartRate": 108.1081}
uploading data:  {"HeartRate": 108.2056}
uploading data:  {"HeartRate": 113.0476}
uploading data:  {"HeartRate": 133.6303}
uploading data:  {"HeartRate": 167.364}
打开蜂鸣器
uploading data:  {"HeartRate": 159.7869}
打开蜂鸣器
uploading data:  {"HeartRate": 96.19239}
uploading data:  {"HeartRate": 94.71192}
uploading data:  {"HeartRate": 95.27591}
uploading data:  {"HeartRate": 94.45101}
uploading data:  {"HeartRate": 94.48819}
uploading data:  {"HeartRate": 94.78673}
uploading data:  {"HeartRate": 94.63722}
uploading data:  {"HeartRate": 95.42744}

   传感器默认返回心率230左右,将手指轻按在心率传感器上后,可测出实际心率。

开发板实际效果如下:

  • 在心率高于150BPM时,可以看到日志中出现"打开蜂鸣器"的字样,伴随着蜂鸣器打开,红色LED灯闪烁
  • 心率在100和150BPM之间时,绿色LED灯闪烁
  • 心率在低于100BPM之间时,蓝色LED灯闪烁

物联网平台端设备信息查看

   物联网设备的系统启动成功并连接到物联网平台之后,物联网平台上对应的设备状态会从”未激活状态“变为”上线“,在物模型数据标签页上会显示设备上报到物联网平台的属性值。

   将手指放在传感器上,传感器测量心率上报,物联网平台的物模型数据会更新为设备上报的最新的属性值。

物联网应用开发

   如果能够将心率数据通过网页的形式直观的展现出来,用户就可以通过查看心率的当前和历史数据,识别出心率的规律,有助于得出有效的健身强度管控方法和应对措施。同时相关人员还可以远距离的查看数据,得出直观的了解和认识。

中控大屏目标

   本节课程主要目标是设计一个总控大屏的web应用,能实时的查看如下信息:

  1. 过去3小时的心率变化实时信息
  2. 蜂鸣器实时状态显示

心率检测监控系统

   下图是一个典型的物联网应用程序开发的流程图,接下来本节就按照这个流程介绍如何心率检测系统中控大屏的web应用程序的开发。

   打开IoT Studio官网,在项目管理中创建一个空白项目,如下图所示,将此项目命名为“心率检测系统”。

   新建“普通项目”之后,在新项目的首页新建一个Web应用,命名为“心率大小实时监控”。

   Web应用创建成功后会进入到应用界面设计页面。

   点击上图红框中的“组件”按钮图标,就可以看到可用的组件列表。各组件的说明请参考IoT Studio组件说明。

   这里我们用到3种组件:

  • 1个实时曲线 用于显示心率大小的历史变化曲线及实时数据
  • 1个开关 显示和控制蜂鸣器的状态

   将2种组件拖到中间的画布区,适当调整组件布局。然后拖动文字组件,为组件添加文字注释,如下图所示。

   此时回到”心率检测系统“项目的主页,对产品和设备进行关联,如下图所示:

   关联产品的过程如下:

   关联设备的过程如下:

   产品和设备关联完毕之后,就可以将把组件和设备的属性关联起来了。

   关联数据源分为如下3个步骤,每个步骤的截图如下:

  • 关联产品
  • 关联设备
  • 关联属性

   具体操作步骤如下:

  1. 选中”开关“组件,点击右侧的“配置数据源”。

  1. 选择目标产品

  1. 选择目标设备

  1. 选择“开蜂鸣器”属性

   接下来需要为”实时曲线“组件设定数据源。同样点击该组件后,点击右边的配置数据源。因为本场景中的心率大小测量和蜂鸣器的控制都是通过一个物联网设备完成的,所以本页中要选择”单设备多属性“。然后选择好本场景创建的产品,如下图所示。

   选择相同的设备,如下图所示。

   本场景显示的是检测的心率大小,所以”数据项“中选择这个属性。

   最后选择要显示的实时心率大小数据的时间长度,这里选择3小时,如下图所示。

   在发布之前可以点击上图的“预览”查看应用的实际运行效果。实际运行效果如下图所示:

   这样我们就完成了一个心率检测系统从设备心率检测、设备控制、物联网云平台开发及物联网应用开发全链路的开发。

前往这里探索更多有趣案例

HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution

标签: gv传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台