ESP-WROOM-02 및 DHT11로 온습도 센서 만들기

16888 단어 DHT11ESP-WROOM-02
지난번은 ESP-WROOM-02의 개발 보드와 BT18B20의 온도 센서를 사용했지만, 이번에는 ESP-WROOM-02 DIP화 키트와 DHT11의 온습도 센서로 계측해 본다.



하고 싶은 일


  • ESP-WROOM-02 + DHT11에서 온도와 습도를 측정하고 WiFi를 통해 서버로 보냅니다.
  • 개발 보드가 아닌 ESP-WROOM-02 단체 (DIP화 완료)에서 짜고 싶다
  • 배터리로 구동하고 싶다
  • 2 개의 건전지 + DCDC 컨버터로 3.3V를 꺼내십시오


  • 구입한 것



    아키즈키 전자 씨로 아래를 구입.


    부품
    가격 (세금 포함)


    [K-09758]Wi-Fi모듈 ESP-WROOM-02DIP화 키트
    ¥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/6W 10kΩ(100개입)
    ¥100


    조립


  • 개발 준비와 전용 전원 제작 · ESP-WROOM-02 을 참고로 배선했다.
  • DHT11을 이용한 온도 및 습도 측정 - Arduino - 기초에서 IoT 시작데이터시트 을 참고로 배선했다.
  • 여러 번 시작하고 미니 브레드 보드에 올려 보면 이런 느낌 ↓
  • 단면 유니버설 기판(브레드 보드 배선 패턴 타입) 에 배선한다면 이런 느낌 (ESP-WROOM-02는 중간에 연결한다)↓


  • 조금 저항이있는 LED가 눈부셨기 때문에 저항을 물리치고 약하게 변경


  • 스케치 작성, 동작 확인



  • adafruit/DHT-sensor-library: Arduino library for DHT11, DHT22, etc Temperature & Humidity Sensorsadafruit/Adafruit_Sensor: Common sensor library을 라이브러리에 추가했습니다.
  • 아래와 같은 코드로 계측, 서버 송신까지 완료.
  • /**
     * 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();
      }
    }
    

    좋은 웹페이지 즐겨찾기