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を試してみたいと思います。
1 |
$ git clone https://github.com/yanbe/bme280-esp-idf-i2c.git --recursive |
componentsがsubmodule化されています。
エラーになったらこの辺を確認してみてください
ssh等が適切に設定されてなくてハマりそうならとりあえず
BoschSensortec/BME280_driverをgit cloneしてフォルダ名をdriverにしても動きます。
ESP32-EVBのシリアルポートを確認します
1 |
$ ls /dev/tty.* |
/dev/tty.wchusbserial1410
である事が確認出来ます。
makeの設定をします
1 2 |
$ cd bme280-esp-idf-i2c $ make menuconfig |
コンパイルしたプログラムを書き込むためのESP32-EVBのシリアルポートを設定します。
サンプルプログラムを開いて I2C のピンの設定を変更します。
1 |
$ emacs main/main.c |
1 2 |
#define SDA_PIN GPIO_NUM_15 #define SCL_PIN GPIO_NUM_2 |
を
1 2 |
#define SDA_PIN GPIO_NUM_13 #define SCL_PIN GPIO_NUM_16 |
に変更します。
次にI2Cのアドレスを設定します。
今回利用するBME280は aliexpress.com BME280 で安く買えるものです。

これを UEXTの端子 5,6 にi2cとして、1,2で電源,GNDとして接続しています。
BME280のアドレスはBoschのライブラリー側のヘッダーファイルに設定されています。
BME280_driver/bme280.h
サンプルプログラムを開いて I2C のアドレスの設定を変更します。
1 |
$ emacs main/main.c |
1 |
BME280_I2C_ADDRESS2 |
を
1 |
BME280_I2C_ADDRESS1 |
に変更しました。
コンパイルを行い ESP32-EVBにプログラムを書き込みます。
1 |
$ make flash |
シリアルコンソールもしくは
1 |
$ make monitor |
で出力を確認してみます。
値が取得できている事が確認できます。
追記 2017-0708
ArduinoベースでもBME280の値を取得してみましょう。
embeddedadventures/BME280: Bosch BME280 Embedded Adventures MOD-1022 weather multi-sensor Arduino codeのライブラリーを使ってみます。
ESP32-EVBではi2cが以下のピンに接続されています。
1 2 |
GPIO16/I2C-SCK GPIO13/I2C-SDA |
サンプルコードのWireの初期化を以下のように変更します。
1 2 |
// Wire.begin(); Wire.begin(13,16); |
BME280から温度、湿度、気圧が確認できます。
折角ESP32を利用しているので、BLEで温度、湿度、気圧をアドバタイズしてみましょう。
10分でできる Arduino ESP32を使った簡単BLE送信実験 ( 周辺機器 ) – ボクにもわかる電子工作 – Yahoo!ブログのページが参考になります。
ESP32内蔵のホールセンサから得られた値を約3秒ごとにBLE送信し、ビーコンをRaspberry Piで受信の例になっています。
このプログラムを参考に温度、湿度、気圧をアドバタイズしてみます。
BME280のサンプルコードに以下を追加してみます。
1 2 3 4 5 6 7 8 9 10 |
#include "SimpleBLE.h" SimpleBLE ble; void printCompensatedMeasurements(void) { // String out = "bme:" + String(temp,1) + ":" + String(humidity,1) + ":" + String(pressure,1); ble.begin(out); delay(50); ble.end(); } |
BLEのアドバタイズが行われている事が確認できます。
Software Engineer #Unity #iOS