Title: 树莓派+bme280温度传感器傻瓜版说明[2020-01-16]
去年(2019年)的时候买了一台树莓派3b+,除了监控过一段时间汇率外,一直在吃灰。当时同步购入了BME280温度、气压、湿度传感器,只进行了试用。近日又试了试,用Python实现了传感器数据的读取,整理过程如下。代码较丑,见谅。
-
硬件准备
树莓派3b+
BME280传感器
根据针脚图,将线插好
关于针脚图,文末参考网址1里可以查看,树莓派的接口可以很容易的从网络获得,此处不再引用。
我自己的接线是:
黄、蓝、红(顶部靠里的针脚)
黑
-
配置树莓派接口
sudo raspi-config
选择Interfacing Options -> I2C -> yes 启动I2C内核驱动
选择Interfacing Options -> SPI -> yes启动SPI内核驱动
sudo reboot
重启树莓派
lsmod
查看I2C,SPI模块是否已启动,启动时i2c_bcm2835会显示,结果如下:
sudo apt-get install i2c-tools
i2cdetect -y 1
安装i2c-tools工具,确认BME280模块地址。这里我只接了4根线,ADDR未连接,因此地址为0x77,结果如下:
-
安装Python库
在文末参考网址1中,接下来会使用C对硬件进行驱动。由于我只会一点Python,因此参考了第二个网址的内容
sudo pip install RPi.bme280 // 由于默认环境多数为Python3,因此一般会使用以下而不是以上 sudo pip3 install RPi.bme280
-
简单测试一下时候成功
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) # 湿度
显示结果如下:
-
一个每隔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℃。
参考网址: