Daca m-am tot jucat cu ceasuri NTP cu Wemos D1 (ESP8266), la care am afisaj ora pe diferite afisaje led, am zis sa am si unul pe in afisaj OLED cu interfata i2c. Cele mai uzuale sunt cele cu diagonala de 0.96" (cca 2,44cm) si rezolutie 128x64 pixeli.
Dintre toate exemplele de pe net, am ales pe cel din articolul ESP8266 NTP Clock, care are o schema si o prezentare cu caractere foarte dragute (dar care ocupa destul de multa memorie):
Am reprodus si eu ceasul, schimband modul de de afisare al datei, dupa cum se vede in filmuletele:
Pogramul modificat de mine, si folosit in filuleltele de mai sus, este NTP_clock_on_OLED_v0.ino.
Ulterior, am incercat sa adaptez partea de reglaj de pe o pagina locala web, dar spatiul ocupat de fonturile astea frumoase, imi tot dadeau erori in functionare, asa ca am renuntat si am ous un comutator (pinul D5 la GND pentru ora de iarna, respectiv la 3.3V pentru ora de vara sau Daylight Saving Time / DST).
Am schimbat afisajul ceasului ce ia infirmatiile de pe un server NTP, dar are reglaje si de pe o pagina locala web cum am prezentat intr-un articol precedent, din unul cu 4 cifre si driver TM1737 intr-unul cu 8 cifre si driver MAX7219.
Schema deriva din cea gasita in articolul IOT ESP32-8266 & Crypto earning, doar ca i-am adaugat senzorul de temperatura/umiditate DHT22 (AM2302):
Ca si precedentele versiuni recente de ceas NTP, la initializarea ceasului ni se afiseaza un AP care persista daca ceasu nu are configurata reteaua wi-fi si parola acesteia (se foloseste facilitatea librariei WiFiManager),
iar daca datele sunt deja introduse, va apare adresa, de exemplu 192.168.3.109:
apoi se intra in modul de ceas, in format de 24 sau 12 ore (functie de alegerea din pagina locala web)
Daca este activata afisarea informatiilor suplimentare, in minutele pare, apare de la secunda 55 data si anul:
iar in minutele impare, dintre secundele 50-55, temperatura
Am observat ca lapierderea tensiunii sau prima alimentare, afisajul nu se aprinde decat la apasarea butonului de RESET de pe pleca WeMos D1, asa ca am modificat un pic schema si acum alimentez afisajul si senzorul DHT22 (AM2302) cu 5V, nu cu 3,3V:
In cautarea unor placi de dezvoltare ieftine cu ESP8266, am dat de placa "Witty", care, in mod normal nu are interfata seriala, ci doar alimentare cu conector micro-usb, dar are pe cablaj un led multicolor, un buton farar retinere si o fotorezistenta conectata la intrarea analogica intr-o schema de divizor rezistiv. In plus, exista o placa adaptoare cu interfata usb, pentru progrmaare si monitorizare seriala a datelor.
Ulterior, mi-am pus capul la contributie si am scris un programior mai complex (witty_test2.ino), astfel ca la fiecare apasare a butonului fara retinere se schimba culoarea ledului multicolor, iar intensitatea luminoasa a acestuia depinde de intensitatea luminoasa de pe fotorezistenta:
Ca un rezumat, placa de dezvoltare "Witty" cu ESP8266 e utila, daca e deja achizitionata, are cam putini pini liberi, nu e nici "breadboard friendly", pentru a trebuit sa folosesc 2 breadboard-uri pentru a putea face si legaturi, dar daca se foloseste un cablaj de test sau unul clasic atunci se poate folosi fara probleme.
In ai multe proiecte am folosit metoda multiplexarii, care pentru anumite persoane e ceva ciudat si de neinteles, asa ca o sa incerc sa va prezint aceasta metoda, cum am folosit-o eu la ceasuri sau la termostatele cu afisaj led din 7 segmente.
Metoda este folosita de foarte mult timp, in primul rand, pentru ca reduce mult namarul de pini ai afisajului: la afisajul multiplexat cu 4 cifre sunt doar 12 pini (4 cifre si 8 segmente), pe cand la un afisaj cu comanda separata sunt folositi 28 pini (4 grupe de cate 8 segmente).
Daca vreau sa afisez ora 12:34, sunt 2 cazuri:
- cu secundele aprinse (in cazul de fata, doar punctul zecimal de la cifra a 2-a)
- fara secunde
Bun, acum, pentru cazul afisarii orei cu secunda:
respectiv fara secunda
deci sunt 4 timpi:
- primul timp: se alimenteaza prima afisaj si se aprinde cifra 1
- al doilea timp: se alimenteaza al doilea afisaj si se aprinde cifra 2 ( cu sau fara punctul zecimal)
- al treilea timp: se alimenteaza al treilea afisaj si se aprinde cifra 3
- al patrulea timp: se alimenteaza al patrulea afisaj si se aprinde cifra 4
apoi se repeta de la timpul 1.
La afisajele cu anod comun, un fisaj se comanda prin alimentarea cu plus a pinului comun si conectarea minusului, cel putin printr-o rezistenta de limitare a curentului, la toate segmentele dorite a se aprinde, iar la afisajul cu catod comun, segmentele seconecteaza la plus prin rezistenta si la masa se conecteaza pinul comun. Cifrele si anumite litere sau simboluri se fac cum e prezentat in articolul 7-segment HEX decoder