LoginSignup
4
9

More than 5 years have passed since last update.

温度・湿度・気圧センサーBME280をSPI通信でアクセスする

Last updated at Posted at 2017-01-09

温度・湿度・気圧センサーBME280をESP8266 ArduinoのSPI通信でアクセスするライブラリーを作りました。

やりたいこと

ESP8266 Arduinoで環境モニターを作っています。今まではBME280をI2C通信でアクセスして温度、湿度、気圧を測定していましたが、これに加えてフォトトランジスター(NJL7502L)で照度を測ることにしました。ESP8266にはアナログ入力が一つありますが、これは電池の電圧を測るのに使っているので、照度の測定にはADコンバーター(MCP3002)を使いました。BME280はI2C通信とSPI通信のどちらでもアクセスできますが、MCP3002はSPI通信でしかアクセスできません。そこで、BME280もSPI通信でアクセスするようにしました。

BME280とESP8266の接続

SPI通信には3線で通信する方式と4線で通信する方式があります。BME280は3線式、4線式の両方に対応できますが、MCP3002が4線式なのでBME280も4線式で使うことにします。ESP2866とBME280は以下のように接続します。

ESP8266 BME280
IO14: HSPI_CLK SCK
IO12: HSPI_MISO SDO
IO13: HSPI_MOSI SDI
IO15: HSPICS CSB

         
複数のSPIデバイスを接続するときはCLK、MISO、MOSIは共通に(バス状に)接続し、CSはデバイスごとに個別に接続します。つまりデバイスの数だけESP8266のピンが必要になります。ESP8266のマニュアルにはIO15ピンがHSPICSに割り当てられていますが、CSはSPIデバイスと通信するときに対応するピンをLOWレベルにすればいいので、別のGPIOピンも使うことができます。

SPI通信版BME280ライブラリー

BME280にアクセスするプログラムは再利用しやすいよう、ライブラリーにしました。

BME280を制御するクラスを定義し、メンバー関数として初期化(begin)と温度、湿度、気圧の読み出し(readTemperature、readHumidity、readPressure)を用意しました。

使い方はこんな感じです。

#include <SPI.h>
#include "BME280_SPI.h"                 // SPI通信版BME280ライブラリーのヘッダーファイル

BME280 bme280;                          // BME280のデーターを定義

    bme280.begin(BME_CS);               // BME280の初期化

    temp = bme280.readTemperature();    // 温度の読み出し
    humid = bme280.readHumidity();      // 湿度の読み出し
    pressure = bme280.readPressure();   // 気圧の読み出し

ライブラリーの全体とサンプルプログラムはGithubに公開しました。
* https://github.com/TakehikoShimojima/BME280_SPI

次はこれを使って環境モニター3号機を作ります。

4
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
9