BME280という環境センサーを利用すると、このセンサーだけで温度、湿度、気圧が計測できるのでとても便利です。
しかしながら、最近の多くのセンサーチップと同様に、稼働および信号電圧が3.3Vであるため、5Vで稼働しているArduino UNOには、直接接続できないという問題があります。
I2C-PULSシールドは、センサーなどとMCUの接続に用いられているI2Cの信号線の電圧をセンサー側は3.3V、MCU側は5Vで利用できるように変化する機能を備えています。
I2C-PLUSを利用した環境センサの接続
今回は、BME280とI2C-PLUSシールをArduino UNOに加えて、環境の記録と参照ができるシステムを作成します。
このスケッチも、ネットワーク接続はUSBとPCを利用して行っていますので、イーサシールドなどは必要ありません。
#include <BlynkSimpleStream.h> #include <BME280I2C.h> #include <Wire.h> // BlynkのAuth Tokenを設定 char auth[] = "YOURAPPAUTHTOKENf" ; #define SLEEP_MINUTES 1 BME280I2C bme; #define PRESSURE_HPA 1 // ヘクトパスカル BlynkTimer timer ; void setup() { Serial.begin(9600) ; while (!bme.begin()) { delay(1000) ; } Blynk.begin(Serial, auth) ; // USBのシリアル通信でネットと接続 // サーバーへのデータの送信間隔をミリ秒で指定 timer.setInterval(SLEEP_MINUTES * 60 * 1000L, sendEnv) ; } void sendEnv() { float temp ; // 温度 float hum ; // 湿度 float pres ; // 気圧 float dew ; // 露点 // 気圧(hPa)、温度(摂氏)、湿度を取得 bme.read(pres, temp, hum, true, PRESSURE_HPA) ; dew = bme.dew(true) ; // 露点(摂氏)を取得 Blynk.virtualWrite(V0, temp) ; Blynk.virtualWrite(V1, hum) ; Blynk.virtualWrite(V2, pres) ; Blynk.virtualWrite(V3, dew) ; } void loop() { Blynk.run() ; timer.run() ; }
このスケッチは、PUSH型のIoTデバイスとなっており、スマートフォンのBlynkアプリの実行の有無にかかわらず、指定した間隔で環境データをBlynkサーバーに送信します。
このため、スマートフォンのBlynkアプリは、実行されていなかった期間の計測データも含めていつでも参照することができます。
以下のスマートフォンBlynkアプリの例では、温度等の数値表示は、消費ポイントの少ない[Value Display]を使用しています。小数点以下の表示桁数や、数値の単位なども整えたい場合には、消費ポイントが2倍になりますが、[Laveled Value]を使うとよいでしょう。
それぞれの[Value Display]の入力は、表示したい計測値に対応した仮想ピンを選択します。
また、[READING RATE]は[PUSH]を選択します。
計測値のグラフ表示には、[History Graph]を使用しています。
気圧とそれ以外の数値は値が大きく異なるため、2つの異なるグラフで表示しています。
スマートフォンのBlynkアプリ