LoginSignup
4
5

More than 5 years have passed since last update.

ESP-WROOM-02 とDHT11の温湿度計(Ambient)にLCDモニターを付ける

Last updated at Posted at 2017-03-29

WROOM-02で温湿度計をネットに送るのは、既に多くの事例が公開されていて、私もそれらの情報を参考にさせていただいて、Ambient に送ってグラフ化することで一応満足していたのですが、単体で動作させている時に、その時点のデータを見たいと思って、LCDディスプレイを接続して見ました。

16文字✖️2行のLCDが310円!

 お試しということで、接続が簡単なI2C対応で廉価なLCDディスプレイを探しました。
Amazon に 16文字✖️2行のLCDディスプレイが 190円、シリアルインターフェースアダプタが120円(どちらも送料込み)というのがありましたのでそれを購入。

構成

 構成は、次のとおり
IMG_2155.jpg
IMG_2156.jpg

  • ESPr Developer (スイッチサイエンス)
  • 温湿度センサー(DHT11)
  • HD44780 1602 LCD ディスプレイモジュール 16×2キャラクタ (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は安くて買いやすいのですが、精度が良くないので目安程度です。

4
5
2

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
4
5