Raspberry Pi3 と K09421(BME280使用)のI2C接続
Raspberry Pi3 のI2Cを有効化
Raspberry Pi 3は設定を何もしないとI2C通信ができるようになっていません。
なので設定からI2C通信を有効化します。
$ sudo raspi-config
とコンソールに入力します。
するとこのような画面が表示されます。
この中から 9 Advanced Optionsを選択してEnterを押してください。
次にこのような画面が表示されます。その中のA6 I2Cを選択してEnterを押してください。
最後にこの画面が表示され<はい>を選択するとI2Cが有効化されます。
その後最初の画面に戻るのでFinishを選択して終了してください。
以上がI2Cの有効化手順となります。
K09421(BME280使用)の準備
接続するセンサを準備します。
このように袋のなかにセンサ本体とピンが別々にはいっています。これらは半田づけをしてつけなければなりません。
まずこのようにピン6本セットをニッパーなどをつかって切り出します。
できたらこのように組み合わせて半田づけをしていきます。少し弱く細い半田ごてをお進めします。30Wは若干強すぎる気がしました。
つけ終わるとこのような感じになります。
次にセンサのI2C通信を有効化します。
図のように基盤右上のJ3に半田を乗せて導通させます。
これでセンサの準備が完了です。
Raspberry pi3とセンサの配線
K0942は下表のようなピン構成となっています。
ピン番号 | 信号 |
1 | Vdd |
2 | GND |
3 | DNC |
4 | SDA |
5 | VccかGNDに接続するアドレス設定用ピン(通常はGND) |
6 | SCL |
そこで配線を図に起こすと以下のようになります。
これをブレッドボードとジャンパ線を使って実装すると以下のようになります。
Raspberry Pi3からセンサの認識
次に接続したセンサが認識されているかを確認します。
$sudo apt-get install i2ctools
上記コマンドでi2cを扱うためのツールをインストールします。
完了したら以下のコマンドを入力します。
$ i2cdetect -y 1
- y は対話式を無効にする。1はi2cのbus番号です。
正常であれば以下の出力が得られます。
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 --
これはI2C通信を行っているアドレスを検出して出力するものです。
K0942の取り扱い説明書にはデフォルトアドレスは0x76とのことですから認識されていることが確認できました。
次にこのセンサの値を確認します。
この部分のやり方はよくわかっていないので何かしら簡単にできるツールを探してくることにしました。
www.switch-science.com
こちらのSWITCH SCIENCEでサンプルプログラムのpythonがgithubで公開されています。
紹介したページの下のほうにgithubへのリンクが張ってあります。
$sudo apt-get install python-smbus
サンプルプログラムはsmbusを使用するためライブラリをインストールしておきます。
$git clone https://github.com/SWITCHSCIENCE/BME280.git $cd BME280/Python27 $python BME280_sample.py
サンプルプログラムをダウンロードして起動します。
すると以下のような出力が得られます。
temp:29.10 ℃ pressure:1006.03 hPa hum: 50.57 %
これでセンサが正常に動作していることが確認できました。
若干値に誤差があるように感じるので校正が必要なようですが保留としたいと思います。
次はセンサ値を定期的に取得してログとして残すことに挑戦します。