ciao a tutti.
Da poco , accantonato momentaneamente Arduino uno, sto cercando di 'imparare' l'ottima Esp32 lolin lite.
Tanto per praticare e anche per utilita' ho assemblato una semplice sonda per l'umidita' del terreno , e un web server che mostra il dato al momento, su qualsiasi device connesso sulla stessa rete wifi. L'alimentazione e' una cella al litio.
Vorrei mettere la scheda in sleep , ma pronta ad trasmettere i dati alla richiesta del client, per poi rientrare in sleep.
Da giorni cerco di capire i vari esempi, scritti in vari linguaggi , api, librerie non piu' valide o solo per 286 etc. Sono molto confuso su quanto ho trovato in rete.
Non per avere la 'pappa pronta', ma potreste darmi almeno una traccia per mettere a dormire ESP32 tranne il modulo wifi per ricevere la richiesta del client, considerando che uso l'IDE Arduino? per me questo particolare aspetto, fino ad ora, e' stato ...'un bagno di sangue'...
Non so se esistono librerie "Arduino like" per mandare in light sleep e in modem sleep un esp32.
Probabilmente si, ma volendo puoi usare direttamente le funzioni dello SDK espressif.
La parte webserver è abbastanza semplici e ci sono migliaia di esempi online (ed anche inclusi nel core).
Ho approfondito un po' il discorso dello sleep e purtroppo hai pochi margini di intervento.
Nel core ESP32 per Arduino infatti, il modem sleep è già abilitato di default e l'unica opzione che rimane per consumare un pochino di meno mantenendo le funzionalità WiFi attive, è di mettere la frequenza della CPU al minimo ovvero 80MHz.
Con la mia NodeMCU-32s alimentata via USB, ho rilevato questi valori:
Modem sleep enabled (default) 55/60mA
Modem sleep enabled + frequenza 80Mhz 40mA (molto più costanti)
Appena ho modo provo a misurare anche una ESP32-C3 alimentata con una LiPo.
Prova ad aggiungere queste righe alla fine del setup()
if (WiFi.getSleep()){
// Giusto per verificare che sia abilitato
Serial.println("Modem sleep enabled");
}
setCpuFrequencyMhz(80);
ciao cotestatnt.
Intanto grazie per il supporto.
Spendendo altre ore online, ho trovato 'qualcosa' che ho aggiunto al mio sketch:
"esp_wifi_set_ps(WIFI_PS_MIN_MODEM);"
per farlo compilare correttamente, ho dovuto linkare le seguenti librerie:
''' #include <esp_wifi_types.h> #include <esp_pm.h> #include <esp_wifi.h>
'''
Purtroppo, non riesco bene a raccapezzarmi oltre l'interfaccia IDE di Arduino, quindi , adesso che mi dici che su Esp32 la funzione modem sleep e' gia' di default, forse ho aggiunto una riga inutile.
D'altro canto, le librerie gia' linkate per fargli fare da web server wifi le ho gia' (#include <WiFi.h>) ma queste che ho trovato, penso siano uelle specifiche per esp32, quindi dovrei modificare lo sketch per fargli usare quelle, immagino.
grazie ancora per la disponibilita'
P.S. Sto dando un'occhiata all'SDK espressif. Penso che lo installero' e lo provero' perche' non lo conosco per nulla. Tu ti ci trovi meglio che l'IDE Arduino?
Non confondere l'Arduino IDE ( Integrated Development Environment) che è un ambiente di sviluppo integrato con ciò che invece è l'SDK Espressif.
SDK sta per Software Development Kit ovvero un'insieme di strumenti di sviluppo specifico per un tipo di MCU. Il compilatore è sempre C++ come con Arduino IDE, ma l'SDK mette a disposizione del codice specifico per l'ESP32 (che poi è quello che viene richiamato nel core ESP32 per Arduino, ma ad esempio non hai a disposizione un editor e quindi devi usarne uno di terze parti (ad esempio VS Code).
Purtroppo per te la parte che assorbe più corrente di tutti sugli ESP in generale e proprio la parte WiFi ed il doverla tenera accesa per ascoltare le richieste non aiuta ...
Rallentare la MCU porta sicuramente un piccolo vantaggio, ma scordati i risparmi che puoi avere su altre MCU senza WiFi e Bluetooth.
ok. Ho fatto il test che dicevi ed effettivamente, gia' dal setup e' in modem sleep.
grazie ad entrambi per i chiarimenti.
Potrei ovviare a cio', forse, avvalendomi di una delle molteplici possibilita' di comunicazione con un database esterno, ad esempio ogni ora, che poi potrei consultare da un client quando voglio, avendo lo storico delle rilevazioni.
Inizialmente avevo pensato a firebase, ma ci rinuncio a priori perche' mi pare troppo macchinoso da mettere su (almeno per me che ho esperienza zero) .
Potrei invece mettere su un'altro esp32 (questo alimentato) che farebbe da collettore dei dati inviati ad intervalli regolari dagli altri esp32 , che a questo punto potrebbero andare in deep sleep.
Potrebbe conservare i dati su una sd leggibile alle richieste di un client.
Che senso ha un ulteriore ESP32?
Meglio un PC che fa girare un database (potrebbe essere ad esempio un raspberry).
Quando esci dal deep sleep ti colleghi al database e scrivi tutto quello che hai da scrivere.
Se si tratta di serie numeriche come ad esempio i valori di sensori nel tempo, prova a dare un'occhiata ad InfluxDB (ci sono anche gli esempi pronti per ESP8266 e per ESP32).
Firebase non è proprio l'ideale per delle time series sia per il tipo di database, ma anche per i costi.
Il vero problema è che anche in deep sleep, le classiche dev-board con ESP32 hanno un consumo piuttosto elevato: il mio solito NodeMCU-32S ad esempio segna circa 16mA con l'esempio incluso nel core.
Probabilmente il grosso è dovuto al regolatore di tensione ed al chip USB/TTL perché da datasheet il microcontrollore dovrebbe assorbire meno di 0.15 mA
A me basterebbe che la batteria durasse almeno un mese.
Ho una 3,7 al litio di 600 mAh.
Trovo molto comodo la possibilita' di ricaricarla attraverso la porta usb del esp32.
Poi chissa, pensero' magari ad una ricarica solare....
In realta' non volevo dedicare un raspy solo a questo (con quello che adesso costano!).
Ne ho gia' uno dove gira Moode (una distro a carattere esclusivamente audiofilo) , ma non so se potrei aggiungere un'altra app che gira in background. Devo guardare bene Moode.
Di Esp32 invece ne ho presi 3 per pochi spiccioli....
grazie per le info sui database. Ci guardo subito.