[ESP32-EVB][esp-idf][I2C] BME280で温度、湿度、高度を取得

Olimex ESP32-EVBのESP32開発ボードをespressif/esp-idfで開発して行きます。

I2C BME280を使い湿度、温度、気圧をテストしてみたいと思います。

まずは、ESP32-EVBのI2Cについて確認してみます。

UEXTの端子 5,6 がI2Cとして使えるようです。
2.2kで外付けのプルアップ抵抗も確認出来ます。
GPIO16/I2C-SCK
GPIO13/I2C-SDA

BME280はメジャーな温度湿度高度センサーなので、
Githubでライブラリーを探してみる事にします。

yanbe/bme280-esp-idf-i2c

yanbe/bme280-esp-idf-i2cを試してみたいと思います。

componentsがsubmodule化されています。
エラーになったらこの辺を確認してみてください
ssh等が適切に設定されてなくてハマりそうならとりあえず
BoschSensortec/BME280_driverをgit cloneしてフォルダ名をdriverにしても動きます。

ESP32-EVBのシリアルポートを確認します

/dev/tty.wchusbserial1410
である事が確認出来ます。

makeの設定をします

コンパイルしたプログラムを書き込むためのESP32-EVBのシリアルポートを設定します。

サンプルプログラムを開いて I2C のピンの設定を変更します。

に変更します。

次にI2Cのアドレスを設定します。

今回利用するBME280は aliexpress.com BME280 で安く買えるものです。

esp32-evb-bme280-i2c

これを UEXTの端子 5,6 にi2cとして、1,2で電源,GNDとして接続しています。

BME280のアドレスはBoschのライブラリー側のヘッダーファイルに設定されています。
BME280_driver/bme280.h

サンプルプログラムを開いて I2C のアドレスの設定を変更します。

に変更しました。

コンパイルを行い ESP32-EVBにプログラムを書き込みます。

シリアルコンソールもしくは

で出力を確認してみます。

値が取得できている事が確認できます。

追記 2017-0708
ArduinoベースでもBME280の値を取得してみましょう。

embeddedadventures/BME280: Bosch BME280 Embedded Adventures MOD-1022 weather multi-sensor Arduino codeのライブラリーを使ってみます。

ESP32-EVBではi2cが以下のピンに接続されています。

サンプルコードのWireの初期化を以下のように変更します。

BME280から温度、湿度、気圧が確認できます。

折角ESP32を利用しているので、BLEで温度、湿度、気圧をアドバタイズしてみましょう。

10分でできる Arduino ESP32を使った簡単BLE送信実験 ( 周辺機器 ) – ボクにもわかる電子工作 – Yahoo!ブログのページが参考になります。
ESP32内蔵のホールセンサから得られた値を約3秒ごとにBLE送信し、ビーコンをRaspberry Piで受信の例になっています。

このプログラムを参考に温度、湿度、気圧をアドバタイズしてみます。

BME280のサンプルコードに以下を追加してみます。

BLEのアドバタイズが行われている事が確認できます。

投稿者: yoshimax

Software Engineer #Unity #iOS