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

上周空气不好,突发奇想要搞个个人物联网系统,检测生存环境。手头有树莓派、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口,就可以直接进行读取操作了。代码如下:

#encoding=utf-8

# 参考:
# https://my.oschina.net/wangandi/blog/901648


import os
import serial
import time
from struct import *

ser = serial.Serial("/dev/ttyUSB0", baudrate=9600, timeout=2.0)

def read_pm_line(_port):
    rv = b''
    while True:
        ch1 = _port.read()
        if ch1 == b'\x42':
            ch2 = _port.read()
            if ch2 == b'\x4d':
                rv += ch1 + ch2
                rv += _port.read(38)
                return rv

def main(): 
    recv = read_pm_line(ser)
    tmp = recv[4:28]
    datas = unpack('>hhhhhhhhhhhh', tmp)
    print('Plantower PMS7003,Updated:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    print('PM1.0(CF=1): {}ug/m3\n'
              'PM2.5(CF=1): {}ug/m3\n'
              'PM10 (CF=1): {}ug/m3\n'
              'PM1.0 (STD): {}ug/m3\n'
              'PM2.5 (STD): {}ug/m3\n'
              'PM10  (STD): {}ug/m3\n'
              '>0.3um     : {}/0.1L\n'
              '>0.5um     : {}/0.1L\n'
              '>1.0um     : {}/0.1L\n'
              '>2.5um     : {}/0.1L\n'
              '>5.0um     : {}/0.1L\n'
              '>10um      : {}/0.1L'.format(datas[0], datas[1], datas[2],
                                       datas[3], datas[4], datas[5],
                                       datas[6], datas[7], datas[8],
                                       datas[9], datas[10], datas[11]))
    ser.flushInput()
    time.sleep(0.1)

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        if ser != None:
            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):

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

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

import RPi.GPIO as GPIO
import dht11

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

# 端口一定要跟硬件连接匹配!
# read data using pin 4
instance = dht11.DHT11(pin = 4)
result = instance.read()

if result.is_valid():
    print("Temperature: %-3.1f C" % result.temperature)
    print("Humidity: %-3.1f %%" % result.humidity)
else:
    print("Error: %d" % result.error_code)

树莓派引脚:

rpi-pins-40-0

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值