obniz

obnizのパーツライブラリを試す:温度湿度気圧センサBME280

「obnizのパーツライブラリを試す」シリーズでは、obnizのJavaScript SDKパーツライブラリに掲載されているパーツを実際に購入して試した結果をレポートします。

第4回は温度湿度気圧センサBME280です。

要点
  • 温度湿度気圧センサBME280を試してみた。
  • スイッチサイエンスのBME280を購入した。
  • ボードにピンヘッダを半田付けする必要がある。半田付け済みの製品もあるが300円ほど高い。
  • 電源ピンはVioとVcoreの2ピンがある。この2つはBME280基板上で接続されているので、Vcoreをobnizから配線する必要はない。
  • BME280はSPI通信とI2C通信に対応している。obnizのパーツライブラはI2C通信を使っている。
  • パーツライブラに掲載されている1番目と2番目のプログラムを試してみた。
  • 秋月電子通商が販売しているBME280ボードも試してみた。

パーツライブラリのページ

BME280は、パーツライブラリの「Temperature Sensor」に分類されています。

 

パーツライブラリのページはこちらです。

購入先

パーツライブラリのページには、スイッチサイエンスadafruitの商品ページへのリンクが記載されています。私はスイッチサイエンスで購入しました。

製品構成

製品パッケージには、本体とピンヘッダが入っています。ピンヘッダを半田付けする必要があります。

スイッチサイエンスには、ピンヘッダを本体に半田付け済みの製品もあります。バラバラの製品より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が使われていることがわかります。

 

wired( )関数の例題プログラムでは
となっていて、各端子が順番通りにio0io6に割り当てられています。obnizにBME280を直接挿せば良さそうに思えますが、パーツライブラリのページにはこのような記述があります。

I2C通信では、2つの通信線「SDA(SDI)とSCL(SCK)」をプルアップする必要があります。obniz内部の仕組みを使ってプルアップできますが、通信を安定させるためには外部でプルアップした方が良いと記載されています。

この写真では、SDI(SDA)とVcoreを抵抗を介して接続しているように見えます。抵抗の値は10KΩのようです。

SCK(SCL)もプルアップする必要がありますが、どのように配線されているのかこの写真からはわかりません。

 

実際に試した配線 その1

パーツライブラリに掲載されている最初のサンプルプログラムに対応した配線にしてみます。
VioとGNDはブレッドボードの電源ラインの+とーに接続します。SDI(I2CのSDA)とSCK(I2CのSCL)は10KΩの抵抗を介して電源ラインの+に接続しプルアップします。

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セット 秋月電子通商