この記事も古くESP8266でディスプレイILI9341にDHT22湿温度センサーを使って時計と湿温度を表示させています。未解決は曜日が表示できない。追加しました。
すでに1年ほど使用していますが結構使えます。
ケースはほぼ前面のみで、3Dプリンターで適当に作りました。
材料
自分の買ったところは主に海外通販のBanggoodやebay.comです。安いのでそちらのほうがオススメですが、面倒な場合は以下のアマゾンのページでも買えます。
これとブレッドボードがあればテストできる。
2.2インチ ディスプレイILI9341を使えるようにする
ライブラリ インストール方法
各種ライブラリをインストールします。インストール方法は簡単で、以下から検索して該当ライブラリの「インストール」を押すだけ。
スケッチ > ライブラリのインクルード > ライブラリを管理
Adafruit GFX Library
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
ライブラリないので手動でインストール
こちらからダウンロードして以下のように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/GPIO5D8/GPIO15に変更 - 2,GND : GND
- 1,VCC : Vin
DHT22 温湿度
- Out : D6/GPIO12
- + : 3.3V
- – : GND
4Pinのやつも買ったのでメモ、↓左から。
- + : 3.3V
- Out : D6/GPIO12
- 使わない
- – : 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の中身がいまいちわからない。
こちらの配列みたい↑ 曜日追加できました。
BME280で温度・湿度・気圧取得 失敗したメモ
以下、失敗メモです。
BME280 ライブラリインストール
スケッチ > ライブラリのインクルード > ライブラリを管理 SparkFun_BME280_Arduino_Library
Adafruit_BMP280
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
コメント