庭先の気温、湿度、気圧を計測しWiFi経由でAmbientのサービスを利用しグラフ化表示。
センサはBME280、マイコンはESP-WROOM-02を使用しArduino IDEにて書き込み。
ESP-WROOM-02はWiFi搭載です。
AmbientはIoTデータを可視化するサービスを提供しています。
基本的な使用方法であれば無料の登録で使用可能です。
https://ambidata.io
サイトにアクセスしてグラフを確認するのでPC、スマホを問いません。
下の例はスマホの画面です。(気圧、電圧も表示されているが割愛)
プログラムは以下のものを利用し電圧測定の部分については追加しました。
Ambientの使い方も記載されています。
http://pages.switch-science.com/letsiot/temphumidpress/
ESP-WROOM-02とBME280の配線および電圧測定のための
アナログポート接続は以下のよう。
(結線図を描く手間を惜しんで写真…)
枠外に伸びる赤黒の線が電圧測定のためのものです。
マイコンの電源は5VなのでUSB充電器を利用。
アナログポートでの電圧測定には抵抗分圧回路が必要です。
といっても抵抗をふたつ追加するだけです。
今回は以下のもので試してみました。
R1:0.33k
R2:10.21k
抵抗分圧についてはあちこちサイトを調べると記載があります。
アナログポートは0-1Vまでのようです。ご注意!
太陽光のパネルは庭にポンと置いただけ。
台風のときなど、いつでも撤去できます。
ソーラーパネル(中古)から車のバッテリー(12V、中古)にコントローラを介して接続。
12Vは便利で玄関まわりでLEDつけたり、シガーソケットを利用してマイコンの電源にもなります。
環境等について
・Windows8.1(もちろん10でも大丈夫でしょう)
・Arduino IDE 1.8.10(ESPへの書き込みには設定必要ですが検索プリーズ)
・Ambientアカウント
・Ambientライブラリ(前述リンク参照。BME280接続ライブラリ含)
・マイコン(ESP-WROOM-02)
・センサ(BME280)
・抵抗2個(330Ω、10kΩ)
・ブレッドボード、配線等
ソースは以下参照下さい。
/*
* BME280で5分毎に温度、湿度、気圧を測定し、Ambientに送信する
* TOUTアナログポートを利用して電圧測定も追加
*/
# include <ESP8266WiFi.h>
# include <SPI.h>
# include "BME280_SPI.h"
# include "Ambient.h"
# define BME_CS 15
# define PERIOD 300 // 300秒毎
//#define PERIOD 15 // 15秒毎(テスト用)
BME280 bme280;
WiFiClient client;
Ambient ambient;
double value; // 電圧測定用
const char* ssid = "your_id";
const char* password = "your_pass";
unsigned int channelId = *****; // AmbientのチャネルID
const char* writeKey = "your_key"; // ライトキー
void setup()
{
Serial.begin(115200);
delay(10);
Serial.println("Start");
WiFi.begin(ssid, password); // Wi-Fi APに接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
delay(100);
}
Serial.print("WiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
bme280.begin(BME_CS);
ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
}
void loop()
{
double temp, humid, pressure;
double value2; // 電圧計算用
value2 = analogRead(A0); // 電圧測定用
value = (value2/1023)*30; // 電圧計算
temp = bme280.readTemperature();
humid = bme280.readHumidity();
pressure = bme280.readPressure();
Serial.print("temp: ");
Serial.print(temp);
Serial.print(", humid: ");
Serial.print(humid);
Serial.print(", pressure: ");
Serial.println(pressure);
Serial.print(", value: "); // 電圧測定用
Serial.println(value); // 電圧測定用
ambient.set(1, temp); // 温度をデータ1にセット
ambient.set(2, humid); // 湿度をデータ2にセット
ambient.set(3, pressure); // 気圧をデータ3にセット
ambient.set(4, value); // 電圧をデータ4にセット
ambient.send(); // データをAmbientに送信
delay(PERIOD * 1000);
}
以上