LoginSignup
0
1

More than 3 years have passed since last update.

ESP-WROOM-02 と DHT11 で温湿度センサーを作る

Last updated at Posted at 2020-11-09

前回は ESP-WROOM-02 の開発ボードと BT18B20 の温度センサーを使ったが、今回は ESP-WROOM-02 DIP化キットと DHT11 の温湿度センサーで計測してみる。

2020-11-09 13.14.12.jpg

やりたいこと

  • ESP-WROOM-02 + DHT11 で温度と湿度を計測し、WiFi経由でサーバに送信する
  • 開発ボードではなく ESP-WROOM-02 単体(DIP化済み)から組んでみたい
  • 電池で駆動させたい
    • 乾電池2本+DCDCコンバータで 3.3V を取り出す

購入したもの

秋月電子さんで下記を購入。

部品 価格(税込)
【K-09758】Wi-Fiモジュール ESP-WROOM-02 DIP化キット ¥650
【M-08461】FT234X 超小型USBシリアル変換モジュール ¥600
【P-03647】タクトスイッチ(黒色) ¥10
【P-03650】タクトスイッチ(黄色) ¥10
【P-02315】ブレッドボード・ジャンパーワイヤ 14種類×5本 ¥300
【I-11577】3mm赤色LED 70° OSR5JA3Z74A ¥10
【P-10196】電池ボックス 単3×2本 リード線・間仕切りあり ¥50
【M-07003】温湿度センサ モジュール DHT11 ¥300
【K-13066】3.3V出力昇圧DCDCコンバーター ¥300
【R-16103】カーボン抵抗(炭素皮膜抵抗) 1/6W10kΩ (100本入) ¥100

組み立て

image.png

  • ちょっと抵抗付きLEDがまぶしかったので抵抗をかまして弱めに変更
    image.png

スケッチ作成、動作確認

/**
 * ESP-WROOM-02 + DHT11 で計測した温度・湿度を WiFi 経由で送信する
 */
#include <ESP8266WiFi.h>
#include <DHT.h>
#include "credencials.h"

#define READ_BUF_SIZE 4096

const int LED_PIN = 13;
const int PIN_DHT = 14;
DHT dht( PIN_DHT, DHT11 );

// API用パラメータ id : センサーを識別するID
const char* api_room_id = "dht11b";

// Server
const char* host   = "IPアドレスなど";
const int httpPort = 80;
const char* path   = "/hoge/fuga.php";

WiFiClient client;
char buf[READ_BUF_SIZE];

void setup() {
  Serial.begin(115200);
  Serial.println("");

  // DHT11開始
  dht.begin();

  // LED 初期化
  pinMode( LED_PIN, OUTPUT );

  // WiFi 接続
  setupWiFiConnection();

  Serial.println("setup done");
}

void loop() {
  digitalWrite( LED_PIN, HIGH );
  delay(200);
  digitalWrite( LED_PIN, LOW );
  delay(200);

  float percentHumidity = dht.readHumidity();
  bool isFahrenheit = false;
  float temperature = dht.readTemperature( isFahrenheit );

  if (isnan(percentHumidity) || isnan(temperature)) {
    Serial.println("ERROR");
    return;
  }

  String s = "Temp: " + String(temperature, 1) + "℃ Humidity: " + String(percentHumidity, 0) + "%";
  Serial.println(s);

//  Serial.println(temperature);
//  Serial.println(percentHumidity);

  requestToServer(temperature, percentHumidity);
  delay(5 * 60 * 1000);
}

void setupWiFiConnection() {
  // 省電力化のために WiFi 接続を遅延する
  Serial.println("Waiting...");
  delay(2000);
  Serial.println("OK");

  WiFi.mode(WIFI_STA);
  WiFi.begin(ap_ssid, ap_password, ap_channel);
  Serial.print("Connecting to ");
  Serial.println(ap_ssid);

  // 接続中を表すLEDを付ける
  digitalWrite( LED_PIN, HIGH );

  int status = WL_IDLE_STATUS;
  while ((status=WiFi.status()) != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  digitalWrite( LED_PIN, LOW );

  Serial.println("");
  Serial.println("WiFiに接続しました。");
  Serial.print( "IPアドレス: ");
  Serial.println( WiFi.localIP());
  Serial.print( "ゲートウェイ: ");
  Serial.println(WiFi.gatewayIP());
  Serial.print( "サブネットマスク: ");
  Serial.println(WiFi.subnetMask());
}

void requestToServer(float temp, float percentHumidity) {

  if (!client.connect(host, httpPort)) {
    Serial.println("接続に失敗しました。");
    return;
  }

  client.print(String("GET ") + path + "?id=" + api_room_id + "&temp=" + temp + "&humid=" + percentHumidity + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");

  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 10000) {
      Serial.println(">>> タイムアウトしました。");
      client.stop();
      return;
    }
  }

  while (client.available()) {
    char c = client.read();
  }
}
0
1
0

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
0
1