树莓派 激光pm2.5传感器模块SDS011 Modbus RTU

现在我们的树莓派需要连接激光传感器测量室内的空气质量。
买回来之后发现是通过USB连接通过Modbus RTU 进行传输的。
然后网上查了下: python modbus 实现RTU 通信
测试了一下代码,发现怎么更改端口号都找不到设备,查了一下树莓派USB端口设置, 然后发现需要对USB串口进行固定: 树莓派USB端口绑定
首先多次插拔确定USB端口:

lsusb

在这里插入图片描述

sudo gedit /etc/udev/rules.d/99-com.rules
#文末添加
KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523", MODE:=“0777”, SYMLINK+="device0"
//然后重启 udev
sudo /etc/init.d/udev restart

然后重新插拔设备

ls /dev/device*
->/dev/device0

然后再测试之前的脚本,可以找到设备了。
但是每次都返回Invalid CRC in response. 估计是自带的校验码有什么鬼毛病,没办法查错。。然后换了种方式:
如何使用树莓派测定颗粒物(PM 2.5)
发现他们家的代码仅支持Python2.7以下的版本,python3跑的时候什么都不返回。
测试分析后发现在于python3对返回方式的处理不同,更改代码如下可以正常读取数据:

import serial,  time

ser = serial.Serial()
ser.port = "/dev/device0"

ser.baudrate = 9600

ser.open()
ser.flushInput()

while True:
   ser.write("AAB4FE010300000000000000000000FFFF00AB".encode())
   byte = -1

   while byte != b'\xaa':
       byte = ser.read(size=1)

   d = ser.read(size=9)

   if d[0] == 192:
       pm_25 = (d[1] + 256*d[2]) / 10.0
       pm_10 = (d[3] + 256*d[4]) / 10.0       
       print("Current pm2.5: ", pm_25, " pm10: ", pm_10)
   else:
       print("Not a correct request for PM reading.")
       
   time.sleep(1)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值