ESP32 alimentato con batterie LiFePO4

Buonasera gente, vorrei avere qualche feedback da chi ha già alimentato un esp32 con batterie LiFePO4.
Io mio obbiettivo è inviare via bluetooth dati relativi a umidità e temperatura del terreno tramite il sensore SHT-35 ( dettaglio Sensore di temperatura e umidità Sensore digitale di temperatura e umidità del suolo Sonda Custodia impermeabile in acciaio inossidabile(FS304-SHT35) : Amazon.it: Commercio, Industria e Scienza )
Attualmente i miei esp32 sono collegati tramite cavo USB ad un alimentatore esterno, ma vorrei passare ad usare le batterie. Facendo un po' di ricerche ho visto che sia le LiFePO4 che le LiPo sono un ottima soluzione. Quello che mi tende a scegliere la prima soluzione è il fatto che saranno direttamente sui vasi di piante esposte al sole, quindi le LiPo sono abbastanza pericolose in questo contesto.
Ho notato inoltre che di base le LiFePO4 hanno un voltaggio da 3.2 il che li rende abbastanza comodi per gli esp32. Vorrei arrivare ad avere una durata delle batterie di un paio di mesi minimo.

Qualcuno ha esperienza in merito, quali sono pro e contro da tenere in considerazione, ha delle batterie da consigliare?

Per quanto riguarda la connessione con esp32 pensavo di usare direttamente vin 5v e gnd, senza passare da USB. Quindi se avete un modulo da consigliare ve ne sarei grato.

Grandezze come temperatura ed umidità variano lentamente nel tempo, quindi io non farei delle misure troppo ravvicinate, diciamo al massimo 1 ogni 5 minuti.

Per il resto del tempo mandi in deep sleep il microcontrollore e qui si apre tutto un capitolo:

Punto primo, per fare una stima che sia attendibile, devi misurare il consumo medio in corrente delle tue schede nelle condizioni di lavoro. Nell'ipotesi fatta sopra, serve fare una media del consumo durante il deep sleep ed una media durante la fase di wake-up e invio dei dati.

Tieni conto che i consumi reali delle schede di sviluppo, non sono solo quelli della MCU, ma devi considerare anche tutto il resto (flash, convertitore USB/TTL, regolatore di tensione etc)
Per farti un'idea, in deep sleep l'ESP32 "da solo" consuma circa 10 uA stando alle informazioni del datasheet, ma una scheda tipo NodeMCU 32-S arriva invece fino a 5-8 mA ovvero 500-800 volte di più.

