PM2.5 / PM10传感器读数:Python,MicroPython和Arduino-ESP32

136 篇文章 16 订阅
41 篇文章 2 订阅

在本文中,让我们看一下如何使用ESP32板连接和编写程序,从PM2.5 / PM10传感器模块读取值,我们将使用Python3,用于ESP32的MicroPython和Arduino分别以代码编写为例进行演示。

演示顺序如下:

  • 第一阶段:了解硬件,例如将要使用的传感器模块从制造商的数据表中学习技术信息,以及准备硬件(例如测试电路)。
  • 第二阶段:编写Python 3代码,通过不使用微控制器板,而是通过带有模块USB到串行到计算机的数据通信方法来测试基本操作
  • 第三阶段:使用加载MicroPython固件的ESP32的编写代码
  • 第四阶段:使用Arduino IDE编写C代码

传感器模块:颗粒物测量

此类灰尘传感器模块请勿使用过滤器捕获和收集实验室中的灰尘样品,而要使用激光工作,当空气中的细小颗粒(例如空气中的灰尘)被风扇吸入并撞击激光束时, 导致光散射改变直线的光的方向或角度。

灰尘的大小和浓度(颗粒及大小,颗粒浓度〜)将导致电信号检测器的光(Detector)具有不同的值。 然后进行算术处理得出以微克每立方米(µg / m ^ 3)为单位的数值。

这些设备使用通过电源电压VCC = + 5V与串行端口(Serial Port)连接数据的方法。 有用于连接数字I / O的引脚TXD(数据输出)和RXD(数据输入)。

在我们使用设备之前,应先了解制造商的文件或数据表中的各种信息。 每种型号的设备都有许多不同的细节,否则可能会损坏设备。 或将时间浪费在因不了解使用而引起的问题上。

使用说明:

  • 连接连接器有8条线,但仅使用4条线,仅VCC(5V),GND,TX和RX。建议标记或编写注释。为了更容易连接电路并避免可能发生的错误
  • 在连接工作电路时可能需要修改以连接电源线,例如一端是母排针

检测模块参数

设置或控制模块(数据表)的操作必须使用命令通过串口发送命令,例如

  • 开始测量并打开排气风扇(开始颗粒测量)。
  • 停止测量并关闭排气风扇(停止颗粒测量)。
  • 读取PM2.5和PM10的最新测量值(读取颗粒测量结果)。
  • 启用启用自动发送模式,该模式总共发送32个字节的数据,每次间隔大约一秒钟。
  • 关闭模式下,自动传输(停止自动发送)。
  • 以及有关用户校准的命令

将命令发送到模块后,将收到答复以确认发送给您的命令正确吗?

