ESP32 + Python守护家庭健康自己动手做个甲醛浓度检测设备

Posted HaaS技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32 + Python守护家庭健康自己动手做个甲醛浓度检测设备相关的知识,希望对你有一定的参考价值。

 甲醛(化学式HCHO或CH2O)是一种有特殊刺激气味的气体,对人的眼睛和鼻子有强烈的刺激作用。若空气中甲醛浓度过高,比如新装修的房子、新买的汽车等,可引起中毒反应,严重的可致癌。甲醛是空气中的杀手之一,需要时刻提防。

本案例就以此为背景教开发者如何一步一步打造一个甲醛检测仪,即使不在家,也可以随时随地远程掌控家里甲醛浓度哦,整个打造过程分为2步:

背景知识

本系统的核心在于如何精准的检测家庭中的甲醛浓度。现在市面上有很多种甲醛检测的仪器,大多企业在用的都是通过电化学的方法来检测。

电化学甲醛检测仪采用高灵敏度电化学传感器原理,结合单片机技术和网络通讯技术对检测场所采集空气样品,因为甲醛浓度不同,传感器获得不同的电位信号,将此信号进行处理,就显示出甲醛浓度。

和其它方式检测甲醛浓度相比,电化学甲醛传感器的抗干扰能力强,灵敏度高,测量结果精确,检测下限低,恢复-响应的特性更好。

  • 电化学甲醛传感器是由膜电极和电解液灌封而成的。气体浓度信号将电解液分解成阴阳带电离子,通过电极将信号传出。它的优点是:反映速度快、准确(可用于ppm级,即可测量最低百万分比质量浓度)度高,稳定性好、能够定量检测,但其寿命一般较短,约2年左右。它主要适用于甲醛气体的检测,目前国际上绝大部分毒气检测均采用该类型传感器。
  • 甲醛传感器使用一个4电极型电化学传感器,包括一个工作电极和一个活性辅助电极。辅助电极发出的信号用于温度补偿,可增强整个传感器的选择性。传感器响应值和空气中的甲醛浓度成正比。

本节选用的是HOCO甲醛传感器,可精确测量空气中的甲醛浓度,并能抑制干扰气体,具有稳定性高、抗干扰气体能力强等特点。分辨率高达0.01ppm,支持3.3~6V宽电压输入,具备良好的兼容性,并且使用寿命长达2年。 简单易用的Gravity接口、宽输入电压、支持模拟电压或者串口输出,几乎可兼;容所有的主控器。

 注意:甲醛传感器在使用之前需要预热5分钟以上。

1、设备端开发 - 甲醛检测

本节主要目标是通过ESP32和HCHO甲醛传感器测量环境的甲醛浓度信息。

1.1、硬件准备

  1. ESP32开发板一套
  2. HCHO甲醛传感器一个
  3. 杜邦连接线若干

 在进行下一步之前请确保ESP32开发环境已经搭建完毕。详情请参考HaaS Studio开发环境的说明。

1.2、创建解决方案

如下图所示,打开VS Code之后在新建一个基于helloworld的python工程,设定好工程名称(“hcho_detector”)及工作区路径之后,硬件类型选择ESP32,点击立即创建,创建一个Python轻应用的解决方案

1.3、DAC模式

使用DAC模式前,请先将拨码开关切换到DAC一端。

输出模拟电压(V)与浓度(ppm)是线性关系,0.4V对应0ppm, 2.0V对应5ppm,因此电压与浓度的线性关系图如下图所示:

 1.4、硬件连线图

硬件连线图如下图所示:

1.5、案例代码

甲醛检测和LED控制文件下所有脚本代码复制后,覆盖刚创建的“hcho_detector”工程根目录下的文件。main.py代码区如下图所示:

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

 1.6、推送脚本运行

 请参考HaaS-Studio Python工程中“HaaS-Studio Python工程 - 推送脚本到设备”的详细说明。

实际日志输入如下所示:

mount fs
 ==== python file check /data/pyamp/main.py ====
 ==== main.py update time = 691090236 ====
 ==== python execute from /data/pyamp/main.py ====
Hcho :0.01ppm
Hcho :0.01ppm
Hcho :0.01ppm
Hcho :0.01ppm

2、甲醛检测数据上云

 在上节中完成环境中的甲醛检测和屏幕信息显示功能的基础上,本节主要对如何将甲醛检测结果送到物联网平台进行详细介绍,整个过程需要完成下面的几个步骤:

  1. 创建云端产品
  2. 创建产品属性(物模型)
  3. 创建云端设备(获取三元组)
  4. 物联网设备端配置

在创建云端产品前,请确保您已经开通“物联网平台公共实例”功能,开通方法请参考物联网设备上云中“开通公共实例”小节的描述。

2.1、创建云端产品

 创建云端产品的网址:https://iot.console.aliyun.com/product

点击创建产品按钮,如下图所示。

在新建产品设定页面按照下图所示,设定“产品名称”,选择所属的“自定义品类”(自定义品类的物模型为空,需要自己创建,也可以通过导入外部物模型的方式导入),节点类型选择“直连设备”,联网方式选择“Wi-Fi”,数据格式选择“ICA标准数据格式”,检验类型和认证方式选择默认设定即可。还可以根据开发者自己的需求在“产品描述”页面添加针对此产品的描述。

