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

システム開発エンジニアの西田五郎が運営しております。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で遠隔操作編 その1)MQTTでの通信

Raspberry PiでIoTのMQTTで遠隔操作編のシリーズを始めます。実際に動作させてみるということを重点として進めます。ここでの遠隔操作は2台のRaspberry Pi間でインターネット経由の …

感染症対策のためのIoT技術(その6)M5StickC PIR Hat(AS312搭載)人感センサー

感染症対策のためのIoT技術について書いています。今回は人感センサーを使ってみました。使ったのは M5StickC に直接接続して使うタイプで比較的簡単に使うことが出来ます。スイッチサイエンスさんの販 …

感染症対策のためのIoT技術(その5)障害物回避センサーを利用した非接触スイッチ操作

感染症対策のためのIoT技術について書いています。今回は障害物回避センサーを利用した非接触操作です。つまり、手を触れないで何かのスイッチのオン、オフを切り替える仕組みについてです。内容的にはIoT技術 …

LeafonyでRCカーを作ってみました(その2)RCカー編

前回の続きです。LeafonyでRCカーを作ってコントロールしてみるというテーマで書いています。前回まででLeafonyでのBluetooth Low Energy(ここからはBLEと表記します。)と …

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

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