電子工作初心者がRaspberry Pi Zeroに温湿度気圧センサBME280を接続してみた

初心者でも意外と簡単に電子工作できました
2021.08.13

大阪オフィスの小倉です。

最近色んな所で空気センサーを見かけるようになりました。

自宅にも導入しようかと思ったのですが、せっかくなので以前から興味があったRaspberry Piを使って自作に挑戦してみました。 今回は温度、湿度、気圧を取得できるBME280というセンサーをRaspberry Piに接続して動かしてみます。

やってみる

今回用意した機材は以下になります。

はんだ付け

いきなり最大の難関です。

面倒なことはしたくなかったので、はんだ付けの必要ない部品を入手して、ワイヤで連結するだけで完成させようと思っていたのですが、私が購入したBME280はピン部分がはんだ付けされておらず、自分ではんだ付けする必要がありました(家に届いてから気づく)。

100円ショップではんだごてとはんだを購入し、炎天下のベランダで約20年ぶりにはんだ付けに挑戦した結果がコレ。

・・・今後の伸び代に期待しましょう。

Raspberry Piへセンサを接続

以下の要領でRaspberry Piとセンサを接続します

センサ側 RaspberryPi Zero WH(カッコはピン配置の番号)
BME280 VDD 3.3V(1)
BME280 GND GND(9)
BME280 CSB 3.3V(17)
BME280 SDI GPIO2(3)
BME280 SDO GND(14)
BME280 SCK GPIO3(5)

Raspberry Piの初期設定

以下の記事を参考に

  • SDカードへOS(Raspberry Pi OS Lite)の書き込み
  • ホスト名、WiFi、SSH接続設定

を行いました。

今回ホスト名はraspberrypizeroと設定しました。

注意点として、今回使用したRaspberryPi Zero WHは2.4GHzのWifiにのみ対応しています。

SDカードをRaspberryPiに差し込み、電源を接続すると起動するので、WiFiとSSH接続の確認をしておきます。

ping raspberrypizero.local
ssh pi@raspberrypizero.local

SSH接続できたら、パッケージを最新化しておきます

sudo apt-get update
sudo apt-get upgrade -y

I2C通信を有効化する

設定画面を呼び出します

sudo raspi-config

3 Interface Optionsを選択

P5 I2Cを選択

Yes を選択

設定が完了したら再起動しておきます

sudo reboot

なお、以下の記事にあるように、この手順はコマンドでも設定できます。

センサの接続確認

i2c-toolsをインストール後、コマンドを実行します

sudo apt-get install i2c-tools
i2cdetect -y 1
pi@raspberrypizero:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

説明書によると

I2 C のアドレス選択は、基板の 5 番ピン (SDO) を GND に接続すると [0x76]( デフォルト )、VDD に接続すると [0x77] になります。

とあり、今回はGNDに接続しているので、図のように76が見えればOKです。

Pythonサンプルコードの実行

スイッチサイエンスさんのサンプルコードを使ってセンサの値を取得してみます。

先に必要なパッケージをインストールしておきます。

sudo apt-get install python-smbus
wget https://raw.githubusercontent.com/SWITCHSCIENCE/BME280/a43306ece7e17f3009748599e1ca4d0160729559/Python27/bme280_sample.py
$ python bme280_sample.py
pi@raspberrypizero:~ $ python bme280_sample.py
temp : 29.37  ℃
pressure : 1008.42 hPa
hum :  61.28 %

無事に値が取得できましたね!

おまけ1 Pythonサンプルコードの実行(Python3)

先のサンプルコードはPython2用のコードなので、Python3で動かすことは出来ませんでしたが、

  • Python2のPrint文をPython3のPrint()関数に置き換える
  • python3-smbusをインストールする
    • sudo apt-get install python3-smbus

上記の手順を踏むことでPython3でも実行できました(※Python2のコードと厳密に同一の値が取得できているかは確認していないので、試す場合は自己責任でお願いします)。

おまけ2 CO2センサーの接続

以下の記事を参考に、CO2センサも接続しました。

2つのセンサを接続した配線は以下の様になりました。

センサ側 RaspberryPi Zero WH(カッコはピン配置の番号)
BME280 VDD 3.3V(1)
BME280 GND GND(9)
BME280 CSB 3.3V(17)
BME280 SDI GPIO2(3)
BME280 SDO GND(14)
BME280 SCK GPIO3(5)
MH-Z19C Tx GPIO15(10)
MH-Z19C Rx GPIO14(8)
MH-Z19C GND GND(6)
MH-Z19C Vin 5V(4)

まとめ

電子工作は初心者だったのですが、できるだけはんだづけ不要なパーツを使うことで、思ったより簡単にセンサを接続して動かすことができました。

はんだづけ不可避となったときはどうなることかと思ったのですが、いざやってみると電子工作やったった感が出てきたので、引き続き挑戦したいと思います。

センサの値が取得できたので、今後はこれを使って可視化や通知などを作っていきたいと思います。

参考

以下の記事を参考にさせて頂きました