云社区 博客 博客详情

个人物联网(目前用到了树莓派、PMS7003攀藤g7传感器、DHT11温湿度传感器)

CSDN 发表于 2020-11-24 00:23:36 2020-11-24
0
0

【摘要】 上周空气不好,突发奇想要搞个个人物联网系统,检测生存环境。手头有树莓派、NodeMCU esp8266、DHT11温湿度传感器。pm2.5检测需要专门的传感器,本以为也就几块钱,结果发现淘宝还挺贵。在调研了一圈之后,最后在咸鱼花28淘了一个攀藤g7(PMS7003/G7M-攀藤G7科技高精度激光传感器链接不是带货的,只是用来看传感器介绍的)。攀藤g7需要配套的转接板,转接板直...

上周空气不好,突发奇想要搞个个人物联网系统,检测生存环境。手头有树莓派、NodeMCU esp8266、DHT11温湿度传感器。pm2.5检测需要专门的传感器,本以为也就几块钱,结果发现淘宝还挺贵。在调研了一圈之后,最后在咸鱼花28淘了一个攀藤g7(PMS7003/G7M-攀藤G7科技高精度激光传感器链接不是带货的,只是用来看传感器介绍的)。攀藤g7需要配套的转接板,转接板直接插到传感器上,数据线用于连接转接板和usb转ttl转换器(数据线直接连树莓派的GPIO引脚进行传感器数据读取应该也可以,没有尝试)。要注意的地方:转接板接的电源是5v,RX、TX引脚分别接usb转ttl转换器的TX、RX。

我的硬件照片、连接细节

 

现在硬件已经准备好了,下面要做的就是用usb转ttl转换器连接电脑,测试串口通信是否能读取到数据。win10下连接后用串口调试软件读COMX端口(X是某个数字),如果能读到数据,说明硬件设备没问题,可以直接用了。

如果要监控室外空气质量,可以用Node MCU替换usb转ttl转换器,然后把硬件设备供电放到室外,可以通过Node MCU将攀藤g7采集到的数据传送给树莓派。当然这需要Node MCU和树莓派共用一个局域网。

树莓派3b不需要进行设置,只要把usb转ttl转换器插到树莓派3b的usb口,就可以直接进行读取操作了。代码如下:


  
  
  1. #encoding=utf-8
  2. # 参考:
  3. # https://my.oschina.net/wangandi/blog/901648
  4. import os
  5. import serial
  6. import time
  7. from struct import *
  8. ser = serial.Serial("/dev/ttyUSB0", baudrate=9600, timeout=2.0)
  9. def read_pm_line(_port):
  10. rv = b''
  11. while True:
  12. ch1 = _port.read()
  13. if ch1 == b'\x42':
  14. ch2 = _port.read()
  15. if ch2 == b'\x4d':
  16. rv += ch1 + ch2
  17. rv += _port.read(38)
  18. return rv
  19. def main():
  20. recv = read_pm_line(ser)
  21. tmp = recv[4:28]
  22. datas = unpack('>hhhhhhhhhhhh', tmp)
  23. print('Plantower PMS7003,Updated:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  24. print('PM1.0(CF=1): {}ug/m3\n'
  25. 'PM2.5(CF=1): {}ug/m3\n'
  26. 'PM10 (CF=1): {}ug/m3\n'
  27. 'PM1.0 (STD): {}ug/m3\n'
  28. 'PM2.5 (STD): {}ug/m3\n'
  29. 'PM10 (STD): {}ug/m3\n'
  30. '>0.3um : {}/0.1L\n'
  31. '>0.5um : {}/0.1L\n'
  32. '>1.0um : {}/0.1L\n'
  33. '>2.5um : {}/0.1L\n'
  34. '>5.0um : {}/0.1L\n'
  35. '>10um : {}/0.1L'.format(datas[0], datas[1], datas[2],
  36. datas[3], datas[4], datas[5],
  37. datas[6], datas[7], datas[8],
  38. datas[9], datas[10], datas[11]))
  39. ser.flushInput()
  40. time.sleep(0.1)
  41. if __name__ == '__main__':
  42. try:
  43. main()
  44. except KeyboardInterrupt:
  45. if ser != None:
  46. ser.close()

执行效果如图(现在空气怎么这么好?当然是买了空气净化器啊):

值得注意的是,网上有一些python读取攀藤g5传感器的代码,应该也可以直接拿来用。但是攀藤g7传感器相比g5少了温湿度和甲醛的信息,这一点可以从两者的说明书(攀藤g7说明书链接:https://wenku.baidu.com/view/397c8f34856a561253d36f3d.html,攀藤g5说明书链接https://wenku.baidu.com/view/4f6a10bad5d8d15abe23482fb4daa58da0111cf2.html)看出来。下面是攀藤g7的数据传输协议,数据13保留,后面就是校验码了,而攀藤g5的数据13、14、15分别是甲醛、温度、湿度。。。

DHT11温湿度传感器比较简单,三个引脚分别是电源、数据引脚、接地。电源和接地在树莓派的VCC和GND上,选择一个GPIO引脚用于连接数据引脚,比如我用的是GPIO 4。连接完成后,树莓派接通电源,执行以下操作(忘了是pip还是pip3):


  
  
  1. git clone https://github.com/szazo/DHT11_Python
  2. cd DHT11_Python
  3. pip install dht11

现在python已经有了dht11的库,可以执行以下代码读取温湿度数据:


  
  
  1. import RPi.GPIO as GPIO
  2. import dht11
  3. # initialize GPIO
  4. GPIO.setwarnings(False)
  5. GPIO.setmode(GPIO.BCM)
  6. GPIO.cleanup()
  7. # 端口一定要跟硬件连接匹配!
  8. # read data using pin 4
  9. instance = dht11.DHT11(pin = 4)
  10. result = instance.read()
  11. if result.is_valid():
  12. print("Temperature: %-3.1f C" % result.temperature)
  13. print("Humidity: %-3.1f %%" % result.humidity)
  14. else:
  15. print("Error: %d" % result.error_code)

树莓派引脚:

rpi-pins-40-0

 

所以如果装修房子后监测甲醛还要买甲醛传感器,心塞。调研不够充分啊,早知道买g5了

文章来源: blog.csdn.net,作者:danxinzhujian,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/danxinzhujian/article/details/109863640

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

上一篇:FR8016H的串口透传实现

下一篇:《剑指offer》NO21 调整数组顺序使奇数位于偶数前面 详解 <Java实现>

评论 (0)


登录后可评论,请 登录注册

评论