Tak jen pár poznámek. 

 

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.

Oproti některým návodům je standardní I2C zapojení CLK na D1 a DATA na D2.  

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 

češtinu - zkusím - v programu HelloWorld neumí. Jdu hledat fonty, nemám chuť je definovat. Tak raději psát anglicky.

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.

http://kabinet.fyzika.net/ESP32/ESP32-LCD/ESP32-a-I2C-LCD.php

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.

Tak jsem ho objednal a už přišel.

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. 

 Scatch si raději uložím (až se bude kopírovat, tak raději přes poznámkový blok)

//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
}