利用AE-BME280和Raspberry Pi讀取溫度、濕度和壓力值

bme280

在本課程中,我們將使用一個多功能模組,協助Raspberry Pi同時測量溫度、濕度和氣壓三種參數。

該專案需要焊接!如上圖所示,該零件帶有一個單獨的排針,因此我們需要將其焊接到麵包板上。

AE-BME280

bme280

圖 1: AE-BME280 / © Akizuki Denshi

使用BME280的溫度/濕度/壓力感測器模組套件BME280 (日語)
憑藉搭載Bosch Sensortec BMP280的感測器模組,您可以同時測量溫度、濕度和氣壓。該模組還可以透過I2C或SPI與微控制器通信。

我們將在本課程中使用這款超精巧型AE-BME280壓力感測器(尺寸:16x10mm)。該模組採購於日本零件供應商Akizuki Denshi,您也可以使用具有相同晶片的Adafruit BME280模組。請注意,Adafruit的引腳佈局略有不同,因此連線時請務必參考其技術規格書。

Adafruit BME280 技術規格書

BME280——一塊位於元件中心的微小銀晶片——承擔了大部分工作。該模組表面上還有一個非常小的開口,其作用是讀取數值,因此切勿遮蓋這個開口。

AE-BME280板和排針買來就是分開的。連接Raspberry Pi的最簡單方法就是將兩者組裝在一起,如圖1所示。這需要焊接。我購買的排針有10個引腳,但是連接AE-BME280只需6個引腳,所以 應剪掉第6個引腳後面的排針。

技術規格請參見AE-BME280的日語手冊

您可以用I2C或SPI進行通訊。由於我之前已經用過SPI,所以這次我將嘗試使用I2C。

I2C – 維基百科
I2C (積體電路匯流排)是一種由Philips Semiconductor(現為NXP Semiconductors)發明的序列匯流排。I2C代表I-平方-C。由於純文字環境中的字元限制,我們將其稱為I2C或IIC。該協定通常用於將低速週邊IC連至主機板、嵌入式系統和手機等裝置。

bme280

圖 2: 引腳編號和功能–摘自AE-BME280技術規格書

連接I2C或SPI是不同的,所以我們必須注意引腳接法。請參閱AE-BME280 技術規格書 (日語)Adafruit BME280 技術規格書 (英語)

如圖2所示,使用I2C時,我們需要焊接 J3 跳線。我們必須在此跳線處填充焊料。請注意,這僅適用於AE-BME280晶片。Adafruit晶片不需要設定此跳線。

焊接!

bme280

圖 3: 焊接裝置

現在,是時候焊接了!首先應加熱烙鐵。

焊料 – 維基百科
焊料是一種主要由鉛和錫組成的合金,與電烙鐵配合使用。主要用於連接金屬元件,以及將電氣元件焊接到電路板上。根據其成分,焊料會在4-10度時變成超導體。

我在這個項目中用的是這種焊料。這種焊料非常柔韌,容易洩漏,因此只能一點一點地送錫。我們還應準備一個吸錫器,以防萬一。如果送錫過多,可以用吸錫器吸掉多餘的焊料,所以要小心!

bme280

圖 4: 焊接 J3

首先,我們應焊接圖4所示的J3跳線。J3與相鄰引腳靠的很近,所以要小心不要焊接在一起。送錫時要小心仔細!

 

bme280

圖 5: 焊接排針

下一步是連接排針。我從電路板背面焊接排針。引腳之間的間隙非常小,因此很難將電烙鐵塞入。電路板兩端引腳的焊料結塊範例如圖5所示。

焊接技巧是先用烙鐵頭稍稍加熱引腳,然後再送錫。如果烙鐵尖過熱,焊料會燃燒並形成結塊。因此,我建議焊完一個引腳後,從電源插座上拔下電烙鐵並冷卻後再焊接下一個引腳。不必著急。小心不要將引腳焊接在一起。慢慢來!

bme280

圖 6: 連至麵包板的 AE-BME280

完成!排針焊接完畢,現在電路板垂直插在麵包板上。

焊接時,我不小心碰到了排針末端並稍微燙了一下,但幸運的是這並沒有影響讀數。

接線

現在,讓我們將Raspberry Pi連接到AE-BME280。連接示意圖如圖7所示,因為我們使用的是I2C通信。

bme280

圖 7: I2C 連接方法–摘自AE-BME280技術規格書

在Raspberry Pi上,“SDA”連至GPIO2(引腳3),“SCL”連到GPIO3(引腳5)。VDD連接到引腳1,這樣前3個GPIO引腳按順序排列(參見圖8)。接線時容易記憶。

 

bme280

圖 8: 接線示意圖

我將AE-BME280上的引腳5(SDO)連至GND,您也可以將其連至VDD。(請注意,如果這樣做,資料收集位址會發生變化)。

