2020-01-16.樹莓派+bme280溫度傳感器傻瓜版說明

Title: 樹莓派+bme280溫度傳感器傻瓜版說明[2020-01-16]

去年(2019年)的時候買了一臺樹莓派3b+,除了監(jiān)控過一段時間匯率外,一直在吃灰。當(dāng)時同步購入了BME280溫度、氣壓、濕度傳感器,只進行了試用。近日又試了試,用Python實現(xiàn)了傳感器數(shù)據(jù)的讀取,整理過程如下。代碼較丑,見諒。

  1. 硬件準(zhǔn)備

    樹莓派3b+

    BME280傳感器


    BME280

根據(jù)針腳圖,將線插好

關(guān)于針腳圖,文末參考網(wǎng)址1里可以查看,樹莓派的接口可以很容易的從網(wǎng)絡(luò)獲得,此處不再引用。

我自己的接線是:

黃、藍、紅(頂部靠里的針腳)


針腳接好后的狀態(tài)
  1. 配置樹莓派接口

    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é)果如下:

顯示地址為0x77
  1. 安裝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
    
  2. 簡單測試一下時候成功

    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
  1. 一個每隔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)址:

  1. http://www.waveshare.net/wiki/BME280_Environmental_Sensor
  2. https://pypi.org/project/RPi.bme280/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容