Title: 樹莓派+bme280溫度傳感器傻瓜版說(shuō)明[2020-01-16]
去年(2019年)的時(shí)候買了一臺(tái)樹莓派3b+,除了監(jiān)控過(guò)一段時(shí)間匯率外蒸播,一直在吃灰。當(dāng)時(shí)同步購(gòu)入了BME280溫度、氣壓库北、濕度傳感器航罗,只進(jìn)行了試用禀横。近日又試了試,用Python實(shí)現(xiàn)了傳感器數(shù)據(jù)的讀取粥血,整理過(guò)程如下柏锄。代碼較丑酿箭,見諒。
-
硬件準(zhǔn)備
樹莓派3b+
BME280傳感器
BME280
根據(jù)針腳圖趾娃,將線插好
關(guān)于針腳圖缭嫡,文末參考網(wǎng)址1里可以查看,樹莓派的接口可以很容易的從網(wǎng)絡(luò)獲得抬闷,此處不再引用妇蛀。
我自己的接線是:
黃、藍(lán)饶氏、紅(頂部靠里的針腳)
黑
-
配置樹莓派接口
sudo raspi-config
選擇Interfacing Options -> I2C -> yes 啟動(dòng)I2C內(nèi)核驅(qū)動(dòng)
選擇Interfacing Options -> SPI -> yes啟動(dòng)SPI內(nèi)核驅(qū)動(dòng)
sudo reboot
重啟樹莓派
lsmod
查看I2C讥耗,SPI模塊是否已啟動(dòng),啟動(dòng)時(shí)i2c_bcm2835會(huì)顯示疹启,結(jié)果如下:
紅圈中可見i2c_bcm2835
sudo apt-get install i2c-tools
i2cdetect -y 1
安裝i2c-tools工具古程,確認(rèn)BME280模塊地址。這里我只接了4根線喊崖,ADDR未連接挣磨,因此地址為0x77,結(jié)果如下:
-
安裝Python庫(kù)
在文末參考網(wǎng)址1中荤懂,接下來(lái)會(huì)使用C對(duì)硬件進(jìn)行驅(qū)動(dòng)茁裙。由于我只會(huì)一點(diǎn)Python,因此參考了第二個(gè)網(wǎng)址的內(nèi)容
sudo pip install RPi.bme280 // 由于默認(rèn)環(huán)境多數(shù)為Python3节仿,因此一般會(huì)使用以下而不是以上 sudo pip3 install RPi.bme280
-
簡(jiǎn)單測(cè)試一下時(shí)候成功
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) # 通過(guò)這一行晤锥,可以獲取數(shù)據(jù) print(data.id) print(data.timestamp) print(data.temperature) # 溫度 print(data.pressure) # 壓力 print(data.humidity) # 濕度
顯示結(jié)果如下:
測(cè)試輸出結(jié)果.PNG
-
一個(gè)每隔30秒獲取溫度、壓力廊宪、濕度的程序矾瘾,數(shù)據(jù)會(huì)保存在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)
可以看到,午休時(shí)段(12-14時(shí))箭启,空調(diào)打高到了30℃以上壕翩,所以濕度有所下降,上班后傅寡,溫度又降回26℃放妈。
辦公室午休溫度
參考網(wǎng)址: