资讯详情

【毕设参考】ESP32 + HaaS Python 打造在线空气质量检测器

空气检测系统

?? 下图是本案例除硬件连接外的三个步骤导师。请参考图中的说明。

简介

?? 近年来,空气污染逐渐恶化,许多人越来越关注空气质量。及时检测每周环境的空气质量,通过钉通知相关人员,可以最大限度地减少对周围环境的担忧,有利于以后的旅行。

背景知识

?? 该系统的核心是如何检测周围环境PM2.5浓度,并通过钉钉提前预警通知用户。

?? 光学灰尘传感器GP2Y1014AU可以检测到非常细的颗粒,如烟雾、房屋粉尘等。检测到的数据可以及时向物联网平台报告。IoT Studio的 开发工具可及时通知用户移动钉钉终端,实现空气质量PM2.5.提前预警。

准备

本案例需要以下硬件。

  • ESP32开发板一套
  • GP2Y1014AU传感器一个
  • 多条杜邦连接线

硬件连线图

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

开发物联网平台

开放公共实例

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

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

?? 物联网平台功能开通后,云设备的创建需要完成以下三个步骤:

  1. 创建云产品
  2. 创建产品属性(物模型)
  3. 创建云设备(获取三元组)

创建云产品

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

?? 如下图所示,在新产品设置页面上设置产品名称,选择自定义类别(自定义类别模型为空,需要自己创建,或通过导入外部模型),节点类型选择直接连接设备,网络模式选择Wi-Fi数据格式选择ICA选择默认设置标准数据格式、检验类型和认证方法。本产品的描述也可以根据开发者自身的需要添加到产品描述页面。

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

创建产品属性(物模型)

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

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

?? 在本节中,我们选择创建自定义模型来创建系统所需的物体模型信息,点击上图中的编辑草稿按钮。然后根据下图中的步骤选择添加自定义功能。

然后按照下图属性添加。

?? 添加成功后,可以看到我们刚刚创建的物模属性出现在网页上。pm25_value代表PM2.5值,数据类型int32整数型。此时点击确定按钮,按照系统提示一步一步完成之前创建的模型属性设置。功能定义完成后,单击 按钮完成发布

?? 该产品的设备可以在产品及其物体模型创建后创建。

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

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

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

?? 设置添加设备页面deviceName在这里,开发人员可以填写他们想要设置的设备名称(我们在这里填写设备名称)dust1)系统也可以自动生成设备名称,如下图所示。

?? 点击 弹出下面的添加完成提示框,单击 按钮就可以看到此设备端详细信息了。

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

  1. 三元组(点击下图中的查看和三元组信息)
  2. 物体模型属性信息

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

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

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

业务逻辑的配置

?? 下一步是配置业务逻辑,通过钉钉将设备端发送到物联网平台的数据发送给相关人员。在这里,我们使用物联网业务逻辑开发工具

?? 物联网应用开发(IoT Studio)提供物联网业务逻辑开发工具,支持简单的物联网业务逻辑设计通过服务节点的安排快速完成。具体细节可参考物联网应用开发中的业务逻辑章节。

1. 创建钉钉机器人

?? 点击弹出对话框中的钉钉头像设置按钮

?? 点击 机器人管理按钮

?? 点击机器人管理页面点击 自定义按钮

?? 点击 确定按钮

?? 输入机器人名称及机器人想要添加的钉钉群组(如果没有可以自行创建),在安全设置一项添加"定制关键词"。

?? 需要注意的是:。我们在这里定义"浓度"关键词,也就是说,后续的推送信息必须包含在内"浓度"这个词语。

?? 点击完成按钮

?? 创建后弹出提示框,单击``复制``按钮复制Webhook使用地址后,可将消息推送到钉钉群。点击完成。

配置 IoT Studio 物联网

?? 登录IoT Studio点击左侧边栏的平台项目管理,点击项目管理页面新建项目按钮。

?? 在新建项目页面点击创建空白项目