例如,如果要开始传感器的测量(“开始粒子测量”),请按如下所示发送4个字节(以十六进制显示)0x68 0x01 0x01 0x96,并且必须具有2个字节的响应,如下所示0xA5 0xA5以获得正确的响应。 (ACK)或0x96 0x96(如果不正确(NACK)。

注意:

  • 每个命令中的字节顺序为HEAD(默认字节),LEN(长度,但不包括CS字节),CMD(命令字节)和DATA(字节数据可能具有或不具有)
  • 发送的命令的最后一个字节。用于数据验证或校验和(CS)
  • 如果是“读取颗粒测量结果”命令,则将返回所有8个字节(HEAD,LEN,CMD,DF1,DF2,DF3,DF4,CS)。 DF1和DF2字节串联为16位。 对于PM2.5,将字节DF3和DF4放在一起以提供PM10的16位值(并且不要忘记每次都检查CS使用的数据的准确性)。

Python编程从模块读取值

首先测试该模块是否可以正常工作,是否可以通过串口获得值? 我们将使用USB-to-Serial模块连接到计算机。

由于传感器模块的电量不是很高,使用电源电压VCC = + 5V,因此我们可以使用带有+ 5V引脚和GND的USB转串口模块作为电源。

可以使用的USB转串口模块必须具有+ 5V引脚,并且GND和TXD / RXD必须在3.3V电平下工作。

如果正确连接了引脚当通过USB端口连接到计算机时,我们可以开始使用Python 3进行编程(可以选择使用Python IDE,也可以在Shell中运行命令行脚本)。

由于需要使用Python 3通过串行发送和接收数据,因此有必要通过执行以下命令来安装名为pyserial(Python Serial)的Python包:

python3 -m pip install pyserial

在本文中,我们将使用Thonny IDE(Windows)进行编码,并使用Python 3.7.5解释器执行代码。

Python代码

MicroPython编程从模块读取值

MicroPython代码

编程Arduino-ESP32 Sketch从模块读取值

演示1

Arduino的第一个示例,我们将为ESP32编写一个程序以充当串口桥。 一方面,使用Serial 0连接到计算机(这是我们用来将Arduino Sketch上传到板上的路径),而另一方面,使用串口2连接到模块。 我们选择了相同的Baudrate 9600值。

Sketch代码

演示2

我们将编写一个新的Arduino Sketch代码,从串口2的传感器模块中获取值并首先对其进行处理。然后通过串口0将显示PM10 / PM2.5值的消息发送到计算机以在Arduino IDE的Serial Monitor中显示。

Sketch代码

详情参阅 - 亚图跨际

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Arduino-ESP32ModbusRTU是一个基于Arduino平台和ESP32芯片的Modbus RTU通信协议库。Modbus RTU是一种常用的串行通信协议,用于在不同设备之间实现通信和数据交换。ESP32是一款强大的Wi-Fi和蓝牙芯片,具有丰富的资源和功能。 利用Arduino-ESP32ModbusRTU库,我们可以轻松地在ESP32上实现Modbus RTU通信功能。通过这个库,我们可以将ESP32作为Modbus RTU的主机或从机,并与其他Modbus RTU设备进行通信。在主机模式下,ESP32可以向其他设备发送Modbus RTU命令,并接收其响应。在从机模式下,ESP32可以接收其他设备发送的Modbus RTU命令,并作出相应的响应。 使用Arduino-ESP32ModbusRTU库,我们可以使用简单的代码实现Modbus RTU通信功能。我们可以指定串口用于与其他设备进行通信,并设置自己的Modbus地址。我们可以使用库提供的函数来读取和写入寄存器或线圈,以及进行其他Modbus操作。 Arduino-ESP32ModbusRTU库还支持异步通信功能,可以在不阻塞主线程的情况下进行Modbus通信操作。这使得我们可以同时处理其他任务,而不会影响Modbus通信的性能和稳定性。 总之,Arduino-ESP32ModbusRTU是一个方便实用的库,可以帮助我们在ESP32上实现Modbus RTU通信功能。无论是作为主机还是从机,通过这个库,我们可以轻松地与其他Modbus RTU设备进行数据交换和通信。 ### 回答2: arduino-esp32modbusrtu是一种基于Arduino开发平台和ESP32微控制器的Modbus RTU通信库。Modbus是一种通信协议,常用于工业自动化领域中的设备间通信。 arduino-esp32modbusrtu库为ESP32提供了实现Modbus RTU通信的功能,可以让ESP32作为Modbus RTU主机或从机来与其他设备进行通信。通过该库,用户可以轻松地对Modbus RTU数据进行读取和写入。 使用arduino-esp32modbusrtu库,用户首先需要在Arduino开发平台上导入该库,并在代码中包含相应的头文件。然后,需要设置串口参数,并创建一个Modbus RTU对象。用户可以根据需要选择将ESP32配置为主机或从机,并指定Modbus设备的地址。 在主机模式下,用户可以使用ModbusRTUMaster类的方法来发送读取或写入请求,并获取设备的响应。用户可以指定读取或写入的寄存器地址以及读取的数量或写入的值。在从机模式下,用户可以使用ModbusRTUSlave类的方法来处理主机的请求,并返回相应的数据。 arduino-esp32modbusrtu库提供了许多示例代码和详细的文档,帮助用户快速上手,并实现其Modbus RTU通信需求。使用该库,用户可以自定义设置通信参数、处理各种Modbus功能码,并与其他Modbus RTU设备进行稳定可靠的通信。 总之,arduino-esp32modbusrtu是一款强大而灵活的Modbus RTU通信库,为基于ESP32的项目提供了方便快捷的Modbus功能支持。 ### 回答3: Arduino-ESP32ModbusRTU是一种基于ESP32微控制器的Modbus RTU通信协议库。该库允许使用Arduino编程语言和开发工具与Modbus RTU设备进行通信。 Modbus RTU是一种在串行通信介质上实现的开放式通信协议。使用Modbus RTU协议,可以实现数据在不同设备之间的传输和控制。通常,Modbus RTU是在RS485物理层上实现的,允许多个设备共享通信线路。 Arduino-ESP32ModbusRTU库通过处理Modbus RTU帧格式,实现了Master和Slave两种角色的操作。作为Master,ESP32可以通过发送请求到Slave设备来读取或写入数据。而作为Slave,ESP32可以接收Master设备发送的请求,并根据请求进行数据读取或写入。 使用Arduino-ESP32ModbusRTU库,我们可以通过Arduino编程语言轻松地实现Modbus RTU通信。我们可以设定串行通信参数(如波特率、数据位、停止位等),并使用预定义的函数来读取或写入Modbus寄存器中的数据。此外,该库还支持不同种类的Modbus寄存器,如输入寄存器、保持寄存器、线圈和离散输入寄存器。 总结而言,Arduino-ESP32ModbusRTU库为我们提供了一种简单而高效的方式来实现ESP32与其他Modbus RTU设备之间的通信。无论是作为Master还是Slave,ESP32都可以通过这个库与Modbus RTU设备进行数据的读取和写入。这个库的使用使得我们可以很方便地将ESP32应用于各种Modbus RTU通信场景中,如工业自动化、设备监控等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值