Dupa ce am tot constatat ca la ceasul cu informatii meteo informatiile de pe ecran nu se mai actualizau dupa cateva zeci de ore (se bloca sau adormea efectiv microcontrolerul de pe placa Raspberry Pi Pico W), am adaugat functia de autodeblocare (watchdog).
Nu eram prea incantat de introducerea functiei WDT care nu a functionat multumitor cu limbajul Arduino si a trebuit sa testez un watchdog extern (vezi articolul), am zis totusi sa incerc versiunea software ce implica doar 3 linii
Partea frumoasa e ca initial am pus un timp de 2 secunde pana se restarteaza daca e ceva in neregula, dar pana sa se conecteze la retea se reseta in continuu si nu mai reuseam sa ma conectez la placa, asa ca a trebuit sa sterg continutul din memorie.
Cu pasi mici, am mai imbunatatit ceasul cu informatii meteo primite de la openweathermap.org, in prima faza am facut ca sa am un pic de animatie, adica cele 2 puncte sa "bata" secundele. Pentru a putea realiza usor asta, am schimbat bibliotecile (fisierele) aferente partii de afisare, dupa cum se va constata in programul Weatherstatio_clock_RPiW_i2c_LCD1602_v2
A urmat sincronizarea orei ceasului meu cu ora reala, obtinand, din primul mesaj, secunda la care se preia mesajul si apoi actualizand informatiile dupa diferenta pana la secunda 0, asa ca acum ora si datele meteo se preiau la schimbarea fiecarui minut, nu la 30 secunda ca in versiunile anterioare, iar ceasul e sincronizat la secunda (intarziere pe ecran de maxim 2-3 secunde necesare receptionarii si decodarii mesajului de la server). Noul program, compus din 4 fisiere, este Weatherstatio_clock_RPiW_i2c_LCD1602_v3
Ca in articolul Raspberry Pi Pico Tips and Tricks am facut sa se aprinda si ledul de pe placa, care este controlat de modulul WiFi, nu direct de pinul 25 ca la placile Raspberry Pi Pico.
Partea proasta e ca, dupa cateva zeci de ore, placa Raspberry Pi Pico W intr-o intr-un blocaj sau intra intr-un mod de adormire (freeze/sleep) si programata cu limbaj MicroPython, nu doar cu limbaj Arduino, ceea ce ar implica introducerea unui sistem extern de resetare (watchdog extern), cum am prezentat intr-un articol.
Dupa cum e indicat si in articolul mentionat la inceput, am inlocuit in programul main.py datele de conectare la reteaua locala Wi-Fi (linia 7), codul APIkey de pe serverul openweathermap.org (linia 8) si localitatea (linia 107).
Am obtinut in programul Thonny IDE urmatoarele informatii:
si pe ecran
dupa ce am am facut o mica modificare si am obtinut "^C" in loc de "-C".
Informatia catre serverul openweathermap.org este solicitata la 30 secunde, afisandsu-se doar starea generala a vremii, ora, temperatura si umiditatea.
Ce m-a deranjat cel mai mult a fost ca in loc de simbolul de grad este o linie sau ce am inlocuit eu, asa ca am cautat pe diverse forumuri si am gasit ca pot apela biblioteca afisajului sa imi puna un simbol asemanator gradului, asa ca am modificat programiorul, in special main.py, doar ca le-am pus pe toate intr-un loc: Weatherstatio_clock_RPiW_i2c_LCD1602_v1.
Dupa modificare, pe afisaj informatia este prezentata astfel:
Am conectat o a doua matrice la cea existenta si acum am un ceas cu 2 matrici de 8x32 leduri adresabile, eu configurandu-le sa am un ecran de 32 coloane si 16 randuri, schema de conectare este
Am folosit intial un montaj cu o placa Wemos D1 pe o placa de test (breadboard), ulterior am fixat cele 2 matrici cu banda adeziva si am conectat la montajul realizat pentru Alt ceas NTP pe afisaj din 8x32 leduri adresabile (2)
Am adaptat apoi un program mai complex ce are si informatii meteo si ceas binar, acesta devenind acum NTPclock_2x8x32_v2_8.ino si am mai facut 2 filmulete:
Dupa cum se observa, ora este fixa o perioada de timp, apoi apare un text deplasabil si valoarea temperaturii oprita pentru un timp:
07.03.2024
La ceva timp am observat ca ora este corecta, dar nu se actualizase data, asa ca am banuit ca Raspberry Pi Pico W se deconecteaza de la reteaua wi-fi, asa ca am odiifcat programul, acesta devenind BIG_Clock_RPpPicoW_DeskClock2h1. Programul este compus din 3 fisiere
Am schimbat sa folosesc biblioteca pentru wifi folosita de ESP32 nu cea de la ESP8266 si periodic interoghez daca este conectat sau nu.. daca nu e, aprin ledulul de pe placa, daca se reconecteaza la reteaua wifi, ledul se stinge. Daca dupa 10 incercari la fiecare 10 minute placa nu este conectata sau la schimbarea zilei, daca placa este deconectata indiferent de numarul de teste nereusite, isi da repornire.