Title: 樹莓派+bme280溫度傳感器傻瓜版說明[2020-01-16]
去年(2019年)的時候買了一臺樹莓派3b+,除了監(jiān)控過一段時間匯率外,一直在吃灰。當(dāng)時同步購入了BME280溫度、氣壓、濕度傳感器,只進行了試用。近日又試了試,用Python實現(xiàn)了傳感器數(shù)據(jù)的讀取,整理過程如下。代碼較丑,見諒。
-
硬件準(zhǔn)備
樹莓派3b+
BME280傳感器
BME280
根據(jù)針腳圖,將線插好
關(guān)于針腳圖,文末參考網(wǎng)址1里可以查看,樹莓派的接口可以很容易的從網(wǎng)絡(luò)獲得,此處不再引用。
我自己的接線是:
黃、藍、紅(頂部靠里的針腳)
黑
-
配置樹莓派接口
sudo raspi-config選擇Interfacing Options -> I2C -> yes 啟動I2C內(nèi)核驅(qū)動
選擇Interfacing Options -> SPI -> yes啟動SPI內(nèi)核驅(qū)動
sudo reboot重啟樹莓派
lsmod查看I2C,SPI模塊是否已啟動,啟動時i2c_bcm2835會顯示,結(jié)果如下:
紅圈中可見i2c_bcm2835
sudo apt-get install i2c-tools
i2cdetect -y 1
安裝i2c-tools工具,確認(rèn)BME280模塊地址。這里我只接了4根線,ADDR未連接,因此地址為0x77,結(jié)果如下:
-
安裝Python庫
在文末參考網(wǎng)址1中,接下來會使用C對硬件進行驅(qū)動。由于我只會一點Python,因此參考了第二個網(wǎng)址的內(nèi)容
sudo pip install RPi.bme280 // 由于默認(rèn)環(huán)境多數(shù)為Python3,因此一般會使用以下而不是以上 sudo pip3 install RPi.bme280 -
簡單測試一下時候成功
import smbus2 import bme280 port = 1 address = 0x77 # 這里根據(jù)第2步中i2cdetect -y 1的結(jié)果填寫0x77或0x76 bus = smbus2.SMBus(port) calibration_params = bme280.load_calibration_params(bus, address) data = bme280.sample(bus, address, calibration_params) # 通過這一行,可以獲取數(shù)據(jù) print(data.id) print(data.timestamp) print(data.temperature) # 溫度 print(data.pressure) # 壓力 print(data.humidity) # 濕度顯示結(jié)果如下:
測試輸出結(jié)果.PNG
-
一個每隔30秒獲取溫度、壓力、濕度的程序,數(shù)據(jù)會保存在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時),空調(diào)打高到了30℃以上,所以濕度有所下降,上班后,溫度又降回26℃。
辦公室午休溫度
參考網(wǎng)址: