電子工作初心者がRaspberry Pi Zeroに温湿度気圧センサBME280を接続してみた
大阪オフィスの小倉です。
最近色んな所で空気センサーを見かけるようになりました。
自宅にも導入しようかと思ったのですが、せっかくなので以前から興味があったRaspberry Piを使って自作に挑戦してみました。 今回は温度、湿度、気圧を取得できるBME280というセンサーをRaspberry Piに接続して動かしてみます。
やってみる
今回用意した機材は以下になります。
- Raspberry Pi Zero WH(ピンヘッダ実装済み)
- BME280(温度、湿度、気圧を取得できるセンサ)
- ケーブル(メス-メス)
- マイクロSDカード
- スマホのMicroUSB充電ケーブル
はんだ付け
いきなり最大の難関です。
面倒なことはしたくなかったので、はんだ付けの必要ない部品を入手して、ワイヤで連結するだけで完成させようと思っていたのですが、私が購入した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 [email protected]
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) |
まとめ
電子工作は初心者だったのですが、できるだけはんだづけ不要なパーツを使うことで、思ったより簡単にセンサを接続して動かすことができました。
はんだづけ不可避となったときはどうなることかと思ったのですが、いざやってみると電子工作やったった感が出てきたので、引き続き挑戦したいと思います。
センサの値が取得できたので、今後はこれを使って可視化や通知などを作っていきたいと思います。
参考
以下の記事を参考にさせて頂きました