ESP-WROOM-02 및 DHT11의 온습도계(Ambient)에 LCD 모니터 붙이기

WROOM-02에서 온습도계를 인터넷에 보내는 것은 이미 많은 사례가 공개되어 있어, 나도 그 정보를 참고로 해주고, Ambient에 보내 그래프화하는 것으로 일단 만족하고 있다 하지만, 단독으로 동작시키고 있을 때, 그 시점의 데이터를 보고 싶고, LCD 디스플레이를 접속해 보았습니다.

16문자✖️2행의 LCD가 310엔!



시험으로 연결이 쉬운 I2C 대응으로 저렴한 LCD 디스플레이를 찾았습니다.
Amazon에 16문자✖️2행의 LCD 디스플레이가 190엔, 시리얼 인터페이스 어댑터가 120엔(둘 다 송료 포함)이라고 하는 것이 있었으므로 그것을 구입.

구성



구성은 다음과 같습니다.


  • ESPr Developer (스위치 과학)
  • 온습도 센서(DHT11)
  • HD44780 1602 LCD 디스플레이 모듈 16x2 캐릭터 (HiLetgo)
  • IIC/I2C/TWI/SPI 직렬 인터페이스 보드 모듈 (HiLetgo)
  • 브레드 보드
  • 점퍼 와이어
  • 풀업 저항

  • LCD와 보드는 납땜이 필요합니다.
    LCD의 SDA는 4번, SCL은 5번 단자에 접속했습니다. (풀업 저항은 10KΩ으로 있었습니다만, 수중에 있던 24KΩ으로 대용)

    스크립트



    프로그램은 다음과 같습니다.

    WROOM
    #include <Ambient.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <ESP8266WiFi.h>
    #include "DHT.h"
    #define DHTPIN 2
    #define DHTTYPE DHT11
    
    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal_I2C lcd(0x27, 16, 2);
    
    #define ssid       "YOUR WiFi SSID"   // WiFiのSSID をセット
    #define password       "YOUR WiFi PASSWORD" // WiFiのパスワード をセット
    
    #define channelId <YOUR CHANNEL>  // Ambientのチャネル番号
    #define writeKey "YOUR WRITE KEY FOR AMBIENT"  // Ambient の書き込みキーをセット
    
    WiFiClient client;
    Ambient ambient;
    
    
    void setupWiFi() {
      Serial.println(); Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println();
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    void setup() {
      Serial.begin(9600);
      Serial.println("DHT11 test!");
      dht.begin();
      setupWiFi();
      ambient.begin(channelId, writeKey, &client);
      lcd.init();
      lcd.backlight();
    }
    
    void loop() {
      float t = dht.readTemperature();
      float h = dht.readHumidity();
      if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }
      Serial.print("Temperature: ");
      Serial.print(t);
      Serial.println(" *C ");
      Serial.print("Humidity: ");
      Serial.print(h);
      Serial.println(" %\t");
    
      ambient.set(1, t);
      ambient.set(2, h);
      lcd.clear();
      lcd.setCursor(1,0);
      if (ambient.send()) {
        lcd.print("Data sent!");
      } else {
        lcd.print("Data send NG.");
      }
      lcd.setCursor(1,1);
      lcd.print(" to Ambient.");
    
      delay(5000);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("\xb5\xdd\xc4\xde"); // 「オンド」
      lcd.print(": ");
      lcd.print(t);
      lcd.print("\xdf");   // 上付きの○
      lcd.print("C");
      lcd.setCursor(0, 1);
      lcd.print("\xbc\xc2\xc4\xde"); // 「シツド」
      lcd.print(": ");
      lcd.print(h);
      lcd.print("%");
    
      delay(20000);
    }
    
    

    의도에 반해 1문자 밖에 표시되지 않았을 때는



    Arduino nano 등, WROOM-02 보다 처리 속도가 빠른 것 등으로 사용하면, 이 LCD 는 1 문자 밖에 표시되지 않는 경우가 있습니다. 처리가 느려서 따라잡지 않는 것 같습니다.
    그런 때는, 다음의 오마지나이를 먼저 해 두면, 전부 표시되게 됩니다.
    (Amazon 고객 리뷰에 있습니다.)

    omajinai
    #define printIIC(args) Wire.write(args) 
    inline size_t LiquidCrystal_I2C::write(uint8_t value) {
      send(value, Rs);
      return 1;
    }
    

    잡감



     DHT11은 싸고 사기 쉽습니다만, 정밀도가 좋지 않기 때문에 기준 정도입니다.

    좋은 웹페이지 즐겨찾기