选择之后,点击“确认”按钮,即可完成产品创建。返回“产品”页面之后可以看到产品类表中会出现刚刚创建的“甲醛检测”的产品,如下图所示。

2.2、创建产品属性(物模型)

点击上图中的“查看”按钮,即可看到产品信息,Topic列表,功能定义,数据解析等跟产品相关功能的设定。点开“功能定义”标签页,可以看到设备物模型定义。

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

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

然后按照下图选择甲醛浓度属性添加。

物模型添加成功之后可以看到网页出现了我们刚刚创建的物模型属性。其中HCHO代表甲醛传感器检测到的浓度值,数据类型为double浮点型,单位为ppm。此时点击“发布”按钮,按照系统提示一步一步进行下去就可以将刚刚创建的物模型属性发布到产品中。

产品及其物模型创建完成后就可以创建这个产品的设备了。

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

在产品列表页面中,点击”甲醛检测“后的“管理设备”,就会进到设备管理页面。

在“设备”页面点击“添加设备”按钮,如下图所示。

在“添加设备”页面中设定“deviceName”,这里开发者可以自己填入自己想设定的设备名称,也可以不填任何内容让系统自动生成设备名称,如下图所示。

设备添加完成后,点击“前往查看”按钮,就可以看到此设备端详细信息了。

设备信息中有两个信息需要和设备端开发相匹配:

  1. 三元组(点击下图中的“查看”及可看到三元组信息)
  2. 物模型属性信息

2.4、获取设备三元组

如上图所示,点击“查看”按钮,就可以看到设备的三元组信息(如下图所示),三元组是物联网设备端和物联网云端设备相关联的唯一标识符,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。

2.5、查看设备属性信息

设备详情信息页中的“物模型数据”标签页中可以看到设备的所有属性信息、设备事件上报情况及设备服务调用情况,如下图所示。待物联网设备按照设备属性对应的标识符上报设备属性的时候,本图片中的“甲醛浓度“属性值就会显示设备最新的属性信息。

创建产品和设备的过程是按照面向对象的思想进行设计的,其中创建产品可以看成是新建一个类,其中的物模型则是类的对象,创建设备则是进行类的实例化。

2.6、甲醛检测数据上云

 本节是在第一节的基础上进行开发,设备端的工程无需再创建,只需要将main.py脚本的代码复制后覆盖hcho_detector工程根目录下的main.py里边的内容,然后需要完成以下三处代码修改:

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

1、修改路由器名称及密码

修改hcho_detector工程里main.py中wifiSsid和wifiPassword的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在""符号中间)。

# Wi-Fi SSID和Password设置
wifiSsid = "请填写您的路由器名称"
wifiPassword = "请填写您的路由器密码"

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

2、修改设备端三元组

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

3、修改设备端上报数据所用标识符

hcho_detector工程里main.py中下面的代码实现的是上传甲醛检测结果到云端的功能。其中HCHO便是甲醛检测结果上报云端所用的标识符。

    data = get_hcho_value()
    H_str = "Hcho : " + str(round(data,2))+'ppm'
    print('Hcho :' + str(round(data,2)) +'ppm')

    # "HCHO" - 代表甲醛传感器测量到的浓度值
    upload_data = 'params': ujson.dumps(
        'HCHO': round(data,2),
    )
    
    # 上传甲醛浓度信息到物联网平台
    device.postProps(upload_data)

    # 每2秒钟上报一次
    utime.sleep(2)

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

2.7、推送脚本到ESP32并运行

参考第一节中推送此脚本到ESP32之后,串口会周期性的打印如下日志:

>>> execfile("/data/pyamp/main.py")
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
wifi_connected: False
wifi_connected: False
('192.168.0.105', '255.255.255.0', '192.168.0.1', '192.168.0.1')
sleep for 1 s
establish tcp connection with server(host='a1jq4P8WEYO.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
物联网平台连接成功
sleep for 2s
Hcho :0.01ppm
Hcho :0.01ppm
Hcho :0.01ppm
Hcho :0.01ppm
Hcho :0.01ppm
Hcho :0.01ppm

3、案例完成与设备实时监测

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

此时如果开发板周围的甲醛浓度发生变化,物联网平台的物模型数据会更新为设备上报的最新的属性值。通过点击查看数据,可以看到一段时间监测到的甲醛浓度值。

到此为止,甲醛检测系统上云的案例就已经完成了。

以上是关于ESP32 + Python守护家庭健康自己动手做个甲醛浓度检测设备的主要内容,如果未能解决你的问题,请参考以下文章

开工大吉,ESP32 + HaaS Python为您送上久坐提醒器,好好工作更要注意健康哦

想随时定位自己做的智能设备在哪?安排,ESP32 + HaaS Python足矣,定位还能显示在地图上哦

开源自己做的一款小型ESP32 C3 12F开发板

Python+ESP32 DIY 一个赛博朋克逗猫机 喵喵喵?今天的主子看起来有点奇怪

Python+ESP32 DIY 一个赛博朋克逗猫机 喵喵喵?今天的主子看起来有点奇怪

这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备