资讯详情

担心燃气泄漏,用ESP32 + HaaS Python做个24小时检测设备吧,手机随时随地就能查看,还能异常报警联动

天然气是中国人家庭烹饪和取暖的主要燃料,其主要成分是甲烷(CH4)还含有少量丙烷、乙烷、丁烷等少量气体。天然气本身无色无味,密度小于空气。如果天然气泄漏,当空气浓度达到5%~15%时,遇到明火就会爆炸。如今,随着天然气的普及,由于使用不当和人为因素(忘记关闭开关),天然气泄漏爆炸事故不断发生。

本案例以此为背景,讲述了如何逐步构建燃气泄漏检测系统。

1、硬件准备

完成本案例只需要以下硬件:

  1. ESP32一套
  2. MQ一个燃气传感器
  3. RGB LED(或红色LED一个)
  4. 连接线若干

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

2.开发物联网平台

2.开放公共实例

对于第一次使用物联网平台的读者,需要开通实例以使用物联网平台的功能。这里可以使用免费的公共实例进行开发。

在物联网平台中,左上角选择华东2-上海,点击公共实例打开。打开后,单击公共实例进入控制台创建产品。

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

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

2.2.创建云产品

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

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

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

2.3.创建产品属性(物模型)

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

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

在本节中,我们选择导入模型来创建系统所需的模型信息,点击上图中的编辑草稿按钮。然后根据下图的步骤选择当地文件导入气体检测系统模型。

我们刚刚导入的物模属性出现在物模型导入成功后的网页上。alarmLight代表燃气等报警状态,1处于报警状态,0不报警;gasVoltage代表MQ2.燃气传感器检测到的电压值。

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

2.4.创建云设备(获得三元组)

在产品列表页面中,点击燃气检测系统后的管理设备进入设备管理页面。

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

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

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

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

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

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

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

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

3.设备端开发

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

3.1.创建解决方案

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

复制燃气检测系统中的所有文件并覆盖gas_detector工程根目录下的原始内容。如下图所示:

然后修改以下三个代码。

Python详情请参考脚本嵌入的文字版注释

  • ??

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

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

?? 修改完成后get_wifi_status函数中的代码将连接读者设置的路由器。

?? 修改gas_detector工程里main.py中productKey、deviceName和deviceSecret以下是读者创建的物联网设备的三元组信息:

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

gas_detector工程里main.py中下代码实现了将气体检测结果和报警灯状态上传到云端的功能。gasVoltate是气体检测结果上报云中使用的标识符。代码逻辑和功能描述如下:

# 向物联网平台上传燃气传感器检测电压信息和报警信息 def upload_gas_detector_state():     global device, alarmOn, mq2Dev      gasVoltage = 0      # 无限循环     while True:         gasVoltage = mq2Dev.getVoltage()   # 呼叫mq由传感器库提供getVoltage函数获取电压值,单位:mV          print(gasVoltage)         data = ujson.dumps({             'gasVoltage': gasVoltage,             'alarmLight': alarmOn         })         # 生成上报物联网平台的属性值字串,这里的属性标识符"gasVoltage"和"alarmLight"必须与物联网平台的属性一致         # "gasVoltage" - 代表燃气传感器测量的电压值         # "alarmLight" - 代表报警灯的当前状态         uploadData = {'params': data}         # 向物联网平台上传燃气传感器检测电压信息和报警信息          device.postProps(uploadData)          # 每2秒报告一次         utime.sleep(2)

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

3.2、运行结果

3.2.1、本地查看

推送此脚本到ESP32之后,通过PC端串口调试工具可以看到ESP32打印如下日志。其中:

  • “物联网平台连接成功” 代表成功连接到物联网平台
  • "reporting data to cloud:"之后跟着的为设备端向云端发布的燃气检测结果信息,gasVoltage后 的值为燃气传感器检测的电压值,单位:mV
  • "{"alarmLight":x}"则是收到云端回复的控制报警灯亮灭的控制指令,1代表打开报警灯,此时接在ESP32的红色LED应该亮起;0代表关闭报警灯,此时接在ESP32的红色LED应该熄灭。(注意:这条log的及报警灯亮灭的行为是云端下发控制指令触发,只有在完成下一步“物联网应用开发”小节之后才会打印)
==== python file check /data/pyamp/main.py ====
 ==== main.py update time = 691110460 ====
 ==== python execute from /data/pyamp/main.py ====