Io ti consiglierei di usare una scheda basata su ESP32-C3 che ha tutto quello che ti serve ed è il più parsimonioso della famiglia ESP32. Ad esempio per la Seeed Studio XIAO ESP32C3 vengono dichiarati 43uA (inoltre ha anche l'integrato per la ricarica della batteria a bordo, che però credo sia adatto solo per le LiPo).



Per quanto riguarda il BLE, è un'ottima scelta per mantenere bassi i consumi però io adotterei un accorgimento che secondo me ti farebbe ridurre drasticamente consumi e tempi necessari per l'invio dei dati.

Il protocollo di comunicazione BLE prevede che per comunicare tra dispositivi sia necessario stabilire una connessione secondo questa sequenza di funzionamento:

  • il dispositivo "peripheral" quando non connesso invia ciclicamente dei pacchetti di "advertising" che espongono alcune informazioni chiave.
  • il dispositivo "central" fa lo scan e, quando individua queste trasmissioni, da inizio alla procedura di connessione.
  • a connessione avvenuta, il peripheral smette di fare advertising.

Tutto questo handshake richiede del tempo e inoltre quando l'ESP32 va in deep sleep, la connessione viene interrotta e la volta successiva devi rifare tutto dall'inizio.

I pacchetti di advertising però, possono contenere anche dei dati custom detti "manufacturer data" in cui potresti inserire i tuoi valori di temperatura e umidità aggiornati e magari anche il livello della batteria.

Il peripheral si sveglia dal deep sleep, legge i valori dei sensori, invia 3/4 volte il pacchetto di avertising e poi torna immediatamente in sleep.
Dall'altra parte il central rimarrebbe sempre in ascolto di questi pacchetti filtrandoli ad esempio usando il nome o qualche altra caratteristica.

Se la batteria non eccede i 3.6V come nel capo della LiFePO4, puoi entrare direttamente sul pin 3.3V e bypassare il regolatore di tensione.

Ciao grazie per la risposta!
Per quanto riguarda la lettura dei valori dal sensore ho potuto appurare dopo un anno di utilizzo che ho bisogno circa di 3/4 minuti di letture per vedere stabilizzarsi il valore. Quindi dovrei fare resuscitare dal Deep sleep il mio ESP32 e farlo lavorare per 5min diciamo. Io ho già 5/6 esp32 che sto usando appunto per la lettura dei sensori quindi vorrei evitare di comprarne altri onestamente, non perché costino in realtà :rofl:, ma semplicemente mi piacerebbe riusare quello che ho.

Interessante la parte di comunicazione che hai detto, anche perché potrei tranquillamente inizializzare in questo modo il sensore e aspettare questi famosi 4 Min inviando poi i valori come hai descritto tu, incluso il livello di batteria.

Quello che vorrei capire è quale modulo esp32 si usa di solito per queste cose, nel senso in link al prodotto consigliato e anche alle batterie.
Forse qualcosa di simile a questo?
ARCELI 6 Packs Convertitore buck DC-DC 3.0-40V a 1.5-35V Modulo regolatore step down alimentatore https://amzn.eu/d/00NjHPZU

Come porta batteria credo possa usare qualcosa di simile giusto?

GTIWUNG 8Pcs Porta Batterie 18650, 1/2/3/4 × 3.7V 18650 Custodia per Batterie con 1/2/3/1 slots, 18650 Battery Clip Battery Holder Batteries Case for 18650 Battery with Connect Lead for Arduino https://amzn.eu/d/0fvYapdo

Oppure con usb, ma preferisco andare direttamente su vin.

Ho appena trovato questo fantastico articolo su AliExpress. Dai un'occhiata!
3,80€ | Diymore ESP8266 ESP32 ESP32S WeMos 16340 18650 caricabatteria Shield Board Micro USB Type-C Output 5V/2A per Arduino Power Bank
https://a.aliexpress.com/_EyLzlfN

Come batteria invece su Amazon vedo ad esempio queste
PKCELL - Batteria ricaricabile LiFEPO4 AA da 3,2 V, 600 mAh, con parte superiore piatta per torce (4 pezzi) https://amzn.eu/d/0bCfNv4T

Ho già un caricatore per batterie con supporto per LiFePO4, quindi potrei semplicemente togliere le batterie dal porta batteria e ricaricarle.

Con questi presupposti l'alimentazione a batteria durerebbe pochissimo.

Facciamo un esempio:

  • tempo di attività dell'ESP32 4 minuti
  • una lettura ogni ora
  • corrente con MCU attiva 100mA
  • corrente con MCU in deep sleep 5mA

Il tuo microcontrollore avrà un assorbimento di circa 100mA per un totale di 4*60*24 = 5760 secondi al giorno, mentre rimane in deepsleep per 86400 - 5760 = 80640 secondi al giorno.

Con una capacità di 600mAh ci fai poco più di 2 giorni, altro che 2 mesi...

Cosa ci dovresti fare con 'sto modulo? Con una LiFePO4 semmai dovresti usare un DC-DC step-up (quello del link è uno step-down), ma non faresti altro che aggiungere un altro elemento che introduce ulteriore assorbimento a discapito della durata: bene che va uno step-up ha un'efficienza dell'80/90%, quindi nella migliore delle ipotesi "sprechi" il 10% dell'energia disponibile.

1 Like

L'uso dello step down è dovuta al fatto che conto di mettere 2/3 batterie quindi il voltaggio supererebbe i 6v max consigliati usando vin su 5v.

Che batteria mi servirreebbe quindi? Quanti mAh cioè praticamente il progetto non sta in piedi se non con 20000 mAh...però non ci sono batterie piccole così.
Che alternative ci sono?

Potrei forse usare la modalità "modem sleep" per 3 minuti, in questo modo raccolgo intanto i dati del sensore e poi 1 minuto attivo bluetooth mando dati e di nuovo Deep sleep.
Quindi riepilogando su un ora:

  • 3min modem sleep, ~10 mA
  • 1min modalità attiva, 80 mA
  • 56min Deep sleep, 0.10 mA

Avrei 44.3 mAh di consumo al giorno, che su due batterie sarebbero i due mesi circa.

Usando come valori di consumo 100mA in modalità attiva, 15 in sleep, e 0.15mA in deep arrivo a oltre un mese e mezzo

Sul sensore sono sicuro mi servano 3min

L'ESP32 ha un range di funzionamento che va da 3.0V fino a 3.6V
Potresti evitare l'ingresso Vin (al quale segue poi un regolatore di tensione) e collegare la batteria direttamente al pin 3.3V. Se vuoi usare più batterie per aumentare la durata, mettile in parallelo.
Senza un circuito regolatore di carica non è il massimo perché il rischio è di danneggiare in modo irreversibile la batteria quando il livello di tensione scende troppo.

I moduli che hai individuato hanno tutto quello che serve già integrato (mi riferisco a quello su Aliexpress con una singola 18650) e quindi non serve nessuno step-down.

Ho provato a guardare il datasheet del sensore, e c'è scrirro che dispone di un riscaldatore da attivare solo opzionalmente. Presumo che questa necessità dei 3 minuti dipenda da quello?
Perché non condividi lo sketch che stai usando attualmente?

image

Allora, purtroppo ho dimenticato di caricare l'ultimo sketch sul Cloud ed in questi giorni non ho il PC a portata ( domenica o lunedì mando l'ultimo sketch). Però sono abbastanza sicuro di usare questa libreria e questo sketch, che ovviamente ho riadattato al mio caso d'uso, ossia periferiche sempre su ( tutti gli esp32 sono collegati ad un alimentatore), quindi valori sempre aggiornati e ogni 10 min mando un messaggio su un canale telegram che ho creato.

Per quanto riguarda quel modulo su AliExpress, quello dovrebbe andare bene anche se è specificato come caricabatterie? Cioè, quale è la differenza tra un caricabatterie che alimenta un esp32 e un alimentatore a batteria che alimenta un esp32? E se usassi direttamente USB, perché altrimenti dovrei comprare un adattatore USB vin/gnd, che svantaggi avrei?

Grazie ancora per l'aiuto :pray:

Edit: dimenticavo nei calcoli che ho fatto sopra uso due 18650 da 1500mAh

Aa ma vedendo la foto del modulo di AliExpress, devo saldare un PIN e ho v e g direttamente, quindi posso attaccare lì i jumper e via, senza USB, corretto vero?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.