設定 Raspberry Pi

Raspberry Pi默認禁用I2C。啟用I2C的方法與啟用SPI的方法相同,請參閱上一個課程:Raspberry Pi WebIOPi 物聯網,類比輸入程式設計。在功能表中選擇[Preferences] – [Raspberry Pi Configuration],然後打開“Settings ”螢幕。

bme280

點擊[Interfaces]選項卡,將[I2C]設為[Enable]

必須重新開機系統該設定才能生效,因此請在快顯視窗中按一下“Yes”。重啟後,I2C傳輸已啟用。

bme280

(OS: 2015年11月21日發佈的Raspbian Jessie版本)

接下來,我們安裝使用I2C所需的套裝軟體。我們需要在命令列中使用[i2c-tools],在Python中使用[python-smbus]。

安裝命令
sudo apt-get install i2c-tools
sudo apt-get python-smbus

如果運行命令“i2cdetect”,系統會檢測透過I2C方式連接的所有裝置。

sudo i2cdetect -y 1

bme280

76是十六進位數;代表0x76

注:選擇I2C位址時,如果電路板(SDO)上的引腳5連至GND,那麼默認為[0x76];如果連至VDD,則默認為[0x77]。

我將SDO連接到GND,因此顯示0x76,但如果連至VDD,則會顯示0x77。

此外,i2Cdetect命令中的最後一個參數取決於Raspberry Pi的版本。Revision 1(2012年10月14日之前發貨的Raspberry Pi Model B)使用0,而Revision 2指定使用1。我用的是Raspberry Pi 2 Model B,因此參數值為1。

我運行程式時發生了以下錯誤:

bme280

發生錯誤後,我查看了dev目錄,看到有一個名為[i2c-1]而不是[i2c-0]的檔。我無法打開這個檔,但我認為該檔包含記錄的測量值。

sudo i2cdump -y 1 0x76

bme280

上圖是我用i2Cdump命令輸出暫存器值的結果。看起來裝置讀取了很多數值,但是我無法分辨哪些值來自哪裡以及為什麼是這樣子的。

我很難對這些值進行轉換/計算,所以我從Switch Science程式館中借用了一些Python原始程式碼:

SWITCHSCIENCE/BME280

按一下右上角的“Download ZIP”連結,將Python27資料夾中的“bme_280_sample.py”文件放在Raspberry Pi的相應位置。注意:此程式需要“python-smbus”套裝軟體才能運行。

python /home/pi/bme280_sample.py

準備工作完成後,運行程式!成功運行之後,您會看到三行輸出:溫度、壓力和濕度。

bme280

注意:您必須具有root許可權才能運行smbus套裝軟體。和往常一樣,我嘗試用PHP運行,但是出現錯誤,所以我放棄了。bme_280_sample.py 原始程式碼中有很多複雜的計算,雖然我Python經驗很少,但是我仍然設法修改了輸出部分。我的部分客製化代碼如下:

/home/pi/bme280_custom.py

 

我並沒有修改太多代碼,只是對主要的“處理”部分進行了一些小的調整。我將“print”改為“return”並進行了相關編輯,使得程式以CSV格式返回數值(帶逗號)。

/home/pi/bme280.py

 

我創建了另一個py,從之前修改過的“bme280_custom.py”中調用readData()函數。這會將讀取的數值保存在CSV檔中。文件的設定如下:記錄一整天的資料,以日期作為檔案名保存。

我用cron登記了這個程式並進行了設定,讓它定期運行。現在完成了!
sudo crontab -e

0-59/10 * * * * /home/pi/bme280.py

注:我將其設定為每10分鐘運行一次。

接下來,我將創建一個PHP檔來顯示資料。我用 DS18B20 溫度感測器製作溫度計時做過類似事情。


/var/www/html/bme280.php

 

 

我創建了一個簡單的PHP檔,在表中顯示相關資料(您必須安裝“php5”套裝軟體才能使用PHP)。

bme280

透過這種方式,我可以用瀏覽器——導航至 http://localhost/bme280.php —— 查看CSV檔的內容。即使每隔10分鐘,壓力也會發生巨大變化!

Raspbian最新版本預裝了一個名為“LibreOffice”的辦公套件。如果您只是想查看資料,那麼可以使用“LibreOffice Calc”(按兩下CSV檔),然後您會看到如下內容:

總結

今天,我們用AE-BME280感測器構建了一個簡單模組來測量多個數值(壓力、濕度和溫度)。這麼小的感測器可以測量多達三個不同的參數,真是太神奇了。感測器非常微小,但非常強大!

這個項目還讓我提高了焊接技巧。AE-BME280上的引腳非常小,彼此非常靠近,我當時還擔心可能會把多個引腳焊接在一起。最後,成品的引腳焊接得很好,我很高興。需要焊接的專案可能比較困難,但是值得!