「obnizのパーツライブラリを試す」シリーズでは、obnizのJavaScript SDKパーツライブラリに掲載されているパーツを実際に購入して試した結果をレポートします。
第4回は温度湿度気圧センサBME280です。
- 温度湿度気圧センサBME280を試してみた。
- スイッチサイエンスのBME280を購入した。
- ボードにピンヘッダを半田付けする必要がある。半田付け済みの製品もあるが300円ほど高い。
- 電源ピンはVioとVcoreの2ピンがある。この2つはBME280基板上で接続されているので、Vcoreをobnizから配線する必要はない。
- BME280はSPI通信とI2C通信に対応している。obnizのパーツライブラはI2C通信を使っている。
- パーツライブラに掲載されている1番目と2番目のプログラムを試してみた。
- 秋月電子通商が販売しているBME280ボードも試してみた。
パーツライブラリのページ
購入先
製品構成
スイッチサイエンスには、ピンヘッダを本体に半田付け済みの製品もあります。バラバラの製品より324円値段が高くなっています。
ピン配置
BME280はI2CとSPIの2種類の通信方式に対応しています。SPIの場合、4線式のSPI 4Wと3線式のSPI 3Wのどちらにも対応しているようです。
基板には次のような端子名が記載されています。SPIとI2Cでの役割と比較してみると、端子名はSPI 4Wの端子名になっていることがわかります。
端子名 | Vio | Vcore | GND | CSB | SDI | SCK | SDO |
I2Cでの役割 | Vio | Vcore | GND | Vioに接続 | SDA | SCL | アドレス選択 |
SPI 4Wでの役割 | Vio | Vcore | GND | CSB | SDI | SCK | SDO |
SPI 3Wでの役割 | Vio | Vcore | GND | CSB | SDI/SDO | SCK | DNC (接続しない) |
VcoreとVio
電源端子としてVcoreとVioの2つがあります。BME280チップのマニュアルにはこういう記述があります。記述の中のVDDがVcore、VDDIOがVioに対応しています。
2つの端子の役割分担はこうなっていることがわかります。
- Vcoreはチップ内の電子部品を動作させるための電源
- Vioはチップが外部と通信するための電源
両方に同じ電源を繋いでも問題ないようです。
スイッチサイエンスの商品ページをよく見ると次のような記載があります。
VcoreとVioは基板上で結線されているので、どちらか一方に電源を供給すれば良いことがわかります。
I2Cでの端子の役割
I2Cの場合、端子の役割は次のようになります。
- SCKはI2CのSCL(クロック)。
- SDIはI2CのSDA(データ)。
- SDO端子はI2Cアドレスを選択するために使われます。BMEは2種類のI2Cアドレスを選択できるようになっていて、SDOをGNDに接続すると0x76(デフォールトアドレス)になり、Vioに接続すると0x77になります。
- CSBはI2CとSPIのどちらの通信方式を使うかの識別に使われているようです。I2Cを使う場合はVioに接続しておきます。
I2Cの動作の仕組みをわかりやすく解説している動画があります。
mはげさんのnicovideo: 【ゆっくり解説】I2Cの使い方【電子工作】
配線と実行結果
配線の分析
I2C通信では、2つの通信線「SDA(SDI)とSCL(SCK)」をプルアップする必要があります。obniz内部の仕組みを使ってプルアップできますが、通信を安定させるためには外部でプルアップした方が良いと記載されています。
この写真では、SDI(SDA)とVcoreを抵抗を介して接続しているように見えます。抵抗の値は10KΩのようです。
SCK(SCL)もプルアップする必要がありますが、どのように配線されているのかこの写真からはわかりません。
実際に試した配線 その1
obnizからは次のように配線します。
obniz | io0 | io1 | io2 | io3 | io4 | io5 | io6 |
役割 | Vio | Vcore | GND | CSB | SDI(SDA) | SCK(SCL) | SDO |
ブレッドボード | 電源+ | 接続しない | 電源ー | CSB | SDI | SCK | SDO |
io0(Vio)とio2(GND)はブレッドボードの電源ラインの+とーに配線します。io1(Vcore)は配線しません。BME280ボード上でVioとVcoreが接続されているので配線が不要だからです。io3(CSB)〜io6(SDO)はBME280の対応するピンに配線します。
サンプルプログラムを実行するとこのようになり、温度、湿度、気圧が表示されます。
Objectの前の三角マーク(▶︎)をクリックすると、温度、湿度、気圧が見やすく表示されます。
実際に試した配線 その2
パーツライブラリに掲載されている2番目のサンプルプログラムに対応した配線にしてみます。使用するioはio0〜io3の4つです。
VioとGNDはブレッドボードの電源ラインの+とーに接続します。CSBは電源ラインの+に接続します。SDI(I2CのSDA)とSCK(I2CのSCL)は10KΩの抵抗を介して電源ラインの+に接続しプルアップします。SDOは電源ラインのーに接続します。
obnizからは次のように配線します。
obniz | io0 | io1 | io2 | io3 |
役割 | Vio | GND | SDI(SDA) | SCK(SCL) |
ブレッドボード | 電源+ | 電源ー | SDI | SCK |
サンプルプログラムを実行するとこのようになり、温度、湿度、気圧が表示されます。
秋月電子通商のBME280
秋月電子通商もBME280ボードを販売しています。
スイッチサイエンスのBME280と比較して次のような違いがあります。
- 端子数が6本で、スイッチサイエンス版より1本少ない。VioとVcoreが1つにまとめられてVdd端子になっているため。
- 端子の並び順が若干異なる。
- ボードとピンヘッダに分かれているので、ピンヘッダを半田付けする必要がある。ピンヘッダは90度曲がった形なので、ボードとピンが平行になる。
- プルアップ抵抗がボード上に用意されており、はんだジャンパで使用する/しないを選択できる。
- SPI通信とI2C通信のどちらを使うか選択するためのはんだジャンパが用意されている。
- 価格は、スイッチサイエンス版が1,377円で秋月版が1,080円。秋月版の方が少し安い。
製品に添付されているデータシートにこのような図が描かれています。
配線
はんだジャンパを使うと後でSPIを使いたくなった時にはんだを剥がす必要があり面倒なので、はんだジャンパを使わないで動かしてみます。はんだジャンパを使わない場合は、CSBをVDDに接続することと、SDI(I2CではSDA)とSCK(I2CではSCL)をプルアップする必要があります。プログラムはパーツライブラリの2番目のプログラムを使います。
端子名 | VDD | GND | CSB | SDI(SDA) | SDO(アドレス選択) | SCK(SCL) |
ブレッドボード接続 | 電源+ | 電源ー | 電源+ | プルアップ | 電源ー | プルアップ |
obniz | io0 | io1 | io2 | io3 |
役割 | VDD | GND | SDI(SDA) | SCK(SCL) |
ブレッドボード | 電源+ | 電源ー | SDI | SCK |
パーツライブラリの2番目のプログラムを動かしてみると、ちゃんとデータが取得できました。
パーツリスト
パーツ名 | 購入先 |
BME280搭載 温湿度・気圧センサモジュール | スイッチサイエンス |
BME280使用 温湿度・気圧センサモジュールキット | 秋月電子通商 |
カーボン抵抗(炭素皮膜抵抗)1/4W 10kΩ(100本入) | 秋月電子通商 |
ブレッドボードBB-801 | 秋月電子通商 |
サンハヤト ジャンプワイヤキット SKS-100 | amazon |
ブレッドボード・ジャンパーワイヤー(オスーオス)10cmセット | 秋月電子通商 |