当前,COVID-19 大流行要求我们采取行动和日常护理来保护自己,从而实现健康的生活。在一些国家,已经看到混合工作计划重返办公室。
DMHC HOST Probe 是使用 AWS IoT Edukit 及其一些称为单元的传感器创建的设备。它允许我们在定义的时间间隔内远程检查我们的心率、氧饱和度和温度。
它会向我们的手机发送 SMS 警报,或者如果我们将 Slack 会话连接到特定频道,它会记住我们何时必须验证我们的 HOST 值。
例如,可以在办公室使用,让每个工人都有一个探针,我们可以集中验证每个工人的数据。
或者在与他的医生有联系的特定患者中验证这些值的进展,从而立即采取纠正措施。
为此,使用了 Amazon Web Services 云,设备在其中发送这些数据,以使用 Amazon QuickSight 进行处理、存储和咨询,Amazon QuickSight 是在 Amazon Honeycode 和 Grafana 中开发的移动应用程序。
以下部分描述了硬件、基础结构、使用的不同 AWS 云服务以及用于查询已发送数据的选项。
这些图像显示了扩展端口 Ext(引脚 22 SCL 和引脚 21 SDA)。它是使用 Proto-13.2 模块白色连接器和塑料盒创建的。白色焊接连接器是端口,并具有以下连接:
这些图像显示了端口位置,包括塑料盒内的 Ext 端口,并使用扩展连接器连接到 AWS IoT Edukit。
此图显示了所有使用单元的连接图,包括一个 proto-13.2 板。
连接所有单元和扩展模块后,需要建立一个底座来固定每个单元和 AWS IoT Edukit。
按照自定义零件和外壳部分中的说明使用乐高 EV3 零件。pdf 文件逐步显示,而在 pdr 文件中使用 Ldraw 程序可以遵循 3D 设计。
使用的固件是 UIFlow Core2 v1.8.4 来加载它,将 AWS IoT Edukit 连接到计算机的 USB 端口之一,确保根据平台安装了USB 驱动程序。
下载程序以更新固件,M5Burner并根据平台进行安装。
执行 M5Burner 时,我们必须选择我们的设备连接到的 COM 端口。
使用登录选项中的帐户创建访问权限,输入后按Bind With Account
按钮以将设备与 UIFlow 云链接。
如果我们选择您的电子邮件,它将显示Device Management
打开浏览器的菜单选项,并向我们显示我们可以用来验证设备是否正确链接的信息。
现在我们选择选项 UIFLOW (CORE2) 正确的版本 v1.8.4-core2 并按Download
。
按下Configuration
按钮,在 UIFlow Config 屏幕中,输入您的 Wi-Fi 网络 SSID 和密码的数据,然后按下按钮Save
以连接设备以更新固件。
按下Burn
按钮并检查将要连接设备的网络的 SSID 和密码数据是否正确,然后按下 按钮Start
。
此过程完成后,设备将重新启动并显示屏幕,指示它已连接到网络和 UIFlow 云以及我们的 API 密钥。
AWS IoT Core 允许将 IoT 设备连接到 AWS 云,而无需预置或管理服务器。
在 AWS 控制台中,转到 AWS IoT Core 并在菜单选项中Manage
创建一个事物。Things
Create Things
按钮Create single thing
DMHC_HOST_Probe
AllowAllAccess
并复制并粘贴此代码
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
Create Thing
按钮弹出窗口显示所有要下载的证书和密钥。
下载设备证书xxxx.pem.crt
和两个额外的公钥xxxx-pubilc.pem.key
和私钥很重要xxxx-private.pem.key
,因为这将是我们唯一能做的,如果它们丢失了,你必须创建一个新的东西。
需要设备证书和私钥才能建立设备与 AWS IoT Core 服务的通信。
除了证书和两个密钥之外,设备还需要端点,即每个事物都有一个可用的 REST API 的 url,以便可以访问 MQTT 客户端和 AWS IoT 设备 SDK。
在菜单选项设置中,您可以查看并复制此地址以在我们将构建的软件中使用它。
总之,我们有一个事情:
要使用的主题
dmhc/host_data
→ 发布dmhc/reset
← 订阅
现在在浏览器中转到flow.m5stack.com ,取消初始弹出屏幕并转到account icon
,在弹出登录时添加您之前创建的电子邮件和密码以恢复在固件更新的先前步骤中链接的所有设备信息。
插入 USB 端口 AWS IoT Edukit,启动它并等待它显示 Api Key 屏幕。按reconnect icon
Disconnected word 右侧的 reconnect device 并更新 ApiKey 和 Version,确认版本至少为v1.8.4.
现在是时候将所有png
图像、所有wav
声音文件certificate
和private
密钥上传到 AWS IoT Edukit 设备了。这些文件可以从代码部分下载。
属于 de mesh 的每个设备都必须是保存在 EEProm key 中的唯一 ID device_id
。
从代码部分打开setDeviceId.m5f
,调整其值并运行程序(单击箭头图标),您必须在屏幕上看到该值Saved ID: xxxxx
在 AWS 配置了所有必需的资源后,我们上传启动 HOST Probe 的程序。我们打开dmhcV2.m5f
位于代码部分的文件并将其上传到设备。
该程序是使用 UIFlow 在线编辑器创建的,可以以 Blockly 或 Python 格式查看。
使用的算法如下:
/*
The current time is read.
All images are loaded.
The user interface is painted.
Read ambient temperature, humidity and pressure.
Activate Time to check your health event
Play wav file
Activate vibration
RGB LEDs blink between red and green color.
Activate Heart rate and spo2 review Event
Play wav file (H sensor)
RGB Leds blink between red and black
Starts to read ten values from heart rate and spo2 sensor
Updates status bar and progress bar
Saves the values in two lists, one for each concept.
Activate Temperature review event
Play wav (T Sensor)
RGB Leds blink between green and black
Starts reading ten values from temperature sensor
Updates status bar and progress bar
Saves values in a list.
Activate Test completed event
Play wav
Connect to AWS cloud using MQTT protocol.
Read values of three lists created, prepares a Json and publishes it in
topic dmhc/host_data.
*/
这是一个发送到主题的 Json 示例数据dmhc/host_data
{
“device_id” : “JCruz”,
"heartrate" : 120,
"spo2" : 97,
"temperature" : 45
}
它订阅了该主题dmhc/reset
,因此当它从 AWS 云接收到需要激活读取的信息时,它会重置系统以开始新的周期检查。
此处列出了所有帮助功能的列表:
# Paint user interface, get time and environment data
def DMHC_Init():
# Get time from device, format it and show at user interface
def Get_Time():
# Read from Env III unit temperature, pressure and humidity,
# format values and show at user interface
def Read_ENV3():
# Begin check process activate vibration, play
# wav, RGB leds blink between red and green
def TimeToCheck():
# Read data from heart and temperature unit sensor
# and put them at three value lists
def Read_Data():
# Read heart rate and spo2 from Heart Unit, put
# values in two lists and show at user interface
def Read_HeartRate_SpO2():
# Indicate that test was completed
def Test_Completed():
# Read temperature value from NCIR Unit,
# put it in a list and show at user interface
def Read_Temperature():
# Wait from AWS Cloud that call dmhc/reset
# topic to reset device and begin new process
def fun_dmhc_reset_(topic_data):
主要程序模块:
# DMHC HOST Probe program v2
#
DMHC_Init()
TimeToCheck()
Read_Data()
Test_Completed()
lb_status.set_text('Connecting to AWS ...')
_thread.stack_size(0)
# Connect to thing endpoint at AWS IoT Core using MQTT protocol
aws = AWS(things_name='DMHC_HOST_Probe', host='a2i2bsijbyml6j-ats.iot.us-west-2.amazonaws.com', port=8883, keepalive=60, cert_file_path="/flash/res/certificate.pem", private_key_path="/flash/res/private.pem")
aws.subscribe(str('dmhc/reset'), fun_dmhc_reset_)
aws.start()
lb_status.set_text('AWS Connected')
_thread.stack_size(0)
# Create a Json with all list data read from sensors and send to AWS cloud
DataJson = {}
while not not len(temp_list):
DataJson['device_id'] = device_id
DataJson['heartrate'] = heart_list.pop(0)
DataJson['spo2'] = spo2_list.pop(0)
DataJson['temperature'] = temp_list.pop(0)
# Publish to topic dmhc/host_data
aws.publish(str('dmhc/host_data'),str((json.dumps(DataJson))))
lb_status.set_text('Sending data to AWS ...')
_thread.stack_size(0)
lb_status.set_text('Waiting for a new request')
详细完整的代码可以在代码部分下载,文件dmhcV2.py
是完整的MIcroPython代码。
设备(事物)用户界面
要创建 wav 格式的声音文件,AWS Polly
可以使用该服务,该服务允许将文本转换为语音。
您需要创建一个 AWS S3 存储桶dmhc-bucket
和一个wav/
文件夹来存储 AWS Polly 以 mp3 格式生成的文件。最后,下载生成的 mp3 文件并使用online-converter.com服务将它们从 mp3 转换为 wav。
AWS Polly Text-to-Speach 使用的选项是:
从架构图中可以看出,后端的主要服务是AWS IoT Core
.
如 在 AWS IoT Core 服务中创建事物一章中所述,它注册每个设备(事物)以使用 MQTT 协议与云进行通信。
为此,dmhc/host_data
使用了主题,它允许以 json 格式发布每个探测器生成的数据。
要处理主题接收到的消息并将它们发送到其他服务,必须定义规则,在我们的例子中,我们将在AWS IoT Core
.
dmhc_rule_iot_analitycs :将接收到的消息发送到AWS IoT Analitycs service
Act
中选择选项Rules
dmhc_rule_iot_analytics
select * from 'dmhc/host_data'
Add action
,选择Send a message to IoT Analytics
configure action
Quick create IoT Analytics resources
命名dmhc_host
quick create
dmhc_host_role
这时候所有AWS IoT Analytics
的资源都创建好了:
dmhc_host_channel
dmhc_host_pipeline
dmhc_host_datastore
dmhc_host_dataset
dmhc_rule_timestream :将接收到的消息发送到AWS TimeStream
Act
中选择选项Rules
dmhc_rule_timestream
SELECT device_id, heartrate, spo2, temperature FROM 'dmhc/host_data'
Add action
,选择Write a message into a Timestream table
Configure action
dmhc_timestreamdb
,标准dmhc_timestreamtable
在数据库中dmhc_timestreamdb
DeviceID
”,值${device_id}
dmhc_host_role
AWS IoT Analytics 自动执行分析来自 IoT 设备的数据所需的每个困难步骤。AWS IoT Analytics 在将 IoT 数据存储在时间序列数据存储中进行分析之前对其进行过滤、转换和丰富。
dmhc_host_channel
接收所有消息并将它们发送到dmhc_host_pipeline
谁验证和转换并将它们发送到dmhc_host_datastore
谁存储数据并可用于dmhc_host_dataset
与其他服务共享。
我们需要为每条传入的消息在一个新的 json 字段中存储时间戳server_time
,并且只允许 spo2<>0 和 temperature<200 的消息,以避免传感器错误读取提供的错误数据。使用 lambda 函数和管道活动我们可以做到。
拉姆达函数:dmhc_TimeStamp
// Handler called by IoT Analytics - pipeline dmhc_host_pipeline
exports.handler = function handler(event, context, callback) {
//Add timestamp to incoming data and name it "server_time"
event[0].server_time = Date.now();
// Return the data
callback(null, event);
};
添加到管道dmhc_host_pipeline
两个活动:
dmhc_TimeStamp
数据集dmhc_host_dataset
需要将所有数据保存到dmhc_host_data_iotanalytics.csv
文件并将其存储在存储桶dmhc-bucket
文件夹files/
中,以便与创建的 AWS Honeycode 应用程序共享。
我们可以用交付规则创建一个新的数据集Deliver result to S3
Change
SQL 查询到:
select heartrate, spo2, temperature, server_time , __dt as day
from dmhc_host_datastore
Amazon AppFlow 是一项完全托管的集成服务,使您能够在 Amazon S3 等 AWS 服务之间安全地传输数据并将其发送到 Amazon Honeycode。
亚马逊蜜码
Amazon Honeycode
,DMHC Host Probe Data
dmhc_data_table
heartrate
, spo2
, temperature
, date
,server_time
详细表格可以为每个字段激活一些警报条件,例如当 SpO2 小于 93 或心率>140 时显示红色背景值。
表为空,需要 Amazon AppFlow 的帮助以插入从由 AWS IoT Analytics 处理的 DMHC HOST Probe 接收的所有数据并存储在 AWS S3 Bucket Servicedmhc-bucket
中,文件files/dmhc_host_data_iotanalytics.csv
亚马逊应用流
将成为 S3 和 Honeycode App 之间的桥梁,使用:
dmhc_flow
dmhc-bucket
文件夹files
与 Amazon Honeycode 连接dmhc_conn
DMHC Host Probe Data
dmhc_data_table
csv
文件中的所有字段dmhc_data_table
如果选择新流程dmhc_flow
并按下Run flow
按钮,所有数据将插入 Honeycode 应用程序dmhc_data_table
,每 5 分钟更新一次。
在手机的 Honeycode 应用程序中打开应用程序 DMHC 数据表,将看到红色背景中的所有数据和一些警报。
借助 Amazon QuickSight,我们可以分析和创建连接到 AWS IoT Analytics 数据集的数据仪表板。
我们可以从大量数据源、数据库和 AWS 服务中创建数据集。
datasets
, New dataset
,AWS IoT Analytics
,dmhc_host_dataset
,创建源,它会显示一个 Spice 数据集。打开它,可以看到所有的香料信息,并可以刷新或安排自动刷新率。
创建数据集后,我们需要创建一个分析来处理香料中的所有数据。
dmhc_host_analyses
S
选择香料dmhc_host_dataset
line chart
X axis
,Values
请参见下图。Share
并Publish Dashboard
创建仪表板DMHC HOST Probe
。如果选择创建的仪表板,您可以在浏览器中看到它
在手机中打开 QuickSight 应用程序,将看到创建的仪表板。
Grafana 是另一种用于创建图形和仪表板的工具,并且有一个用于 Amazon Timestream 的插件。您可以连接到数据库和表并分析数据时间序列,
我们需要用户凭证访问密钥 ID 和秘密访问密钥,以便 Grafana 访问数据库和表。
AWS IAM
Users
,Add user
dmhc_timestreamuser
Access key - Programmatic access
AmazonTimestreamFullAccess
Access Key ID
并Secret access key
在https://grafana.com/创建您的帐户
Configuration
并Plugins
添加Amazon Timestream plugin
Configuration
,Datasources
点击亚马逊时间流Access Key ID
并Secret Access Key
从dmhc_timestreamuser
创建us-west-2
If
凭据没问题,您可以选择数据库dmhc_timestreamdb
和表dmhc_timestreamtable
SELECT CREATE_TIME_SERIES(time,measure_value::bigint) as temperature FROM $__database.$__table where $__timeFilter and measure_name = 'temperature'
SELECT CREATE_TIME_SERIES(time,measure_value::bigint) as spo2 FROM $__database.$__table where $__timeFilter and measure_name = 'spo2'
SELECT CREATE_TIME_SERIES(time,measure_value::bigint) as heartrate FROM $__database.$__table where $__timeFilter and measure_name = 'heartrate'
按保存并应用,您现在可以在仪表板中看到所有数据值。
为了控制 DMHC HOST Probe 请求运行状况检查的频率,我们将使用Amazon EventBridge
将调用 Lambda 函数的服务,dmhc_ResetDevice
以便它使用AWS IoT Core
主题向设备发送通知 MQTT,该主题dmhc/reset
将告诉您重新启动并继续捕获新数据。
dmhc_ResetDevice
AWSIoTFullAccess
和AmazonSNSFullAccess
Change
var AWS = require('aws-sdk');
// Define object AWS IoT Core with endpoint
var iotdata = new AWS.IotData({endpoint: 'a2i2bsijbyml6j-ats.iot.us-west-2.amazonaws.com' });
// Define object AWS SNS for SMS and Slack notifications
var sns = new AWS.SNS();
//Call by AWS EventBridge
exports.handler = async(event, context) => {
//Prepare json data to send notification msg to Slack
console.log("Send msg to Slack with topic dmhc_sns_topic...");
var params = {
Message: '{ \
"version": "0",\
"id":"'.concat(context.awsRequestId).concat('",').concat(' \
"detail-type":"Is time to check your health! Please go to DMHC Host Probe.", \
"source":"aws.events", \
"account": "537233203723", \
"time":"'.concat(new Date().toISOString()).concat('",').concat(' \
"region": "us-west-2" \
}')),
Subject: "DMHC HOST Probe",
TopicArn: "arn:aws:sns:us-west-2:537233203723:dmhc_sns_topic"
};
// Publish to SNS dmhc_sns_topic
sns.publish(params, context.done);
// Create publish parameters for SMS Number
console.log("Send msg to SMS topic...");
var params = {
Message: 'Is time to check your health! Please go to DMHC Host Probe.',
//Set here your mobile phone number
PhoneNumber: 'YOUR PHONE NUMBER'
};
// Publish to SNS SMS number attach
sns.publish(params, context.done);
// Publish to IoT Core topic dmhc/reset
console.log("Publish in topic dmhc/reset...");
var params = {
topic: "dmhc/reset", //send any msg to this topic to reset edukit
payload: JSON.stringify(event),
qos: 0
};
//Send reset request to DMHC HOST Probe topic dmhc/reset
const request = iotdata.publish(params);
request
.on('success', () => console.log("Success"))
.on('error', () => console.log("Error"))
return new Promise(() => request.send());
};
亚马逊事件桥
在此之前,Lambda 函数向Amazon SNS
服务 topic发送两条消息dmhc_sns_topic
。
亚马逊社交网络
创建主题:dmhc_sns_topic
类型标准
一个由订阅者处理的正确 json 格式,AWS Chatbot
订阅者将向注册的 Slack 频道发送通知dmhc-events
。
AWS 聊天机器人
dmhc-events
在您的 slack 工作区中创建)dmhc_chatbot_slack
dmhc_sns_topic
另一种是json格式,适合注册电话号码类型的用户向手机发送短信通知。
亚马逊 PinPoint
我们需要先注册一个号码,然后再向其发送 SMS 并使用 Amazon Pinpoint 预置一个免费电话号码。
当该号码已注册并具有原始号码时,在沙盒环境中只有少量测试和 1 美元的金额,要增加此金额需要创建支持案例和升级到生产的请求。
dmhc_pinpoint_project
dmhc_ResetDevice
)亚马逊社交网络
必须为 SNS 主题创建一个订阅 SMS 号码dmhc_sns_topic
并在 json 消息中设置subscription filter policy
是否存在属性PhoneNumber
,因为 slack 和 SMS 消息发送到同一个主题,并且此策略避免您收到两条 SMS 消息。
此电话号码已在 AWS PinPoint中注册,并将由 lambda 函数使用dmhc_ResetDevice
。
此项目中使用的 Amazon Web Services (Oregon us-west-2)
前端选项
硬件物联网事物
DMHC HOST Probe = AWS IoT Edukit + Heart 单元 + NCIR 单元 + ENVIII 单元
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !