You are here

UNO: Blynkで環境ログ

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アプリ


使用パーツ


開発ソフト: 
チップファミリー: 
MCUチップ: