LoginSignup
3

More than 3 years have passed since last update.

ESP8266とDHT11とAmbientを使って部屋の温度と湿度をグラフ化

Last updated at Posted at 2020-02-12

はじめに

wifiが使えるマイコン「ESP8266」と温度湿度センサー「DHT11」を使って「Ambient」という簡単にデータを可視化するサービスで部屋の温度と湿度を可視化していきます

準備

ESP8266への書き込みはArduinoIDEを使用します。ArduinoIDEでESP8266を使う手順はこちらのサイトがわかりやすいです。「ESP-WROOM-02開発ボードをArduino IDEで開発する方法
グラフの生成にAmbientを使用するので、事前にユーザー登録とチャンネルの生成をしておきます
サービスの概要は「Ambientを使ってみる」を参照してください。
また、使用するためにAmbientライブラリをインポートする必要がありますのでこちらも併せて参照してください。「Arduino ESP8266で温度・湿度を測定し、Ambientに送ってグラフ化する

ESP8266とDHT11の接続にはGPIOピン12番を指定してます
DHT11のライブラリは「DHT sensor library」を使用しています
Screenshot from 2020-02-13 08-17-50.png

Linuxでのシリアルポートへのアクセスは「https://www.arduino.cc/en/Guide/Linux」を参照してください

コード

#include <ESP8266WiFi.h>
#include <Ambient.h>
#include "DHT.h"

// DHT11の設定
#define DHTPIN 12        // 使用するGPIOピン
#define DHTTYPE DHT11   // DHT 11
#define channelId ****  // 生成したAmbientチャネルID
#define writeKey "****"  // Ambient のライトキーをセット

WiFiClient client;
DHT dht(DHTPIN, DHTTYPE);
Ambient ambient;

//WiFiのIDとPASS
const char *ssid = "****";  //wifiのssid
const char *password = "****";  //wifiのパスワード

void setup() {
  Serial.begin(115200);
  // WiFiに接続
  Serial.println(ssid);
  Serial.print("Waiting for Wi-Fi connection");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");


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

void loop() {
  // put your main code here, to run repeatedly:
    // DHT11から読み込み
    float t = dht.readTemperature();
    float h = dht.readHumidity();
    delay(200);
    if (isnan(t) || isnan(h)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }
    //シリアルモニターに温度・湿度の表示
    Serial.println("Temperature: " + String(t) + "C   Humidity: " + String(h) + "%");

    //Ambientに温度と湿度を送る
    ambient.set(1, t);   //データセット          
    ambient.set(2, h); 
    ambient.send();   //  Ambientにデータを送信  
    //データ取得頻度
    delay(1000*60);  //1000ミリ秒=1 *60秒なので1分
}

データ送信がうまく行っていたら自動的にグラフが作られます
こんな感じ ※この画像のグラフでは30分置きにデータ取得してます
Screenshot from 2020-02-12 23-08-00.png
グラフ名は自分で変更してます

最後に

今回はambientというサービスを使って温度と温度を可視化を解説してみました
グラフを簡単に作成してくれる便利なサービスなのでぜひ使ってみてください

次回はIFTTTを使ってLINEに温度と温度を通知してくれるプログラムを作ります!

追記

elchikaにも記事を投稿しました。
(https://elchika.com/article/80b5bc1c-6b88-4aff-98ec-5fdfa4bd4695/)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3