天天看點

當攀藤 PM2.5 傳感器遇上 RT-Thread

當攀藤 PM2.5 傳感器遇上 RT-Thread

概述

攀藤 PMS 系列傳感器

攀藤 PMS 系列傳感器是基于雷射散射原理的數字式通用顆粒物濃度傳感器,可連續采集并計算機關體積内空氣中不同粒徑的懸浮顆粒物個數,即顆粒物濃度分布,進而換算成為品質濃度,并以通用數字接口形式輸出。PMS 傳感器可嵌入各種與空氣中懸浮顆粒物濃度相關的儀器儀表或環境改善裝置,為其提供及時準确的濃度資料,比如小米的空氣淨化器。

當攀藤 PM2.5 傳感器遇上 RT-Thread

PMS 系列包括很多款傳感器,具體選型可以檢視 ​​http://www.plantower.com​​ 頁面。

為了友善在 MCU 産品上應用 PMS 系列傳感器,筆者基于 RT-Thread 物聯網作業系統制作了一個軟體包 pmsxx。該軟體包相容多款 PMS 傳感器,支援 MCU 序列槽配置為中斷或 DMA 接收模式,支援線程初始化,支援使用 device 接口進行讀寫、控制操作。

GitHub 位址:​​https://github.com/luhuadong/rtt-pmsxx​​

硬體連接配接

攀藤 PMS 系列傳感器提供 TTL 電平序列槽與主機通信,開發者可以通過 USB 轉序列槽子產品連接配接 PMS 傳感器的 RX 和 TX 引腳,使用 PC 端的序列槽調試工具進行調試。預設波特率為 9600 bps,無校驗位,1 位停止位。

當攀藤 PM2.5 傳感器遇上 RT-Thread

不同型号的傳感器的接口略微不同,以 PMS9003M 為例,是一個帶鎖槽的 8 pin 接口,間距 1.27 mm。

當攀藤 PM2.5 傳感器遇上 RT-Thread

管腳定義如下:

管腳序号 功能标号 描述
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 的典型電路連接配接示意圖如下:

當攀藤 PM2.5 傳感器遇上 RT-Thread

本測試隻需連接配接 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 傳感器傳輸協定如下:

當攀藤 PM2.5 傳感器遇上 RT-Thread

軟體包使用

添加軟體包

如果使用 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 軟體包選項配置如下:

當攀藤 PM2.5 傳感器遇上 RT-Thread

這裡使用 STM32L4R5 Nucleo 闆上 Arduino 接口的 D0(RX)和 D1(TX),對應為 uart3 序列槽。是以還需要配置 uart3 并開啟 DMA 接收功能。

當攀藤 PM2.5 傳感器遇上 RT-Thread

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​

​ 指令可以檢視該裝置。

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 指令的運作效果:

當攀藤 PM2.5 傳感器遇上 RT-Thread

以下是使用 PMS5003ST 傳感器,執行 pms_dump_sample 指令的運作效果:(需要切換為 Enhanced 類型)

繼續閱讀