LCD2004 znamená, že se vejde 20 znaků na řádek a displej má 4 řádky.
Připojení je sice přes I2C. Ale napájení displeje s převodníkem musí být 5V.
Oproti příkladům a návodům je adresa displeje LCD2004 I2C 0x3F.
Senzor DHT11 nemůže být zapojen na data pin 5 (tam je LCD), tak je zapojen na pin 2.
Jiná knihovna než LiquidCrystal_I2C bohužel není v návodech použita, ala zatím stačí. Nezkoušel jsem
Na obrázku je ukázka připojení, tj. I2C na SDA a SCL. ale napájení musí být připojeno na pin UV - ten je přímo propojen s napájením 5V na USB. VIN je sice také propojen s USB, ale přes diodu a to nefunguje (cca 2hod studia, všechny návody jsou právě s připojením na VIN).
Při dalším pokusu (asi jiná modifikace desky) kupodivu napájení funguje i přes VIN.
Není to relevantní řešení - může dojít k poškození sběrnice I2C. Řešení už samozřejmě vymysleli.
a pozor, mají tam jiné zapojení I2C - asi použili jinou desku. Já mám nastavenou NodeMCU 1.0 (ESP-12E).
Jde o vložení napěťového převodníku mezi displej a mikrokontrolér.
Pájení je pro vrahy. Zvlášť, když na to není téměř vidět. Až znovu přepájím a připájím převodník, tak to s ním vyzkouším.
Převodník přišel, rozebranou sestavu jsem zapojil na destičku (boj s vodiči asi půl hodiny) a běhá to.
Tak tomu dát ještě nějakou formu. A k čemu to bude dobré vymyslím.
Tak jsem to zapájel napevno a pověsil na zeď. Teď jsou z toho internetové hodiny napájené přes nabíječku 5V.
Tak jsem se znovu popral s tím samým - nevím kam jsem uložil původní scatch. Musel jsem začít kompilace zase od začátku, ale teď už automaticky čas přechází mezi letním a zimním časem Tak alespoň něco nového.
//Compatible with the Arduino IDE 1.0
//Library version:1.1
//#include <WiFi.h> // pro pristupu k internetu potrebujeme wifi
#include <ESP8266WiFi.h>
#include <time.h> // time() pro cteni casu
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
//LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 20, 4); // set the LCD address to 0x3F for a 20 chars and 4 line display - moje
/* Konfigurace NTP */
// zvolime nejvhodnejsi NTP server pro svoji zemi
#define MY_NTP_SERVER "cz.pool.ntp.org"
// zvolime sve casove pasmo
// https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
#define MY_TZ "CET-1CEST,M3.5.0,M10.5.0/3"
const char* ssid = "PRUH-WIFI";
const char* password = "93087865";
/* Globals */
time_t now; // cas v UNIX podobe (epocha)
tm tm; // struktura tm uchovava cas lepsim zpusobem
#define DHTPIN 5 // Digital pin connected to the DHT sensor 5
// Uncomment the type of sensor in use:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT12 // DHT 12
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//DHT dht(DHTPIN, DHTTYPE);
//POZOR na 5 je zapojen LCD displej
DHT dht(2,DHTTYPE);
String twoDigits(int digits) {
if (digits < 10) {
String i = '0' + String(digits);
return i;
}
else {
return String(digits);
}
}
void show() {
lcd.setCursor(3, 0); //0 tý řádek od 3 pozice
lcd.print("ESP8266 a DHT11");
lcd.setCursor(5, 1); // 1 řádek, 2 pozice
lcd.print("PRUH SOFT");
lcd.setCursor(0, 2);
lcd.print("Arduino LCM IIC 2004"); //2 řádek 0 pozice
lcd.setCursor(4, 3);
lcd.print("Listopad 2024");
}
void showTime() {
String mujcas;
String mujdatum;
String teplota;
time(&now); // nacte aktualni cas
localtime_r(&now, &tm); // aktualizuje strukturu tm aktualnim casem
Serial.print("Rok: ");
Serial.println(tm.tm_year + 1900); // n tm je pocet roku od 1900
Serial.print("Mesic: ");
Serial.println(tm.tm_mon + 1); // leden = 0 (tak bacha!)
Serial.print("Den: ");
Serial.println(tm.tm_mday); // den v mesici (0-31)
Serial.print("Hodina: ");
Serial.println(tm.tm_hour); // hodina od pulnoci (0-23)
Serial.print("Minuty: ");
Serial.println(tm.tm_min); // minuty (0-59)
Serial.print("Sekundy: ");
Serial.println(tm.tm_sec); // sekundy (0-59)
Serial.print("Den tydne: ");
Serial.println(tm.tm_wday); // Den v tydnu od nedele (0-6)
if (tm.tm_isdst == 1) // priznak letniho casu
Serial.print("LETNI");
else
Serial.print("ZIMNI");
Serial.println("CAS");
Serial.println("---------");
mujdatum = twoDigits(tm.tm_mday) + "." + twoDigits(tm.tm_mon + 1) + " " + String(tm.tm_year + 1900);
mujcas = twoDigits(tm.tm_hour) + ":" + twoDigits(tm.tm_min) + ":" + twoDigits(tm.tm_sec);
lcd.setCursor(1, 0); //0 tý řádek od 3 pozice
lcd.print("Hodiny a teplomer!");
lcd.setCursor(2, 1); // 1 řádek, 2 pozice
//lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(mujcas);
lcd.setCursor(4, 2);
lcd.print(mujdatum); //2 řádek 0 pozice
/* float tpl=bme.readTemperature();
teplota = String(tpl)+"*C";*/
float T = dht.readTemperature();
float H = dht.readHumidity();
String sT=String(T)+"*C";
String sH=String(H)+"%";
lcd.setCursor(2, 3);
lcd.print(sT+" "+sH);
}
void setup() {
Serial.begin(115200);
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
show();
configTime(0, 0, MY_NTP_SERVER); // 0, 0 protoze dale pouzijeme TZ
setenv("TZ", MY_TZ, 1); // nastaveni promenne s casovym pasmem
tzset();
dht.begin();
// start Wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { // nez se pripoji, tiskni tecky
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
lcd.clear();
}
void loop() {
showTime();
delay(1000); // cekani a pak znova
}