ESP32で温度と湿度を表示する DHT11

さてさて、ESP32の話題に戻って、この手の定番の温度と湿度の表示をやってみます。LCD表示のサンプルを改造して、DHT11の出力を表示させます。


参考にさせていただいたサイトは下記となります。ありがとうございます。
Interface DHT11 DHT22 with ESP32 & Display Values Using Web Server

まぁ書いてある通りになんですが、前回のLCDのやつに統合するので、上記サイトの格好いいWeb表示部分は全部いらなくて、必要な部分だけ抜き出します。Web表示は後での楽しみ。

// include the library code:
#include <LiquidCrystal.h>
#include "DHT.h"

#define DHTTYPE DHT11   // DHT 11

// DHT Sensor
uint8_t DHTPin = 4; 
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

float Temperature = 0;
float Humidity = 0;

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 32, rw = 33, en = 25, d4 = 26, d5 = 27, d6 = 14, d7 = 13;
//LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  pinMode(DHTPin, INPUT);
  dht.begin();  
}

void loop() {
  Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  // Display Temperature in C
  lcd.setCursor(0, 0);
  lcd.print("Temp         C  ");
  lcd.setCursor(6, 0);
  // Display Temperature in C
  lcd.print((Temperature));

  lcd.setCursor(0, 1);
  lcd.print("Humid        %  ");
  lcd.setCursor(6, 1);
  lcd.print((Humidity));
  delay(500);  
} 


 まぁこんな感じで、最初の画像のような表示ができる。
で、気になるのが、温度も湿度も小数点以下が表示されないこと。

これも調べると、DHT11は、少数点以下は表示されないとのこと。だとしたら、数字の表示を変えた方が良いですね~

接続は下記の通り。ESP32 DevKitのパーツも作成してしまった。ベースに公開されていた二つのESP32のパーツを組み合わせてサイズを変えて、とか、まぁ趣味の世界w


Bloggerのレイアウト、幅の変更をしてみました、簡単です

ブログの幅を変更しました。いろいろなことを書こうとすると、デフォルトの幅だと狭いんですよね。昔のVGAに合わせたようなサイズで、フレキシブルでもないので、ちょっと古い感じもしてきています。

Bloggerのデザインって、簡単に使えるようにしている分、手を入れようとおもうとわからなくなる。でも、実は簡単に手直しができるのね。今回は、幅変更メモ。

1. Bloggerにログインして、「テーマ」の「カスタマイズ」を選択する。


2. 表示された画面の「幅を調整」を選択する。


 3. ほら、バーをスライドさせることで、本文とサイドメニューの幅を調整することが出来ます。
 最大、最小は御覧の通り 。下の方に反映されたものが表示されるのでわかりやすいです。



4. 最適なサイズを決めたら、「ブログに適用」をクリックするとブログに適用されます。
 適用したら、「Bloggerに戻る」をクリックすることで、Bloggerの画面に戻れます。

 デフォルトに戻すのも簡単なので気軽に試せばよいと思います。
 ちなみに、現在のこのブログの設定は、ブログ全体が1010ピクセル、右側のサイドバーが240ピクセルです。


ESP32でLCD 1602 モジュールをI2Cなしで接続することになった

ESP32であれこれしていて、せっかく買ったArudinoキットの中の LCD 1602を試しに使ってみることにした。

ただ、キットの中の1602は、I2Cがついていない。ググってみると、ほとんどがI2C接続、1,2個そのままの接続の例があるけど、ケーブルが多くて面倒そう。


と、いうことで、I2CをAmazonでぽちった。150円位のやつ。
届いたのを見ると、I2Cにもピンヘッダがついてる。どうしようかと悩んだ結果、I2C側のピンヘッダを取り外すことにした。

じゃーん
ピンヘッダを外すのは相当苦労したけど、見た目はとりあえずOK。
これで楽々LCD接続ができる(^^)/

ところが。。。。
豆腐!豆腐!豆腐!豆腐!

何をやっても豆腐!
輝度調整しても変わらない。
Arudino IDE で、ありとあらゆる LiquidCrystal_I2C.h を試したけどダメ、LiquidCrystal.h でもだめ。
アドレスチェックでは、0x27が出ていて設定も確認したけど豆腐!

これは、I2Cのピンヘッダ外しとかの時に壊してしまったに違いない・・・
仕方がないので、I2Cを1602から取り外すことに。

しかし、ピンヘッダの取り外しって、ものすごく大変。どれだけハンダを取っても、どこか残っているようでなかなか外れない。 もう面倒すぎ。

せっかく付けたI2Cをやっとのことで取り外したので、1602を直接ESP32に接続する方法をググった。

<今回の参考サイト> ありがとうございます。
searat.netさん [ESP32]IoTマイコンを動かしてみる7 -LCD制御するよ編‐

この記事の通り接続し用としてみたけど、ちょっと接続図が良くわからない。なので、元々接続ってどうなってるのか確認するためにArduinoのキットの資料を確認して、接続先を見直した。
そして、ArduinoのLiquidCrystalのサンプルスケッチを、これも記事通りに修正して書き込み実施。

接続は下記の通り。手持ちのLCD 1602が5V用なので、図で電池の部分は、実際はUSBから直接電源を取っている。


LCD1602 ESP32
VSS GND
VDD 5V
VO 半固定抵抗10KΩ
RS IO32
RW GND
E IO25
DB0
DB1
DB2
DB3
DB4 IO26
DB5 IO27
DB6 IO14
DB7 IO13
A 3V3
K GND

後でよく見たら、sarat.netさんの記事にもRWはGNDでも良いって書いてあった。素人なので知らないとスルーするんだよなぁ(;'∀')


とりあえず、動いてよかった。I2CとLCD1602の両方壊していたら泣いていたかも~~

しかし、買ったI2Cもピンヘッダがついていたのだから、最初にブレッドボード上で接続確認しておけばよかった・・・ピンヘッダの取り外しがこんなに大変だとは・・・、いい勉強になったよ。