Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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は安くて買いやすいのですが、精度が良くないので目安程度です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした