前回から引き続きESP-WROOM-02を使っていきます!今回は温湿度センサーの測定値をWiFiでインターネット上にアップする、IoTやってみます🔥
今回のやってみたこと!
前回から引き続いてESP-WROOM-02で遊んでいきます。
今回は温湿度センサー達で温湿度測定して、測定データをWiFiでインターネット上にアップしてグラフ化してみます。グラフ化等についてはAmbientというサービスを利用して行います!
ちなみに今回組んだ回路たちとAmbientでグラフ化した画像のツイートです。
お家の中の3地点を測定するために、3つ回路を組みました。
トピックス
Ambient
AmbientはIoT用のクラウドサービスです。 マイコンから送られたセンサーデーターを受信し、蓄積し、可視化(グラフ化)します。
https://ambidata.io/
Ambientを使うとマイコンからデータを送ってグラフ化することが非常に簡単にできます。Ambientにデータを送るためのライブラリ(Arduino、Pythonなど)が公開されているのと、チュートリアルが大変充実しているため、Arduino系やRaspberryPiなどで手軽にIoTを行うにはもってこいのサービスだと思います。
この記事で行った実験レベルの内容であれば無料で利用することができます。
下のリンクからもAmbientのサイトに飛べます。
温湿度センサー
ありあわせのセンサーを使ったので、3回路とも温湿度センサーが異なります😅
使った温湿度センサーを簡単に紹介します🌡️
使ったセンサー
DHT11モジュール | DHT20 | BME280モジュール | |
動作電圧 | 3~5.5 V | 2.2~5.5 V | 3~5.5 V |
温度 (精度) | 0~50 ℃ (±2 ℃) | -40~80 ℃ (±0.5 ℃) | -40~85 ℃ (±1 ℃) |
相対湿度 (精度) | 20~90 %RH (± 5 %RH) | 0~100 %RH (± 3 %RH) | 0~100 %RH (± 3 %RH) |
気圧 (精度) | - | - | 300~1100 hPa (±1hPa) |
通信方式 | 1-wire | I2C | I2C,SPI |
備考 | Miuzei Arduino スターターキットの同梱品 | 秋月電子通販コード:M-16732 | 秋月電子通販コード:K-09421 |
使ったライブラリ
DHT11のライブラリ
DHT20のライブラリ
BME280のライブラリ
今回の回路図
3地点で測定を行うので、3回路用意しました💪
それぞれの回路の画像とブレッドボード図、使ったものリストをつらつら載せておきます‼
A地点_DHT11モジュール
電源に充電可能なニッケル水素電池を使ってみてます。
No. | パーツ名 | 個数 | 備考 |
1 | ESP-WROOM-02のDIP化キット | 1 | 秋月電子の通販コード:K-09758 |
2 | ニッケル水素電池(1.2V) | 4 | |
3 | 電池ケース | 1 | |
4 | DHT11モジュール | 1 | |
5 | 三端子レギュレーター BA033CC0T | 1 | 秋月電子の通販コード:I-13675 |
6 | 積層セラミックコンデンサー 0.1μF | 1 | |
7 | 電解コンデンサー 47μF | 1 | レギュレータOUT側の発振防止用 |
8 | タクトスイッチ | 2 | モード変更とリセットボタン用 |
9 | 赤色LED | 1 | 電源確認用 |
10 | 緑色LED | 1 | お試しスケッチ用 |
11 | 抵抗 10kΩ | 4 | プルアップ・プルダウン用 |
12 | 抵抗 330Ω | 2 | LED用の抵抗 |
13 | ブレッドボード | 1 | |
14 | ジャンプワイヤー | 必要な分 |
B地点_DHT20
電源にモバイルバッテリーを使ってみてます。
No. | パーツ名 | 個数 | 備考 |
1 | ESP-WROOM-02のDIP化キット | 1 | 秋月電子の通販コード:K-09758 |
2 | USBシリアル変換モジュールキット | 1 | 秋月電子の通販コード:K-09951 |
3 | DHT20 | 1 | 秋月電子通販コード:M-16732 |
4 | 三端子レギュレーター BA033CC0T | 1 | 秋月電子の通販コード:I-13675 |
5 | 積層セラミックコンデンサー 0.1μF | 1 | |
6 | 電解コンデンサー 47μF | 1 | レギュレータOUT側の発振防止用 |
7 | タクトスイッチ | 2 | モード変更とリセットボタン用 |
8 | 赤色LED | 1 | 電源確認用 |
9 | 緑色LED | 1 | お試しスケッチ用 |
10 | 抵抗 10kΩ | 6 | プルアップ・プルダウン用 |
11 | 抵抗 330Ω | 2 | LED用の抵抗 |
12 | ブレッドボード | 1 | |
13 | USBmicroBケーブル | 1 | |
14 | ジャンプワイヤー | 必要な分 | |
15 | モバイルバッテリー |
C地点_BME280モジュール
ESP-WROOM-02の開発ボードの「ESPr® Developer」を使ってみてます。
その関係で、3端子レギュレータは5.0V出力のものを使用しています。
No. | パーツ名 | 個数 | 備考 |
1 | ESPr® Developer | 1 | スイッチサイエンスで購入 |
2 | BME280モジュール | 1 | 秋月電子通販コード:K-09421 |
3 | 9V電池 | 1 | |
4 | 三端子レギュレーター NJM7805FA | 1 | 5.0V電源作る用。秋月電子の通販コード:I-08678 |
5 | 積層セラミックコンデンサー 0.1μF | 1 | |
6 | 電解コンデンサー 47μF | 1 | レギュレータOUT側の発振防止用 |
7 | タクトスイッチ | 2 | モード変更とリセットボタン用 |
8 | 赤色LED | 1 | 電源確認用 |
9 | 緑色LED | 1 | お試しスケッチ用 |
10 | 抵抗 330Ω | 2 | LED用の抵抗 |
11 | ブレッドボード | 1 | |
12 | ジャンプワイヤー | 必要な分 |
書き込んだスケッチ
今回のスケッチは3つの回路に合わせて、部分部分コメントアウトを解除して使う形にしました。
AmbientのチャネルIDとライトキーはAmbientにデータを送信するのに必要なものです。今回は3地点測定するために3チャネル利用したので、それぞれのIDとキーを確認して入力します。
WiFiのSSIDとパスワードも環境に合わせて入力します。
//ESP-WROOM-02_Temperature / humidity sensor
//温湿度センサーで3地点測定
//https://jcomet.com/
//ライブラリインクルード
#include <ESP8266WiFi.h>
#include "Ambient.h"
//使うセンサに合わせてコメントアウトを解除する①~④
//①
// //DHT11用定義
// #include <DHT.h>
// #define DHTPIN 4 // センサとつなげるデジタルピンを定義
// #define DHTTYPE DHT11 // 使用するセンサの型定義
// DHT dht(DHTPIN, DHTTYPE); //センサを初期化
// unsigned int channelId = xxxxx; // AmbientのチャネルID
// const char* writeKey = "xxxxx"; // ライトキー
// //DHT20用定義
// #include "DHT20.h"
// #define datapin 14
// #define clockpin 12
// DHT20 DHT20;
// unsigned int channelId = xxxxx; // AmbientのチャネルID
// const char* writeKey = "xxxxx"; // ライトキー
// //BME280用定義
// #include <BME280I2C.h>
// #include <Wire.h>
// BME280I2C bme;
// unsigned int channelId = xxxxx; // AmbientのチャネルID
// const char* writeKey = "xxxxx"; // ライトキー
//////////////////////////////////////////////////////////////
//WiFiの設定
WiFiClient client;
Ambient ambient;
const char* ssid = "xxxxx";
const char* password = "xxxxx";
void setup() {
//WiFi設定
WiFi.begin(ssid, password); // Wi-Fi APに接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
delay(100);
}
ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
//②
// //DHT11
// dht.begin(); //センサー開始
// //DHT20
// DHT20.begin(datapin, clockpin);
// Wire.setClock(400000);
// //BME280
// Wire.begin();
// bme.begin();
///////////////////////////////////////
pinMode(16, OUTPUT); //Ambient送信確認用のLED
}
void loop() {
digitalWrite(16, HIGH);
//③
// send_dht11();
// send_dht20();
// send_BME280();
//////////////////////
delay(1*1000);
ambient.send(); // データをAmbientに送信
digitalWrite(16, LOW);
delay(5*60*1000);
}
//④
// void send_dht11(){
// float humi11 = dht.readHumidity(); //湿度の読み取り
// float tempc11 = dht.readTemperature(); //温度(摂氏)の読み取り
// ambient.set(1, tempc11); // 温度をデータ1にセット
// ambient.set(2, humi11); // 湿度をデータ2にセット
// }
// void send_dht20(){
// DHT20.read();
// float humi20 = DHT20.getHumidity(); //湿度の読み取り
// float tempc20 = DHT20.getTemperature(); //温度(摂氏)の読み取り
// ambient.set(1, tempc20); // 温度をデータ1にセット
// ambient.set(2, humi20); // 湿度をデータ2にセット
// }
// void send_BME280(){
// float temp(NAN), hum(NAN), pres(NAN);
// BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
// BME280::PresUnit presUnit(BME280::PresUnit_Pa);
// bme.read(pres, temp, hum, tempUnit, presUnit);
// ambient.set(1, temp); // 温度をデータ1にセット
// ambient.set(2, hum); // 湿度をデータ2にセット
// ambient.set(3, pres); // 気圧をデータ3にセット
// }
/////////////////////////////////////////////////
実践結果
お家の中の3地点(3部屋)で朝から晩まで測定を行った結果の図です。
測り初めに少しブレがありましたが、おおよそいい感じに測れているのかなといった印象です。
湿度のグラフを見ると、ちょうど部屋を移動したりしたタイミングで変化がみられるので面白いなと思いました🤭
次やるときは、センサーを同じものにして部屋間の温湿度差を見てみるのも面白いかなと思ってます。
感想
「ESP-WROOM-02を使ってIoTしてみる!」がやっとできました😊
電源を準備して、スケッチ書き込み、IoTする仕組みを調べて実践する…めっちゃ勉強になりました🙌
今回は、Ambientというサービスを利用してデータの蓄積とグラフ化を行いましたが、少し前に何とか購入できたRaspberryPiを使ってみるのも勉強になって面白いかなと思ってます!
コメント