Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread学习营
Sensor_传感器框架
packages_软件包
当攀藤 PM2.5 传感器遇上 RT-Thread
发布于 2020-07-13 15:14:46 浏览:1161
订阅该版
[tocm] ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713150730256.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5ZGFyY3k=,size_16,color_FFFFFF,t_70#pic_center) ## 概述 ### 攀藤 PMS 系列传感器 攀藤 PMS 系列传感器是基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度,并以通用数字接口形式输出。PMS 传感器可嵌入各种与空气中悬浮颗粒物浓度相关的仪器仪表或环境改善设备,为其提供及时准确的浓度数据,比如小米的空气净化器。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713150753530.gif#pic_center) PMS 系列包括很多款传感器,具体选型可以查看
页面。 为了方便在 MCU 产品上应用 PMS 系列传感器,笔者基于 RT-Thread 物联网操作系统制作了一个软件包 **pmsxx**。该软件包兼容多款 PMS 传感器,支持 MCU 串口配置为中断或 DMA 接收模式,支持线程初始化,支持使用 device 接口进行读写、控制操作。 GitHub 地址:
### 硬件连接 攀藤 PMS 系列传感器提供 TTL 电平串口与主机通信,开发者可以通过 USB 转串口模块连接 PMS 传感器的 RX 和 TX 引脚,使用 PC 端的串口调试工具进行调试。默认波特率为 9600 bps,无校验位,1 位停止位。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713150844450.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5ZGFyY3k=,size_16,color_FFFFFF,t_70#pic_center) 不同型号的传感器的接口略微不同,以 PMS9003M 为例,是一个带锁槽的 8 pin 接口,间距 1.27 mm。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713150909916.png#pic_center) 管脚定义如下: | 管脚序号 | 功能标号 | 描述 | | -------- | -------- | ------------------------------------------------------------ | | PIN1 | VCC | 电源正(+5V) | | PIN2 | GND | 电源负 | | PIN3 | SET | 设置管脚(TTL 电平 3.3V),高电平或悬空为正常工作状态,低电平为休眠状态 | | PIN4 | RXD | 串口接收管脚(TTL 电平 3.3V) | | PIN5 | TXD | 串口发送管脚(TTL 电平 3.3V) | | PIN6 | RESET | 模块复位信号(TTL 电平 3.3V),低复位 | | PIN7 | NC | | | PIN8 | NC | | PMS 传感器与 MCU 的典型电路连接示意图如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713150954194.png#pic_center) 本测试只需连接 VCC、GND、RXD、TXD 即可。 ### 传输协议 pmsxx 软件包目前支持基础型和增强型两类 PMS 传感器。 - **基础型(Basic)**:传输协议总长度 32 字节,检测的数据包括标准(CF=1)颗粒物浓度和大气环境的颗粒物浓度(PM1.0、PM2.5、PM10),以及 0.1 升空气中直径分别在 0.3μm、0.5μm、1.0μm、2.5μm、5.0μm、10μm 以上的颗粒物个数。常见的传感器模块包括 PMS3003、PMS5003、PMS7003、PMS9003M、PMSA003 等等。 - **增强型(Enhanced)**:传输协议总长度 40 字节,检测的数据在基础型之上增加了甲醛浓度、温度、湿度 3 组数据。常见的传感器模块如 PMS5003ST。 基础型 PMSxx 传感器传输协议如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713151023700.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5ZGFyY3k=,size_16,color_FFFFFF,t_70#pic_center) ## 软件包使用 ### 添加软件包 如果使用 Env 工具,在添加软件包前需要先执行 `pkgs --upgrade` 更新软件包索引。以 STM32L4R5 Nucleo BSP 为例,在项目工程目录执行 `menuconfig` 打开配置页面,pmsxx 软件包的具体路径如下: ``` RT-Thread online packages ---> peripheral libraries and drivers ---> [*] sensors drivers ---> [*] PMSxx: Plantower pms serial PM2.5 sensor driver. ``` pmsxx 软件包位于 sensor drivers 内,已对接 sensor 设备驱动框架,因此 pmsxx 可为上层应用提供标准的 device 操作接口。pmsxx 软件包选项配置如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/202007131510500.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5ZGFyY3k=,size_16,color_FFFFFF,t_70#pic_center) 这里使用 STM32L4R5 Nucleo 板上 Arduino 接口的 D0(RX)和 D1(TX),对应为 uart3 串口。因此还需要配置 uart3 并开启 DMA 接收功能。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713151107761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5ZGFyY3k=,size_16,color_FFFFFF,t_70#pic_center) OK,保存配置并退出。执行 `pkgs --update` 更新/拉取软件包。 ### pmsxx 配置项 ``` --- PMSxx: Plantower pms serial PM2.5 sensor driver. Select pms sensor type (Basic) ---> (X) Basic ( ) Enhanced (2000) The waiting time after send command (ms) [ ] Enable initialize by thread [ ] Enable serial device DMA RX [ ] Debug command and response [ ] Show commands [ ] Show response data [ ] Dump raw response data [ ] Show ruler for raw response data [ ] Enable pmsxx sample (uart3) Select uart device name ``` **选项说明:** - PMS 传感器类型 - 基础型(包括 PMS1003/PMS3003/PMS5003/PMS7003/PMS9003/PMSA003 等) - 增强型(比如 PMS5003ST) - 串口发送命令等待时间(并非所有模式设置命令都有响应,建议设置此参数,避免设置失败) - 使能初始化线程(该软件包会将 pms 传感器设置为被动模式,使能该选项可以消除等待时间的影响) - 使能串口 DMA 功能(开启该选项时请确保所使用的串口支持 DMA,并且已开启相关配置) - 调试命令和响应 - 当设置传感器模式时,在 msh 终端显示该命令内容 - 当接收到响应数据时,在 msh 终端显示该响应内容 - 当接收到响应数据时,以原始数据的形式显示 - 显示标尺,以方便识别原始数据 - 使能 pmsxx 示例代码 - 设置示例的串口设备名称(默认为 uart3) ### 测试 当硬件和软件准备就绪,就可以编译工程,并将固件下载到 MCU 上。打开 msh 终端,由于开启了 pmsxx 的测试示例和命令/响应调试输出,因此会自动注册传感器设备,并打印出一些信息,比如 MCU 发送给传感器的命令。 ``` +-----------------------------------------------------+ | HEAD1 | HEAD2 | CMD | DATAH | DATAL | LRCH | LRCL | ----------------------------------------------------- | 42 | 4d | e2 | 00 | 00 | 01 | 71 | +-----------------------------------------------------+ ``` 以及传感器发送给 MCU 的数据。 ``` _________________________________________________________________________________ 01 02 03 04 05 06 07 08 09 10 11 12 ...... 20 21 22 23 24 25 26 27 28 29 30 31 32 --------------------------------------------------------------------------------- 42 4d 00 1c 00 03 00 04 00 07 00 04 ...... f9 00 1b 00 06 00 03 00 03 9a 00 02 a2 ``` PMS 传感器上电默认进入主动输出模式,为了方便使用,pmsxx 软件包将其初始化为被动模式。初始化成功,执行 `list_device` 命令可以查看该设备。 ```shell msh >list_device device type ref count -------- -------------------- ---------- dust_pms Sensor Device 0 ``` 由于 PMS 传感器包含多种检测数据,pms 注册为 dust 设备,使用 `rt_device_read` 接口读取的是通常比较关心的 PM2.5(大气环境)值。如果想要获取所有数据,可以使用 `rt_device_control` 接口。 示例代码提供了两个测试命令: - pms_read_sample :主动式获取传感器数据,返回的是 PM2.5 值(大气环境); - pms_dump_sample :主动式获取传感器数据,返回所有响应数据。 以下是使用 PMS9003M 传感器,执行 pms_dump_sample 命令的运行效果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713151151527.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5ZGFyY3k=,size_16,color_FFFFFF,t_70#pic_center) 以下是使用 PMS5003ST 传感器,执行 pms_dump_sample 命令的运行效果:(需要切换为 Enhanced 类型) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200713151207254.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5ZGFyY3k=,size_16,color_FFFFFF,t_70#pic_center) 以上测试均是通过 sensor 设备驱动框架进行。另外,pmsxx 软件包示例还提供了自定义接口测试命令 cat_pmsxx_passive 和 cat_pmsxx_active,分别用于被动式和主动式测试。小伙伴们可以试一下,那我们下次再见咯~
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
阿基米东
https://github.com/luhuadong
文章
7
回答
52
被采纳
3
关注TA
发私信
相关文章
1
stm32f407+lan8720 lwip2.0 作业提交
2
玩溜GD32303E-EVAL BSP系列(五)----设备连接网络
3
onenet应用连不上云端
4
【文件系统】晴天文件匹配
5
rtt semc sdram 基于操作系统怎么初始化驱动设备
6
RT-Thread移植笔记
7
RT-Thread内核移植+LoIIs+STM32F103C8+StdLib
8
EVN编译报错,求助大神
9
【内核和外设学习营】十里 简单LED闪亮测试
10
【内核和外设学习营】 十里 串口指令控制RGB灯点亮的颜色
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部