树莓派+攀腾PMSA003-PM2.5传感器监测空气质量【含源码+接线图】
在使用树莓派+攀腾PMSA003-PM2.5传感器,采集PM2.5数据,
下面是接线图,因为PMSA003引脚比较小,直接使用1.25的线不方便,建议购买一个转线版在电商搜索一下(PMSA转接板)就有了,插上之后就只有4个引脚了(VCC,GND,RX,TX)
接线除了VCC和GND之外,RX和TX要接在树莓派的TX和RX上,如下图PMSA 4,5引脚接线所示。
实际图如下
可选的:PMSA的RX和TX管脚均需要 3.3V 作为高电平,也可以加上电平转化电路,转化电压。
读取攀腾PMSA003-PM2.5传感器的代码如下
参考了树莓派+攀腾PMSA003-PM2.5传感器监测空气质量【含源码】的源码。
#!/usr/bin/env python
import serial
import timeclass pmsA003(serial.Serial):def __init__(self, dev):self.serial = serial.Serial(dev, baudrate=9600, timeout=3)def __exit__(self, exc_type, exc_value, traceback):self.serial.close()def setIdel(self):idelcmd = b'\x42\x4d\xe4\x00\x00\x01\x73' # 进入待机状态,风扇停止转动ary = bytearray(idelcmd)self.serial.write(ary)def setNormal(self):normalcmd = b'\x42\x4d\xe4\x00\x01\x01\x74' # 恢复正常工作,风扇转动,主动发送数据ary = bytearray(normalcmd)self.serial.write(ary)def vertify_data(self):if not self.data:return Falsereturn Truedef read_data(self):while True:b = self.serial.read(1)if b == b'\x42':data = self.serial.read(31)if data[0] == 0x4d:self.data = bytearray(b'\x42' + data)if self.vertify_data():return self._PMdata()def _PMdata(self):d = {}d['pm25'] = str(self.data[6] * 256 + self.data[7])d['pm10'] = str(self.data[4] * 256 + self.data[5])return dif __name__ == '__main__':con = pmsA003('/dev/ttyAMA0')while True:d = con.read_data()print(d['pm25']) # 输出pm2.5的数值time.sleep(5)
对于setIdel和setNormal里面的字节是指令,树莓派资料可参考这个基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现。
程序传入进树莓派后,执行可能会遇到程序一直不输入任何东西,即一直挂载着,终止程序后出现
ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left())
我们将 串口名称从 '/dev/ttyAMA0',修改为 '/dev/serial0'即可,具体原因可参考我的另一篇博客内容。
修改后执行程序,就可以正常输出采集到的PM2.5浓度了。
希望这篇文章对你有所帮助。
参考链接:
树莓派+攀腾PMSA003-PM2.5传感器监测空气质量【含源码】
基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现
python hangs on serial write()