【ESP8266】2.2インチ ディスプレイILI9341にDHT22で湿温度と時計を表示する

スポンサーリンク

この記事も古くESP8266でディスプレイILI9341にDHT22湿温度センサーを使って時計と湿温度を表示させています。未解決は曜日が表示できない。追加しました。

すでに1年ほど使用していますが結構使えます。

ケースはほぼ前面のみで、3Dプリンターで適当に作りました。

材料

自分の買ったところは主に海外通販のBanggoodやebay.comです。安いのでそちらのほうがオススメですが、面倒な場合は以下のアマゾンのページでも買えます。

2.2インチ ディスプレイILI9341

DHT22湿温度センサー

ESP8266

これとブレッドボードがあればテストできる。

2.2インチ ディスプレイILI9341を使えるようにする

ライブラリ インストール方法

各種ライブラリをインストールします。インストール方法は簡単で、以下から検索して該当ライブラリの「インストール」を押すだけ。

スケッチ > ライブラリのインクルード > ライブラリを管理

Adafruit GFX Library

Adafruit SSD1306をインストール

Adafruit SSD1306

以下のファイルを編集

C:\Users\go\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.h

以下の「//(コメントアウト)」を取り除いて有効にする。

このようにする↓

ディスプレイ

Adafruit_ILI9341

DHT22 温湿度センサー

DHT senser libraryをインストールした。

このままだと以下のようなエラーが出るのでAdafruit_Sensorインストール

C:\Users\go\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:25:29: fatal error: .h: No such file or directory
#include <Adafruit_Sensor.h>

Adafruit_Sensor

ライブラリないので手動でインストール

GitHub - adafruit/Adafruit_Sensor: Common sensor library
Common sensor library. Contribute to adafruit/Adafruit_Sensor development by creating an account on GitHub.

こちらからダウンロードして以下のようにZip形式のライブラリをインストールする。

配線

ディスプレイ

  • 9,SDO/MISO :  未使用
  • 8,LED :            3.3V
  • 7,SCK :            D5/DPIO14
  • 6,SDI/MOSI :   D7/GPIO13
  • 5,DC/RS :        D4/GPIO02
  • 4,RESET :        3.3V
  • 3,CS :              D1/GPIO5 D8/GPIO15に変更
  • 2,GND :           GND
  • 1,VCC :            Vin

DHT22 温湿度

  • Out : D6/GPIO12
  • + : 3.3V
  • –  : GND

4Pinのやつも買ったのでメモ、↓左から。

  1. + : 3.3V
  2. Out : D6/GPIO12
  3. 使わない
  4. –  : GND

ディスプレイに湿温度と時計を表示するスケッチ

time.hで曜日の取得方法がわからないのでこれから調べます。配列に入っているはずだけど?もしかしたら無い?はずないですよね。NTPサーバーから取ってくるデータなので。

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <DHT.h>//温湿度 DHT22
#include <Arduino.h>//時計
#include <time.h>

//Display
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 2
#define TFT_CS 5
Adafruit_ILI9341 display = Adafruit_ILI9341(TFT_CS, TFT_DC);

//Wi-Fi情報
#define WIFI_SSID "Xiaomi_wifi"
#define WIFI_PASSWORD "xxxxxx"

//温湿度 DHT22
#define DHTPIN 12//D7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE, 15);
float humidity, temp_c, temp_f, heatindex;

//時計
#define JST     3600*9

void setup() {
  Serial.begin(115200);
  //Display
  display.begin();

  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());

  //スリープ 少電力
  WiFi.mode(WIFI_STA);
  //wifi_set_sleep_type(MODEM_SLEEP_T);

  //温湿度大気計 DHT22
  dht.begin();

  //時計
  configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
  display.setRotation(3);
  display.fillScreen(ILI9341_BLACK);
}

void loop() {
  //時計
  time_t t;
  struct tm *tm;
  t = time(NULL);
  tm = localtime(&t);

  display.setTextSize(4);
  display.setCursor(20, 10);
  display.setTextColor(ILI9341_CYAN, ILI9341_BLACK);//背景を黒にしないと塗り潰される
  display.printf("%02d/%02d",tm->tm_mon+1, tm->tm_mday);//月日

  display.setCursor(180, 10);
  char *dayofweek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
  display.printf("%s",dayofweek[tm->tm_wday]);//tm_wday曜日

  display.setCursor(20, 90);
  display.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
  display.setTextSize(8);
  display.printf("%02d:%02d",tm->tm_hour, tm->tm_min);

  display.setCursor(260, 130);
  display.setTextSize(3);
  display.printf(":%02d",tm->tm_sec);

  //温湿度大気計 DHT22
  humidity = dht.readHumidity();// Read humidity (percent)
  temp_c = dht.readTemperature();// Read temperature as Celsius
  temp_f = dht.readTemperature(true);// Read temperature as Fahrenheit
  display.setTextColor(ILI9341_YELLOW, ILI9341_BLACK);
  display.setTextSize(3); 
  display.setCursor(30, 205);
  //display.println("TMP:");
  display.print(temp_c,1);//温度表示 小数点1桁に四捨五入
  display.println("C");
  display.setTextSize(3);
  display.setCursor(170, 205);
  //display.println("HUM:");
  display.print(humidity,1);//湿度表示 小数点1桁に四捨五入
  display.println("%");

  display.println(); 
  delay(200);
}

というより、4連8×8ドットマトリクスLED時計で曜日あるので表示できるはずだけど、Arrayの中身がいまいちわからない。

Arduino-RTC: tm Struct Reference

こちらの配列みたい↑ 曜日追加できました。

BME280で温度・湿度・気圧取得 失敗したメモ

以下、失敗メモです。

BME280 ライブラリインストール

スケッチ > ライブラリのインクルード > ライブラリを管理 SparkFun_BME280_Arduino_Library SparkFun_BME280_Arduino_Library  

Adafruit_BMP280

    https://robotzero.one/esp8266-and-bme280-temp-pressure-and-humidity-sensor-spi 試したけど、できなかった・・・

ets Jan 8 2013,rst cause:4, boot mode:(1,6)
wdt reset

 

以下はループする

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v614f7c32
~ld

センサーが壊れてる???

 

タイマーで5分おきに温湿度を取得

MsTimer2

こんなエラーが・・・ESP8266では使えないらしい。

MsTimer2 library only works on AVR architecture

コメント

タイトルとURLをコピーしました