ESP8266で4連8×8ドットマトリクスLEDで時計を表示してみる:【ESP8266】2.2インチ ディスプレイILI9341にDHT22で湿温度と時計を表示する

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

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

この記事は複数のページに別れています
  1. ESP8266で4連8x8ドットマトリクスLEDで時計を表示してみる
  2. ESP-01とUSBシリアル変換器FT232ELを接続してみる
  3. (今このページを見ています)

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

材料

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

XZANTE 2.2 ILI9341ドライブ

XZANTE 2.2 ILI9341ドライブ
1,500円前後

Aceirmc 3ピース ESP8266 シリアルワイヤレスモジュール CH34

Aceirmc 3ピース ESP8266 シリアルワイヤレスモジュール CH34
1,500円前後

OSOYOO DHT22 デジタル 温度 湿度 センサー モジュール デジタル温

OSOYOO DHT22 デジタル 温度 湿度 センサー モジュール デジタル温
モジュール

1,500円前後

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

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をコピーしました