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

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

Arduino IoT

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

投稿日:2018年8月9日 更新日:

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 関連のご依頼お待ちしております。本記事と同様のセンサネットワークの試用、試作等対応可能です。

AdSense

AdSense

-Arduino, IoT

執筆者:

関連記事

Raspberry PiでIoT(MQTTで遠隔操作編 その2)MQTT Brokerの構築とPythonでのpub/sub

Raspberry PiでIoT MQTTで遠隔操作編の2回目です。2台のRaspberry Piでインターネット経由でGPIOを操作するというテーマで書いています。前回はMQTTの基本的な内容とMo …

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

前回の記事では、Arduino Ethernetシールドの旧製品版を使ってみました。今回は、CC3000 WiFi シールドを使ってみました。以下の製品です。 CC3000 WiFi シールド 以下は …

感染症対策のためのIoT技術(その3)超音波距離センサーでの距離測定

感染症対策のためのIoT技術について書いています。今回は超音波距離センサーでの距離測定についてです。 新型コロナウイルスによる感染症の対策が始まってから意識する必要が出てきたソーシャルディスタンスとい …

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

Arduino互換機のびんぼうでいいの(S)という製品を買ってきて使ってみました。 これは何といってもネーミングにインパクトがあったので買いました。メーカのaitendoのページによると、「お金をかけ …

感染症対策のためのIoT技術(その2)非接触温度センサーをインターネットへ接続する

前回の続きです。前回は非接触温度センサーでの体温測定について書きました。今回はその非接触温度センサーをインターネットへ接続してクラウドに体温データを蓄積して可視化すという内容で書きます。その上で実務的 …