株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

*

ESP-WROOM-02でもセンサネットワーク稼働試験

      2018/08/10

ESP-WROOM-02でもセンサネットワークを稼働してみます。ESP-WROOM-02でもというのは今までRaspberry Piで稼働してきたのでESP-WROOM-02でも稼働してみようということです。

ESP-WROOM-02とはEspressif SystemsのSoCであるESP8266を搭載したWiFiモジュールです。ここでは、以下のArduino互換の基板に搭載したボードを使っています。他にもいろいろなタイプの開発ボードがありますが、私の場合はArduino互換が使いやすいと思ったのでこれにしました。

また既にこの後継のモジュールのESP32も発売されていますが、ここではまずいろいろと実績もあるだろうということでESP-WROOM-02の方を使ってみました。
(※今回は開発環境の構築方法やプログラム詳細については取り上げません。こういった構成で稼働試験をやってみますということが要点です。必要な場合はページ最後の関連リンク等を参照して下さい。)

今回の構成と特徴
センサとクラウドの構成
ESP-WROOM-02開発ボードに直接Aitendo製のBME280を接続してWi-Fi接続のインターネット経由でAmbientに気温、湿度、気圧を送信します。

Deep-Sleepモードでの稼働
ESP8266の大きな特徴としてDeep-Sleepモードがあります。これにより非常に省電力で稼働出来るようになります。このモードで稼働するにはIO16のピンをRST端子に接続しておく必要があります。この接続がないとSleepから復帰(リセット)出来ません。(上の画像では黒いジャンパワイヤで接続しています。)

スケッチ(プログラム)
今回のスケッチは以下です。サンプルプログラムのレベルです。動作保証は出来ませんのでご了承ください。

#include <Wire.h>
#include <ESP8266WiFi.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#include "Ambient.h"

extern "C" {
#include "user_interface.h"
}

//10分が目標
#define PERIOD 600

//BME280(I2C)
Adafruit_BME280 bme; 

//Wifi
const char* ssid = "APName";
const char* password = "PASSWORDPASSWORD";

//ambient
unsigned int channelId = 9999;
const char* writeKey = "AAAABBBB11112222";

WiFiClient client;
Ambient ambient;

void setup() {
  WiFi.mode(WIFI_STA);
  int t = millis();

  Serial.begin(115200);
  delay(10);

  Serial.println("");
  Serial.println("Start");

  //Wi-Fi APに接続
  WiFi.begin(ssid, password);  
  while (WiFi.status() != WL_CONNECTED) {  //  Wi-Fi AP接続待ち
    delay(100);
  }

  Serial.print("WiFi connected\r\nIP address: ");
  Serial.println(WiFi.localIP());

  //I2Cアドレス0x76を指定
  bool status = bme.begin(0x76);
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
  Serial.println();

  //チャネルIDとライトキーを指定してAmbientの初期化
  ambient.begin(channelId, writeKey, &client); 

  //Ambientに連携
  ambient.set(1, bme.readTemperature());
  ambient.set(2, bme.readHumidity());
  ambient.set(3, bme.readPressure() / 100.0F);
  ambient.send();
  
  printValues();
  
  t = millis() - t;
  t = (t < PERIOD * 1000) ? (PERIOD * 1000 - t) : 1;

  ESP.deepSleep(t * 1000, RF_DEFAULT);
  delay(1000);
}

void printValues() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" *C");

  Serial.print("Pressure = ");

  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");

  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}

void loop() {
}

稼働状況
まずはACアダプタからの電源供給で2週間ぐらい問題なく稼働しました。その後に電池駆動に切り替えました。今現在電池駆動で数日が経過という状況です。問題なく稼働中です。

2018/08/10 電池が切れました。
思ったより早く電池が切れました。11日ぐらいです。上記の画像の通りでLEDが点灯したままだったのでこうなったとも思います。もう少し考えてまたテストしたいと思います。TWE-LITEの方は1ヶ月程経過しましたが引き続き稼働中です。

実際のSleep時間
上記のスケッチで10分間隔での送信を目的としたのですが、実際には9分45秒ぐらいで15秒ぐらい早い状態です。精度が要求される場合はこの実際の計測時間からの補正やRTCを使用する等の必要があります。

Sleep時間の参考サイト
ESP8266で300秒deepSleepしたら実際に何秒眠るのか調べた

その他関連サイト
AmbientでIoTをはじめよう 温度、湿度、気圧を測定し、記録する
ESPr Developer + Ambientで自宅の環境モニターを作る

最後に自社PRですが、Raspberry Pi 関連のご依頼お待ちしております。本記事と同様のセンサネットワークの試用、試作等対応可能です。

 - Arduino, IoT

AdSense

AdSense

  関連記事

温度センサADT7410(その2)Arduinoでの利用

温度センサADT7410の2回目です。前回はI2C通信の簡単な概要とADT741 …

Raspberry PiでIoT(MQTTで遠隔操作編 その1)MQTTでの通信

Raspberry PiでIoTのMQTTで遠隔操作編のシリーズを始めます。実際 …

Raspberry PiでIoT(温度・湿度・気圧データ編 その4)アラートメール送信

Raspberry PiでIoT 温度・湿度・気圧データ編の4回目です。前回まで …

Arduino互換機の「びんぼうでいいの(S)」を使ってみた

Arduino互換機のびんぼうでいいの(S)という製品を買ってきて使ってみました …

Raspberry PiでIoT(MQTTで遠隔操作編 その3)Raspberry PiのGPIOとHeroku連動Sub編

Raspberry PiでIoT MQTTで遠隔操作編の3回目です。2台のRas …

Arduino CC3000 WiFi シールドを使ってみた

前回の記事では、Arduino Ethernetシールドの旧製品版を使ってみまし …

Arduino Ethernetシールド(旧製品)を使ってみた

Arduino Ethernetシールド(旧製品)を使ってみました。Arduin …

AndroidでUSBシリアル通信(その2)ライブラリサンプルのArduinoスケッチ

AndroidでUSBシリアル通信の2回目です。前回はハードウェア構成、ソフトウ …

Arduino UnoでSPI通信(その2)温度センサADT7310

Arduino UnoでSPI通信の2回目です。前回のArduino UnoでS …

温度管理システム的なものを作ってみる(その2)Arduinoでの温度取得からスマホへ送信

「温度管理システム的なものを作ってみる」の2回目です。前回は全体的な内容について …