2020-01-16.树莓派+bme280温度传感器傻瓜版说明

Title: 树莓派+bme280温度传感器傻瓜版说明[2020-01-16]

去年(2019年)的时候买了一台树莓派3b+,除了监控过一段时间汇率外,一直在吃灰。当时同步购入了BME280温度、气压、湿度传感器,只进行了试用。近日又试了试,用Python实现了传感器数据的读取,整理过程如下。代码较丑,见谅。

  1. 硬件准备

    树莓派3b+

    BME280传感器


    2020-01-16.树莓派+bme280温度传感器傻瓜版说明_第1张图片
    BME280

根据针脚图,将线插好

关于针脚图,文末参考网址1里可以查看,树莓派的接口可以很容易的从网络获得,此处不再引用。

我自己的接线是:

黄、蓝、红(顶部靠里的针脚)


2020-01-16.树莓派+bme280温度传感器傻瓜版说明_第2张图片
针脚接好后的状态
  1. 配置树莓派接口

    sudo raspi-config
    

    选择Interfacing Options -> I2C -> yes 启动I2C内核驱动

    选择Interfacing Options -> SPI -> yes启动SPI内核驱动

    sudo reboot
    

    重启树莓派

    lsmod
    

    查看I2C,SPI模块是否已启动,启动时i2c_bcm2835会显示,结果如下:

    2020-01-16.树莓派+bme280温度传感器傻瓜版说明_第3张图片
    红圈中可见i2c_bcm2835
sudo apt-get install i2c-tools
i2cdetect -y 1

安装i2c-tools工具,确认BME280模块地址。这里我只接了4根线,ADDR未连接,因此地址为0x77,结果如下:

2020-01-16.树莓派+bme280温度传感器傻瓜版说明_第4张图片
显示地址为0x77
  1. 安装Python库

    在文末参考网址1中,接下来会使用C对硬件进行驱动。由于我只会一点Python,因此参考了第二个网址的内容

    sudo pip install RPi.bme280
    // 由于默认环境多数为Python3,因此一般会使用以下而不是以上
    sudo pip3 install RPi.bme280
    
  2. 简单测试一下时候成功

    import smbus2
    import bme280
    
    port = 1
    address = 0x77 # 这里根据第2步中i2cdetect -y 1的结果填写0x77或0x76
    bus = smbus2.SMBus(port)
    
    calibration_params = bme280.load_calibration_params(bus, address)
    
    data = bme280.sample(bus, address, calibration_params) # 通过这一行,可以获取数据
    
    print(data.id)
    print(data.timestamp)
    print(data.temperature) # 温度
    print(data.pressure) # 压力
    print(data.humidity) # 湿度
    

    显示结果如下:

    测试输出结果.PNG
  1. 一个每隔30秒获取温度、压力、湿度的程序,数据会保存在log.csv文件中

    import smbus2
    import bme280
    import time
    import csv
    import os
    
    def write_log(data, head=False):
        with open("log.csv", "a+", encoding="utf-8", newline="") as f:
            writer = csv.writer(f)
            if head:
                writer.writerow(["Time", "Temperature", "Pressure", "Humidity"])
            else:
                writer.writerow(data)
    port = 1
    address = 0x77
    bus = smbus2.SMBus(port)
    
    if os.path.exists("log.txt"):
        pass
    else:
        write_log("", head=True)
    
    calibration_params = bme280.load_calibration_params(bus, address)
    
    while True:
        data = bme280.sample(bus, address, calibration_params)
        time_string = data.timestamp.strftime("%H:%M:%S")
        temperature = "{:.2f}".format(data.temperature)
        pressure = "{:.2f}".format(data.pressure)
        humidity = "{:.2f}".format(data.humidity)
        print("Time:", time_string)
        print("Temperature:", temperature, "°C")
        print("Pressure:", pressure, "hPa")
        print("Humidity:", humidity, "% rH")
        string_data = [time_string, temperature, pressure, humidity]
        write_log(string_data)
        print("-"*30)
        time.sleep(30)
    

    可以看到,午休时段(12-14时),空调打高到了30℃以上,所以湿度有所下降,上班后,温度又降回26℃。


    2020-01-16.树莓派+bme280温度传感器傻瓜版说明_第5张图片
    办公室午休温度

参考网址:

  1. http://www.waveshare.net/wiki/BME280_Environmental_Sensor
  2. https://pypi.org/project/RPi.bme280/

你可能感兴趣的:(2020-01-16.树莓派+bme280温度传感器傻瓜版说明)