...
('192.168.0.116', '255.255.255.0', '192.168.0.1', '192.168.0.1')
sleep for 1 s
establish tcp connection with server(host='a1bAWdk23jE.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
reporting data to cloud: {"gasVoltage": 1100, "alarmLight": 0}
{"alarmLight":1}
reporting data to cloud: {"gasVoltage": 1100, "alarmLight": 0}
{"alarmLight":1}
...

3.2.2、云端设备信息查看

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

此时如果开发板周围的燃气浓度发生变化,物联网平台的物模型数据会更新为设备上报的最新的属性值。

3.2.3、物联网平台控制报警灯状态

物联网设备上线之后,可以通过”监控运维“中的"在线调试"功能进行调试,详细操作步骤见下图:

此产品的物模型属性中,"燃气检测电压值"设置的是只读,也就是说智能从设备端读取,不支持设置此状态到设备端,所以点开"燃气超标标志"后面的”调试“之后,里边只有获取的选项。”报警灯“设置的是可读可写,所以点开”报警灯“后面的”调试“之后,里边有”获取“、”设置”和“设置期望值”三个选项。 这里可以选择打开报警灯之后点击“设置”进行报警灯功能的调试。

此时查看设备端LED是否已经打开,打开成功则代表控制报警灯成功。 

4、物联网应用开发

通过本节学习,开发者可以搭建一个在手机上面可以随时随地查看燃气监控系统状态的应用。

下图是一个典型的物联网应用程序开发的流程图,接下来本节就按照这个流程介绍如何完成燃气监控系统移动端应用程序的开发。

打开IoT Studio官网,在项目管理中创建一个空白项目,如下图所示,将此项目命名为“燃气监控报警系统”。

新建“普通项目”之后,在新项目的首页新建一个移动应用,命名为“燃气实时监控”。

创建完移动应用之后系统会自动跳转到”新建页面“,这里选择”创建页面“完成应用页面的创建,如下图所示。

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

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

这里我们用到3个组件:

  • 实时曲线 用于显示温湿度的历史变化曲线及实时数据
  • 指示灯 显示和控制空调和加湿器的当前状态
  • 天气 用于显示目的地天气

将三个组件拖到中间的画布区,适当调整组件布局,如下图所示。

此时回到”燃气监控系统“项目的主页,对产品和设备进行关联,如下图所示:

关联产品的过程如下:

关联设备的过程如下:

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

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

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

具体操作步骤如下:

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

  • 选择目标产品

  • 选择目标设备

  • 选择“报警灯”属性

选择好产品、设备和属性之后,需要修改指示灯大小及”开始报警“/”停止报警“时指示灯的颜色,如下图所示。

同样的方式为”实时曲线“设置为目标设备的”燃气检测电压“,并显示最近半小时的数据,如下图所示。

选中”天气“组件,可以设定要显示的是什么位置的天气,本节课程中显示默认地址即可,读者也可以设定自己所在地的信息,如下图所示。

业务逻辑的主要目的是为了让用户设定物联网设备端的行为逻辑,常规物联网系统都是在设备端固化行为逻辑,出厂之后如果需要修改设备的行为,则需要进行OTA升级。本节课程则向读者介绍如何通过IoT Studio完成业务逻辑的开发。

新建一条名为“燃气浓度超过阈值报警”的规则。

系统会自动进入到业务逻辑编辑页面,如下图所示,点击左侧的“节点”按钮,则可以看到所有可用的节点选项。右侧红框是如何设计一个业务逻辑的介绍。

  • 选择目标节点

   此逻辑需要通过“燃气检测设备”上报的“燃气测量电压”当超过阈值的时候打开报警灯,否则关闭报警灯。所以需要如下4个节点:

  • 设备触发节点
  • 条件判断节点
  • 开启报警灯节点
  • 关闭报警灯节点

   分别从左侧拖动“设备触发”,“条件判断”和2个“燃气检测系统”4个节点到右侧的业务 逻辑编辑框。

  • 建立节点间的关联关系

   按照预设的逻辑建立,如下图所示(在节点的一侧按下鼠标拖动到另一节点的一侧即可建立连线关系)。

  • 设备触发节点

   此设备触发选择“燃气检测设备”的“燃气检测电压”属性即可,如下图所示(和前面“组件”设定类似,同样是鼠标选中第节点,在右侧的配置选

  • 判断节点

   此处我们设定为当传感器测量到的电压值高于900mV则开始报警。设定步骤如下。

  • 设备节点行为设定

   分别为设备节点设定开启报警灯和关闭报警灯的行为,如下图所示。

  • 业务逻辑保存和部署

   依此点击右上角的“保存”和“部署”按钮,即可将此业务逻辑设定完毕。 

业务逻辑设定完毕之后,可以在“燃气监控报警系统”页面编辑页面点击“预览”按钮进行预览,如下图所示。

在发布之前可以点击上图的“预览”查看应用的实际运行效果。实际运行效果如下所示,同时可以扫描二维码在手机上面查看实际运行效果。

此时查看设备上面的报警灯的状态会同步和移动端应用的报警灯状态同步显示。 

到此为止,燃气检测系统的案例就已经完成了。如果想要学习燃气检测系统更详细的操作步骤,请参考“燃气检测系统详解”中的说明。

标签: ch4浓度传感器

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

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