Come anticipato in un precedente articolo, sto utilizzando dei display basati sul driver ST7735 per un futuro progetto.
Visto che il mio progetto sarà alimentato a batteria, è molto importante il tema del risparmio energetico.
Durante un utilizzo normale, con la retroilluminazione accesa, il display consuma circa 67mA:
Come prima cosa, possiamo spegnere la retroilluminazione portando a massa il pin BLK. In questo caso il consumo scende a circa 3mA:
Si può ridurre ulteriormente il consumo del display? Leggendo il datasheet, si trova che il chip ST7735 può entrare in uno stato di sleep, a minimo consumo.
Per farlo è necessario inviare il comando SLPIN, mentre per uscire da tale stato il comando da usare è SLPOUT:
Inizialmente, la libreria Adafruit-ST7735-Library non supportava questi comandi. Ho quindi proposto, ed è stata accettata, una modifica che includesse il nuovo metodo:
void Adafruit_ST77xx::enableSleep(boolean enable) |
Con il parametro enable a TRUE viene mandato il comando SLPIN e il chip ST7735 entra in modalità di sleep. In tale modalità, il consumo è di soli 0,47mA:
Ciao Luca,
ho un ESP32 collegato a un ST7735 che mando in deep sleep senza resettare il display. Per risparmiare energia mando anche il display in sleep e al wake dell’ESP32 riattivo il display che si riaccende con l’ultima immagine che aveva caricato come mi aspetto.
L’anomalia che non mi spiego é che i successivi comandi di scrittura testo o full screen di colore vengono come non recepiti.
L’SPI é inizializzata e i pin DC e CS sono in output.
Secondo te a cosa può essere dovuto?
Saluti
ciao Fabrizio, molto strano: è esattamente come gestisco il display nel mio progetto e si “riprende” dallo sleep senza problemi. Mandi anche esp32 in deep sleep (e quindi al risveglio riparte lo sketch)?
Si scusa, mi spiego meglio:
– a primo avvio faccio init display(con hwreset)
– faccio draw di immagine
– mando in sleep display
– mando in deep sleep esp32 specificando di tenere alto (non resettato) pin hw reset display
– al secondo riavvio esp32 sa che sta tornando da deep sleep e chiama solo sleep out del display e mi trovo subito immagine di prima come mi aspetto senza reinizializzare display
– da qui in poi successivi comandi sul display non hanno effetto
Secondo me non rispetto una qualche temporizzazione
ciao Fabrizio, l’unica cosa che cambio è che faccio cmq l’init della libreria al risveglio… per come funziona il deep sleep di esp32 di fatto il processore viene resettato quindi temo che tutte le variabili interne della libreria si perdano.