?? 弹出新的空白项目输入项目名称项目名称和描述确定按钮。

?? 项目建成后,将自动导航到新项目。新项目需要相关的产品、设备和创建业务逻辑,以实现云端上信息到钉钉的信息推送。

   选择左侧的产品侧边栏,点击关联物联网平台产品,在弹出的窗口中选择之前创建的产品并关联。

   选择左侧的设备侧边栏,点击关联物联网平台设备,在弹出的窗口中选择关联产品下的设备。

   选择左侧的主页侧边栏,在弹出的项目详情页选择业务逻辑,点击新建按钮,在弹出的下拉框选择新建空白业务服务

   在新建业务服务窗口输入业务服务名称及描述后点击确定按钮。

   业务服务创建完成后自动导航到业务逻辑开发页面。点击“节点”按钮显示所有原子功能,并以此拖住设备触发条件判断钉钉机器人到右侧的窗口。按住鼠标左键连接各个模块,注意条件判断两个逻辑输出要连接正确的钉钉机器人,以免逻辑混乱。

   点击设备触发模块,在弹出的对话框中选择产品,设备及触发条件。

配置完设备后,修改条件判断。当PM2.5数值小于35的时候,我们认为空气质量优良

   点击空气优良机器人模块,在弹出的对话框中设置Webhook,选择配置方式及消息类型。Webhook对话框输入之前创建“空气监测报警”钉钉机器人时候拷贝的字符串,按照下图中的设备配置机器人:

同时我们也设置空气污染机器人,Webhook也输入上述机器人相同的字符串:

   业务逻辑开发配置完成后,我们可以先使用软件调试的方式验证相关逻辑链路的正确性。点击保存按钮后点击部署调试按钮。

   在弹出的对话框选择前往按钮:

   在弹出的设备模拟器页面点击启动设备模拟器按钮:

   选择属性上报选项并在PM25浓度填写合适的数值,点击发送命令按钮:

   发送命令后,我们便可以在钉钉群接收到相关的通知:

   到这里我们已经完成了IoT云端的所有配置,接下来就是完成设备端开发并完成设备属性的上报。

设备端开发

开发环境

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

创建解决方案

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

案例代码

   下载本案例代码并解压将所有文件复制后,覆盖刚创建的air_quality工程根目录下的文件。main.py代码区如下图所示:

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

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

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

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

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

   air_quality工程里main.py中下面的代码实现的是上传PM2.5浓度到云端的功能。其中pm25_value和pollen_value便是上报云端所用的标识符。

# 这里的数据仅表示从ADC上读到的数据,未实现到真实PM2.5的转换,仅作案例参考
    dustValue = gp2y10Obj.getDustVal()
    print('dustValue = ', dustValue)
    # 生成上报到物联网平台的属性值字串,此处的属性标识符"pm25_value"必须和物联网平台的属性一致
    upload_data = {'params': ujson.dumps({
        'pm25_value': dustValue # 这里填充PM2.5浓度    
    })
    }
    # 上传状态到物联网平台
    device.postProps(upload_data)
    utime.sleep(60)      # 打印完之后休眠60秒

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

运行结果

本地查看

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

>>> 
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
('192.168.3.196', '255.255.255.0', '192.168.3.1', '192.168.3.1')
establish tcp connection with server(host='xxxxxxxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
sleep for 1 s
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
物联网平台连接成功
sleep for 2s
gp2y10Obj inited!
dustValue =  0
dustValue =  0
dustValue =  0
dustValue =  0
dustValue =  0
dustValue =  2200
dustValue =  431
dustValue =  0
dustValue =  0
dustValue =  20
dustValue =  0
dustValue =  0
dustValue =  0

同时我们也可以看到钉钉端的相关通知。

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

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

此时如果空气质量发生变化,物联网平台的物模型数据会更新为设备上报的最新的属性值。

到此为止,空气质量检测系统的案例就已经完成了。

来这里探索更多有趣案例

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

标签: 3fd3y96变送器

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

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