Sommario:

NaTaLia Weather Station: Arduino Solar Powered Weather Station Fatto nel modo giusto: 8 passaggi (con immagini)
NaTaLia Weather Station: Arduino Solar Powered Weather Station Fatto nel modo giusto: 8 passaggi (con immagini)

Video: NaTaLia Weather Station: Arduino Solar Powered Weather Station Fatto nel modo giusto: 8 passaggi (con immagini)

Video: NaTaLia Weather Station: Arduino Solar Powered Weather Station Fatto nel modo giusto: 8 passaggi (con immagini)
Video: High Density 2022 2024, Luglio
Anonim
NaTaLia Weather Station: Arduino Solar Powered Weather Station fatto nel modo giusto
NaTaLia Weather Station: Arduino Solar Powered Weather Station fatto nel modo giusto
NaTaLia Weather Station: Arduino Solar Powered Weather Station fatto nel modo giusto
NaTaLia Weather Station: Arduino Solar Powered Weather Station fatto nel modo giusto

Dopo 1 anno di operazioni di successo in 2 luoghi diversi, condivido i miei piani di progetto della stazione meteorologica a energia solare e spiego come si è evoluta in un sistema che può davvero sopravvivere per lunghi periodi di tempo dall'energia solare. Se segui le mie istruzioni e utilizzi esattamente gli stessi materiali elencati, puoi costruire una stazione meteorologica a energia solare che funzionerà per molti anni. In realtà l'unico fattore che limita la durata è la durata della batteria che stai utilizzando.

Passaggio 1: funzionamento della stazione meteorologica

1, Trasmettitore: scatola da esterno con pannello solare che invia periodicamente la telemetria meteorologica (temperatura, umidità, indice di calore, forza solare) all'unità ricevente interna.

2, Ricevitore: Unità interna composta da un Raspberry PI 2 + Arduino Mega con un ricevitore RF 433 Mhz collegato per la ricezione dei dati. Nella mia configurazione questa unità non ha alcuna funzionalità di visualizzazione LCD locale. Funziona incautamente. Un programma C principale si occupa di ricevere i dati in ingresso da Arduino tramite la seriale, quindi di registrare i dati in un file di testo e rendere disponibili gli ultimi dati ricevuti tramite telnet affinché altri dispositivi possano interrogarli.

La stazione sta controllando le luci nella mia casa tramite la lettura della fotoresistenza (che determina se fuori è giorno o notte). Il ricevitore è headless nel mio caso ma puoi facilmente modificare il progetto per aggiungere un display LCD. Uno dei dispositivi che utilizzano, analizzano e visualizzano i dati meteorologici dalla stazione è il mio altro progetto: Ironforge il NetBSD Toaster.

Passaggio 2: prime versioni

Prime versioni
Prime versioni
Prime versioni
Prime versioni
Prime versioni
Prime versioni
Prime versioni
Prime versioni

Ci sono molti progetti solari in rete, ma molti di loro commettono l'errore comune che il sistema sottrae più energia dalla batteria nel tempo a quella che il pannello solare potrebbe ricostituire, specialmente durante i mesi invernali nuvolosi e bui.

Quando si progetta un impianto solare l'unica cosa che conta è il CONSUMO DI ENERGIA, su tutti i componenti: mcu, trasmettitore radio, regolatore di tensione ecc.

Usare un computer di grandi dimensioni come un raspberry pi o un dispositivo wifi affamato di energia come l'ESP solo per raccogliere e trasportare un paio di bit di dati meteorologici sarebbe eccessivo, ma come lo mostrerò in questo tutorial anche una piccola scheda Arduino lo è.

La cosa migliore è sempre misurare la corrente durante il processo di costruzione con un misuratore o con un oscilloscopio (utile quando si tenta di misurare piccoli picchi di utilizzo durante l'operazione in tempi molto brevi (millisecondi)).

Nella prima foto potete vedere la mia prima stazione (Arduino Nano Based) e la seconda scheda Arduino Barebone Atmega 328P.

La prima versione, sebbene funzionasse perfettamente (monitoraggio dell'ambiente e invio di dati via radio) aveva un consumo energetico troppo elevato ~ 46 mA e scaricava la batteria in poche settimane.

Tutte le versioni utilizzavano la seguente batteria:

Scheda di protezione integrata della batteria ricaricabile agli ioni di litio protetta da 18650 6000 mAh

AGGIORNAMENTO su queste batterie ScamFire. Sebbene questo sia un Instructable abbastanza vecchio, mi sentivo ancora in dovere di correggerlo a causa di questa batteria fasulla. NON acquistare la batteria menzionata, fai le tue ricerche su altre batterie LION/LIPO, tutte le batterie da 3,7 V funzioneranno con questo progetto.

Finalmente ho avuto il tempo di sfatare la batteria di ScamFire per vedere qual è la sua capacità reale. Pertanto eseguiremo 2 calcoli affiancati alle capacità reali e "pubblicizzate".

Prima di tutto questa è una cosa che questa batteria è falsa e nulla di ciò che affermano è vero, le nuove versioni sono anche peggio hanno copiato il falso con tralasciando il circuito di protezione da 2 centesimi, quindi nulla impedirà loro di scaricarsi fino a zero.

Un piccolo articolo sulle batterie LION/LIPO:

TLDR:

Ciò significa che la tensione massima della cella è 4,2 V e che la tensione "nominale" (media) è 3,7 V.

Ad esempio, ecco un profilo della tensione per una batteria "classica" da 3,7 V/4,2 V. La tensione parte da un massimo di 4,2 e scende rapidamente a circa 3,7 V per la maggior parte della durata della batteria. Una volta raggiunti i 3,4 V, la batteria è scarica ea 3,0 V il circuito di interruzione scollega la batteria.

Le mie misurazioni utilizzando un carico fittizio:

Batteria carica: 4.1V

Cutoff impostato su: 3.4V

Simulazione del carico: 0,15 A (il mio dispositivo ha avuto un piccolo problema con l'andare più in basso di questo.)

Capacità misurata: 0,77 Ah, dagli 0,8 Ah gratuiti che sono 800 mAh invece dei 6000 mAh pubblicizzati!

Dato che questa batteria non aveva nemmeno il circuito di protezione potevo scendere liberamente ma a 3,4V dopo 10 minuti scende già a 3,0V.

Quindi con semplici calcoli la batteria fornisce:

Teorico

Tensione della batteria = 3,7 V

Potenza =3,7x6000= 22000 mWh

Vero

Voltaggio batteria =3.7VPotenza =3.7x800= 2960 mWh

Versione: 0.1 ARDUINO NANO BASED

Anche con la libreria LowPower un Arduino nano consuma ~ 16 mA (in modalità sleep) -> FAIL.

Teorico

Pavg=VxIavg =5Vx16mA= 80 mW

Durata della batteria = 22000/80 = 275 ore = 11 giorni circa

RealPavg=VxIavg =5Vx16mA= 80 mW

Durata della batteria = 800/80 = 10 ore

Versione: 0.2 Atmega 328P Barebone

La potenza consumata da un ATmega328 dipende molto da cosa stai facendo con esso. Seduto lì in uno stato predefinito, può utilizzare 16 mA a 5 V mentre funziona a 16 MHz.

Quando l'ATmega328P è in modalità attiva, eseguirà continuamente diversi milioni di istruzioni al secondo. Inoltre, il convertitore analogico-digitale delle periferiche di bordo (ADC), l'interfaccia periferica seriale (SPI), il timer 0, 1, 2, l'interfaccia a due fili (I2C), l'USART, il timer watchdog (WDT) e il rilevamento del Brown-out (BOD) consumano energia.

Per risparmiare energia, l'MCU ATmega328P supporta una serie di modalità di sospensione e le periferiche inutilizzate possono essere spente. Le modalità di sospensione differiscono per le parti che rimangono attive, per la durata del sonno e per il tempo necessario per svegliarsi (periodo di sveglia). La modalità sleep e le periferiche attive possono essere controllate con le librerie sleep e power dell'AVR o, più sinteticamente, con l'eccellente libreria Low-Power.

La libreria Low-Power è semplice da usare ma molto potente. L'istruzione LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); mette l'MCU in SLEEP_MODE_PWR_DOWN da 16 ms a 8 s, a seconda del primo argomento. Disabilita l'ADC e il BOD. Lo spegnimento automatico significa che tutte le funzioni del chip sono disabilitate fino all'interruzione successiva. Inoltre, l'oscillatore esterno viene arrestato. Solo gli interrupt di livello su INT1 e INT2, gli interrupt di cambio pin, la corrispondenza degli indirizzi TWI/I2C o il WDT, se abilitato, possono riattivare l'MCU. Quindi con la singola dichiarazione ridurrai al minimo i consumi energetici. Per un Pro Mini da 3,3 V senza LED di alimentazione e senza regolatore (vedi sotto) che esegue l'istruzione, il consumo di energia è di 4,5 μA. Questo è molto vicino a quanto menzionato nella scheda tecnica ATmega328P per lo spegnimento automatico con WDT abilitato di 4,2 μA (scheda tecnica collegata nelle fonti). Pertanto, sono abbastanza fiducioso che la funzione powerDown spenga tutto ciò che è ragionevolmente possibile. Con l'istruzione LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);, il WDT sarà disabilitato e non ti sveglierai finché non verrà attivato un interrupt.

Quindi con la configurazione barebone possiamo mettere il chip in modalità di sospensione per 5 minuti, mentre consuma pochissima energia (0,04 mA senza periferiche). Tuttavia questo è solo il chip Atmega 328P con l'oscillatore al cristallo e nient'altro, il booster di tensione utilizzato in questa configurazione per aumentare la tensione della batteria da 3,7 V -> 5,0 V consuma anche 0,01 mA.

Un assorbimento di tensione costante è stato il fotoresistore aggiunto che ha aumentato il consumo in modalità di sospensione a 1 mA complessivo (questo include tutti i componenti).

La formula per calcolare il consumo preciso per il dispositivo sia in modalità di sospensione che di riattivazione è:

Iavg = (Ton*Ion + Tsleep*Sleep) / (Ton + Tsleep)

Ione = 13mA

Questo proviene principalmente dal trasmettitore RF433 Mhz:

Trasmettitore:

Tensione di lavoro: 3V - 12V per max. consumo energetico 12 V Corrente di lavoro: max Meno di 40 mA max e min 9 mA Modalità di risonanza: (SAW) Modalità di modulazione: ASK Frequenza di lavoro: Eve 315 MHz o 433 MHz Potenza di trasmissione: 25 mW (315 MHz a 12 V) Errore di frequenza: +150 kHz (max) Velocità: inferiore a 10 Kbps

Isolamento = 1mA

Sarebbe notevolmente inferiore senza la fotoresistenza.

Tempo di rotazione Ton=250 mS = 0.25s

Tempo di sonno Tsleep= 5 min = 300s

Iavg = (Ton*Ion + Tsleep*Sleep) / (Ton + Tsleep)

Media = (0,25 s*13 mA + 300 s*1 mA) / (0,25 s+300 s)

Iavg=1.26mA

Pavg=VxIavg =5Vx1,26mA=6 mW

Teorico

Durata della batteria = 22000 mWh/6 mW = 3666 ore = 152 giorni circa

Vero

Durata della batteria = 800 mWh/6 mW = 133 ore = 5,5 giorni circa

Sebbene queste fossero ancora una serie UltraFire migliore di quella che ho usato inizialmente, si poteva vedere che senza il pannello solare o il basso consumo di 1 mA questo progetto non sarebbe sopravvissuto a lungo.

Sentiti libero di costruire la stazione e annota i tuoi risultati e calcoli nei commenti e aggiornerò l'articolo. Apprezzerei anche i risultati con diversi MCU e convertitori boost.

Passaggio 3: costruire una stazione meteorologica di successo

Costruire una stazione meteorologica di successo
Costruire una stazione meteorologica di successo
Costruire una stazione meteorologica di successo
Costruire una stazione meteorologica di successo
Costruire una stazione meteorologica di successo
Costruire una stazione meteorologica di successo
Costruire una stazione meteorologica di successo
Costruire una stazione meteorologica di successo

Sebbene sia la prima versione di successo, contiene un po' di errori nelle immagini e non posso rifarle perché le stazioni sono già state installate. I due booster di tensione mostrati in figura sono ottenibili al momento in cui scriviamo per aeromodellismo e altre applicazioni. Quando ho riprogettato la mia stazione stavo pensando di ottenere una scheda stepup di tensione più piccola ed efficiente, tuttavia di dimensioni più ridotte non significa sicuramente che sia più efficiente.

Il nuovo modulino nell'immagine che non ha nemmeno un led di segnalazione in realtà ha scaricato 3mA (*FAIL*) da solo, quindi sono rimasto con la mia vecchia scheda:

Controllo PFM DC-DC USB 0.9V-5V a 5V dc Boost Modulo di alimentazione step-up

Nel momento in cui scriviamo questo modulo è ancora disponibile su Ebay a 99 cent ma se decidi di utilizzare un altro booster controlla sempre il consumo in standby. Con un booster di buona qualità non dovrebbe essere superiore al mio (0,01 mA), anche se il piccolo LED a bordo doveva essere dissaldato.

Passaggio 4: elenco hardware

Elenco hardware
Elenco hardware
  • Scheda di protezione integrata della batteria ricaricabile agli ioni di litio protetta da 18650 6000 mAh
  • Atmega 328P16M 5V con bootloader
  • Kit Adafruit DC Boarduino (compatibile con Arduino) (con ATmega328) < questo sarà un buon investimento se stai realizzando futuri progetti barebone
  • Fotoresistenza sensibile alla luce Fotoresistenza Optoresistore 5mm GL5539
  • Diodo 1A 1000V Diodi raddrizzatori 1N4007 IN4007 DO-41
  • Controllo PFM DC-DC USB 0.9V-5V a 5V dc Boost Modulo di alimentazione step-up
  • Caricatore per celle a resina epossidica con sistema di moduli mini pannelli solari da 1,6 W 5,5 V 266 mA fai da te
  • Modulo caricatore per scheda di ricarica della batteria al litio Mini USB 1A TP405 5V
  • Kit di collegamento trasmettitore e ricevitore 433Mhz RF per telecomando Arduino/ARM/MC < Kit, contiene sia il trasmettitore che il ricevitore
  • Scatola di giunzione per protezione interruttore IP65 Custodia impermeabile per esterni 150x110x70mm
  • Nuovo modulo sensore di temperatura e umidità relativa DHT22 per Arduino
  • 1x220 Ohm, 2x10KOhm, 1xLED, 1xMini Switch, 1x1N4007diodo
  • Risonatore/oscillatore in ceramica Adafruit 16 MHz [ADA1873]
  • Arduino UNO/Mega ecc per stazione ricevente + Raspberry PI 1/2/3
  • Scatola di plastica acrilica trasparente (opzionale)

Puoi trovare tutti questi su Ebay, non voglio promuovere nessun venditore collegandoti alle loro pagine e comunque i collegamenti diventeranno morti in futuro.

Note per l'elenco hardware:

Nel caso in cui in qualche modo blocchi l'Atmega con la programmazione, acquistane di più, lo stesso vale per il booster di tensione e il controller di carica solare.

Il caricatore solare contiene 2 piccoli LED colorati che si accendono solo in caso di ricarica solare e indicano (rosso-> in carica, blu-> stato di carica completa). Anche questi possono essere dissaldati. Dà un po' più di energia in più alla batteria durante la ricarica.

Come vedi non ci sono portabatterie nella mia lista. Come mai? Perché sono inaffidabili. Ho avuto innumerevoli occasioni in cui la batteria si è spostata dal supporto e ha perso la connessione. Soprattutto se la tua configurazione è montata su un palo alto come il mio, aperto per qualsiasi condizione atmosferica avversa. Ho persino chiuso la batteria nel supporto con 2 cerniere ed è ancora riuscita a uscire. Non farlo, basta rimuovere il rivestimento esterno dalla batteria e saldare i fili direttamente nella parte inferiore della batteria, contenente il circuito di protezione da sovraccarico (non bypassare la protezione). Un portabatteria può essere utilizzato solo per tenere la batteria in posizione nel dispositivo.

TP405 5V Mini USB 1A Lithium Battery Charging Board: sfortunatamente questa scheda non include la protezione dalla corrente inversa al pannello solare, per questo sarà necessario 1 diodo in più da posizionare tra una gamba del pannello solare e il circuito di ricarica per interrompere il tentativo di corrente per rifluire nel pannello solare di notte.

Passaggio 5: assemblaggio

Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea

Questa scheda contiene relativamente pochi componenti e gli indicatori sulla scheda sono abbastanza semplici.

Assicurati di NON inserire l'Atmega328P nel modo sbagliato (che può surriscaldare e murare il chip, potrebbe distruggere anche il booster di tensione).

In questa configurazione il chip è rivolto verso il basso (piccolo foro a U che contrassegna il PIN1). Tutti gli altri componenti dovrebbero essere evidenti.

Utilizzare un cavo schermato (ad es.: Cavo audio da CDrom andrà bene) per l'LDR. In alcuni casi (in molte settimane di test) si è scoperto che interferisce con la trasmissione del segnale radio. Questo era uno di quei bug difficili da risolvere, quindi se non vuoi problemi usa un cavo schermato, fine della storia.

LED: Il LED nella parte inferiore della scatola è stato originariamente aggiunto per lampeggiare quando c'è una trasmissione radio in uscita, ma in seguito l'ho considerato uno spreco di energia e lampeggia solo 3 volte durante il processo di avvio.

TP: è il punto di prova per misurare la corrente per l'intero circuito.

DHT22: non comprare il DHT11 economico, spendi 50 centesimi in più per ottenere il DHT22 bianco che può misurare anche temperature negative.

Passaggio 6: progettazione della custodia

Design della cassa
Design della cassa
Design della cassa
Design della cassa
Design della cassa
Design della cassa

Sebbene sia un po' eccessivo, è stato realizzato un cubo stampato in 3D (weather_cube) per tenere in posizione il sensore di temperatura DHT22. Il cubo è incollato al fondo del box IP, dotato di un solo foro per il passaggio dell'aria al sensore. Ho aggiunto una rete alla buca contro api, vespe e altre piccole mosche.

Opzionalmente è possibile utilizzare una scatola esterna per rendere la stazione più impermeabile nel caso in cui la si monti su un'asta della parabola all'aperto.

Idea per 1 caratteristica utile: aggiungere una grande piastra metallica sul tetto di 1-2 cm sulla parte superiore della scatola che fornisce ombra dal sole durante l'estate, anche se questo potrebbe anche togliere la nostra utile luce solare dal pannello. Puoi inventare un disegno che separi il pannello e la scatola (lasciando il pannello al sole, la scatola in ombra).

Nelle foto: una delle stazioni rimossa dall'ambiente di lavoro dopo 1 anno, la tensione della batteria è ancora a 3,9 V, nessun danno dell'acqua a nessuna parte della scatola anche se la rete che ho incollato sul fondo del cubo è stata strappata. Il motivo per cui la stazione necessitava di manutenzione è un errore di connessione sul connettore LDR, sebbene il cavo di collegamento sembrava essere ancora in posizione, la connessione era interrotta, quindi il pin a volte fluttuava fornendo letture analogiche LDR errate. Suggerimento: se si utilizzano cavi jumper per PC standard, incollarli tutti dopo che la stazione funziona perfettamente per evitare ciò.

Passaggio 7: software

Software
Software

Il codice del software richiederà 3 librerie esterne (LowPower, DHT, VirtualWire). Ho avuto problemi a trovarne facilmente alcuni online ultimamente, quindi li ho allegati in un file ZIP separato. Indipendentemente dal sistema operativo che stai utilizzando Linux/Windows, trova la cartella della libreria dell'IDE Arduino ed estraili lì.

Solo una nota, a prescindere dal fatto che già sconsiglio di acquistare il DHT11, se usi il tipo sbagliato di sensore DHT il programma si bloccherà per sempre all'inizio nella sezione di inizializzazione (non vedrai nemmeno il led di avvio lampeggiare 3 volte).

Il codice del ciclo principale è molto semplice, prima legge i valori dell'ambiente (temperatura, indice di calore, umidità, solare), li invia via radio quindi utilizza la libreria lowpower per mettere in sospensione Arduino per 5 minuti.

Ho scoperto che l'abbassamento del baudrate aumenterà la stabilità delle trasmissioni radio. La stazione sta inviando una piccolissima quantità di dati, 300 bps sono più che sufficienti. Inoltre, non dimenticare che il trasmettitore funziona solo da ca. 4.8V, nella futura versione 3.3V questo potrebbe portare a una qualità di trasmissione ancora peggiore (invio di dati attraverso muri e altri ostacoli). Ho riscontrato un problema con l'utilizzo di un Arduino Mega collegato a un Raspberry PI 2 che alimenta il Mega dal PI, che non ho ricevuto alcuna trasmissione. La soluzione era alimentare il Mega da un alimentatore esterno separato da 12V.

Passaggio 8: versione 2 (basata su ESP32)

Versione 2 (basata su ESP32)
Versione 2 (basata su ESP32)
Versione 2 (basata su ESP32)
Versione 2 (basata su ESP32)
Versione 2 (basata su ESP32)
Versione 2 (basata su ESP32)

Tutto ciò che può rompersi si romperà per citare il buon vecchio Murphy e alla fine, dopo anni, le stazioni hanno fallito per vie misteriose. Uno ha iniziato a inviare dati solari incomprensibili che sono arrivati fino a decine di migliaia, il che è impossibile a causa di: La scheda Arduino contiene un convertitore analogico-digitale a 6 canali (8 canali sul Mini e Nano, 16 sul Mega). Ciò significa che mapperà le tensioni di ingresso tra 0 e 5 volt in valori interi tra 0 e 1023. Quindi, dopo aver sostituito la radio, LDR e riprogrammato l'Atmega 328P più volte, ho rinunciato e ho deciso che era il momento dell'innovazione. Andiamo ESP32.

La scheda che ho usato era una: ESP32 WEMOS LOLIN32 Lite V1.0.0 Wifi & Bluetooth Card Rev1 MicroPython 4MB FLASH

wiki.wemos.cc/products:lolin32:lolin32_lit…

Microcontrollore ESP-32

Tensione di esercizio 3,3 V Pin I/O digitali 19 Pin di ingresso analogico 6 Velocità di clock (max) 240 Mhz Flash 4 M byte Lunghezza 5 mm Larghezza 2,54 mm Peso 4 g

Che a differenza di quello in foto non ha il logo LOLIN (contraffatto dalla Cina). La mia prima piacevole sorpresa è stata che la piedinatura stampata sulla scheda corrispondeva alla piedinatura di Arduino! Dopo aver avuto a che fare con così tante schede noname in cui ho dovuto cercare la piedinatura tutto il giorno stanco morto commettendo errori, finalmente una scheda in cui la piedinatura è semplice WoW!

Tuttavia, ecco il lato oscuro della storia:

Inizialmente ho collegato l'LDR a A15 che è il pin 12 perché era più facile incollare a caldo i pin insieme. Poi ho 4095 letture (che è il massimo che puoi ottenere con AnlogRead su ESP32) che mi ha fatto impazzire perché l'intero motivo per cui ho ricostruito la stazione erano le letture LDR rotte da quella vecchia (il DHT funzionava ancora bene). Quindi risulta che:

L'ESP 32 integra due registri ACD a 12 bit. ADC1 con 8 canali collegati ai GPIO 32-39 e ADC2 con 10 canali in un altro pin. Il fatto è che ESP32 utilizza l'ADC2 per gestire le funzioni wifi, quindi se usi il Wifi, non puoi usare quel registro. L'API del driver ADC supporta ADC1 (8 canali, collegati ai GPIO 32 - 39) e ADC2 (10 canali, collegati ai GPIO 0, 2, 4, 12 - 15 e 25 - 27). Tuttavia, l'utilizzo di ADC2 presenta alcune limitazioni per l'applicazione:

ADC2 è utilizzato dal driver Wi-Fi. Pertanto l'applicazione può utilizzare ADC2 solo quando il driver Wi-Fi non è stato avviato. Alcuni dei pin ADC2 vengono utilizzati come pin di strapping (GPIO 0, 2, 15), quindi non possono essere utilizzati liberamente. È il caso dei seguenti kit di sviluppo ufficiali:

Quindi, collegando l'LDR dal pin 12 ad A0, che è il VP, è stato risolto tutto, ma non capisco perché stanno persino elencando i pin ADC2 come disponibili per i produttori. Quanti altri hobbisti hanno perso un sacco di tempo prima di capirlo? Almeno contrassegna i pin inutilizzabili con il rosso o qualcosa del genere o non menzionarli affatto nel manuale in modo che altri produttori possano scoprirli solo se ne hanno davvero bisogno. L'intero scopo di ESP32 è usarlo con WIFI, tutti lo usano con WIFI.

Un buon inizio per configurare l'IDE Arduino per questa scheda:

Anche se l'ho inserito nel codice, eccolo di nuovo:

Questo codice potrebbe non essere compilato per altri modelli ESP32 oltre al Weemos LOLIN 32!

Impostazioni build: -Usa upload/seriale: 115200 -Usa CPU/ram: 240Mhz (Wifi|BT) -Usa frequenza flash: 80 Mhz

Ci sono tonnellate di stazioni meteorologiche basate su ESP32 in rete, sono molto più comuni rispetto alla mia versione 1 con il chip barebone perché sono più facili da configurare, non è necessario un programmatore, basta collegare il dispositivo su USB e programmarlo e il loro la modalità di sospensione profonda è eccellente per lunghi periodi di funzionamento a batteria. Fin dall'inizio questa è stata la prima cosa che ho testato anche prima di saldare i perni di sblocco perché, come ho notato in più punti in questo progetto, la cosa PI importante è il consumo energetico e con la batteria corrente (falsa) e il piccolo pannello solare lo standby la potenza non può davvero superare 1-2 mA, altrimenti il progetto non sarà in grado di sostenersi a lungo termine.

È stata di nuovo una piacevole sorpresa che la modalità di sospensione profonda funzioni come pubblicizzato. Durante il sonno profondo la corrente era così bassa che il mio multimetro economico non poteva nemmeno misurarla (funziona per me).

Durante l'invio dei dati la corrente era di circa 80 mA (che è circa 5 volte superiore a quando l'Atmega 328P si svegliava e trasmetteva), tuttavia non dimenticare che con il V1 c'era un consumo medio di 1 mA sull'LDR in modalità di sospensione (che dipendeva anche dai livelli di luce e passava da 0,5 mA a 1 mA) che ora è sparito.

Ora che la batteria UltraFire è smontata se usi la stessa batteria, ecco cosa puoi aspettarti:

Iavg = (Ton*Ion + Tsleep*Sleep) / (Ton + Tsleep)

Iavg = (2s*80mA + 300s*0.01mA) / (2s+300s) Iavg = 0.5mA

Pavg=VxIavg =5Vx0,5mA=2,5 mW

Teorico

Durata della batteria = 22000 mWh/2,5 mW = 8800 ore = 366 giorni circa

Vero

Durata della batteria = 800 mWh/2,5 mW = 320 ore = 13 giorni circa

Non avevo un cannocchiale per misurare con precisione il tempo di accensione, ma con le mie modifiche si chiude in circa 2 secondi.

Non volevo passare il pomeriggio a codificare tutto, quindi ho cercato altre stazioni meteorologiche su Instructables basate su ESP32 per vedere cosa fanno per l'archiviazione dei dati. Purtroppo ho notato che stanno usando siti poco flessibili e limitati come weathercloud. Dato che non sono un fan del "cloud" e il loro codice si è rotto da tempo perché il sito ha cambiato la sua API da allora, ho impiegato i miei 10 minuti per creare una soluzione personalizzata perché non è così difficile come si potrebbe pensare. Iniziamo!

Prima di tutto non esiste una foto del circuito stampato separatamente per questo progetto, perché utilizza gli stessi componenti (scusate per quella brutta immagine della breadboard saldata) del V1 con la differenza che tutto funziona a 3,3 V. Il DHT si è collegato con un pullup a VCC, l'LDR ha tirato giù con un 10k. Il problema che si potrebbe vedere con le batterie 18650 come il mio falso cinese (6500 mAh ultra sun fire lol: D) è che iniziano la curva di scarica da circa 4,1 V new age e vanno fino a quando il loro circuito di interruzione si attiva per fermare il danno alla cella (quelli che hanno la fortuna di averlo). Questo non va bene per noi come ingresso a 3,3 V. Sebbene questa scheda LOLIN abbia un connettore per batteria al litio e un circuito di ricarica, in questo progetto volevo rinnovare il più possibile dalla vecchia stazione, quindi con il vecchio 18650 NON PUOI usare questo caricabatterie integrato. La soluzione era semplicissima: ho tagliato un cavo micro USB saldato a 5 V dal vecchio booster di tensione e voilà il problema è stato risolto, poiché la scheda sul microUSB ha un regolatore.

Quindi la differenza tra la vecchia e la nuova versione che nella vecchia batteria fornisce 3,7 V -> potenziata a 5 V -> ardu funziona a 5 V -> tutti i componenti funzionano a 5 V.

Nella nuova: la batteria fornisce 3,7 V -> potenziata a 5 V -> regolata tramite reg di bordo su ESP32 -> tutti i componenti funzionano a 3,3 V.

Per quanto riguarda il software, avremo bisogno anche di un'altra libreria DHT, il DHT di Arduino non è compatibile con gli ESP. Quello di cui abbiamo bisogno si chiama DHT ESP.

Ho iniziato a basare il mio codice sull'esempio DHT fornito da questo codice. Il funzionamento del codice è:

1, ottenere i dati ambientali dai dati DHT + Solar dalla fotocellula

2, connettersi al wifi con IP statico

3, POST i dati su uno script php

4, vai a dormire per 10 minuti

Come noterai, ho ottimizzato il codice per l'efficienza per ridurre al minimo il tempo di sveglia poiché sta scaricando 5 volte la potenza rispetto al vecchio progetto quando è acceso. Come ho fatto? Prima di tutto, se c'è QUALSIASI tipo di errore, la funzione getTemperature() restituirà false (che significa 10 minuti di sospensione). Questo può essere come il sensore DHT non può essere avviato o la connessione Wi-Fi non è disponibile. Come noti, anche il solito ciclo while() per continuare a provare l'associazione wifi per sempre è stato rimosso, ma è necessario lasciare un ritardo di 1 secondo altrimenti non si connetterà sempre e dipende anche dal tipo di AP, dal carico, ecc. Quanto è veloce accadrà, con 0,5 secondi ho avuto un comportamento incoerente (a volte non è stato possibile connettersi). Se qualcuno conosce un modo migliore per farlo, lo lasci nei commenti. Solo quando i dati DHT vengono letti E la connessione wifi è attiva, cercherà di inviare i dati allo script sul server web. Tutti i tipi di funzioni per perdere tempo come Serial.println() sono disabilitati anche in modalità operativa normale. Come server utilizzo anche IP per evitare una ricerca DNS non necessaria, nel mio codice sia il gateway predefinito che il server DNS sono impostati su 0.0.0.0.

Non capisco perché sia così difficile creare la tua API quando tutto ciò che serve è:

sprintf(risposta, "temp=%d&hum=%d&hi=%d&sol=%d", temp, hum, ciao, sol);

int httpResponseCode =

Metti questo piccolo codice php su qualsiasi raspberry pi e puoi eseguire immediatamente le attività di system() in base alla telemetria come accendere le ventole o accendere le luci se diventa abbastanza buio.

Alcune note sul codice:

WiFi.config(staticIP, gateway, subnet, dns); // DEVE essere dopo l'inizio del Wifi quanto stupido…

WiFi.mode(WIFI_STA); // DEVE altrimenti creerà anche un AP indesiderato

Sì, ora lo sai. Anche l'ordine delle configurazioni IP può cambiare attraverso le piattaforme, ho provato prima altri esempi in cui sono stati scambiati i valori del gateway e della sottorete. Perché impostare IP statico? Beh, è abbastanza ovvio, se hai una casella dedicata sulla tua rete come un server Linux che esegue isc dhcpd, non vuoi cento milioni di voci di registro da quando l'ESP si riattiva e ottieni l'IP dal DHCP. I router normalmente non registrano le associazioni in modo che non vengano viste. Questo è il prezzo del risparmio energetico.

V2 non è mai stato in grado di sostenersi a causa della batteria di cattiva qualità e l'ho semplicemente messo su un adattatore quindi se vuoi costruire il V1 o il V2 NON comprare la batteria menzionata, fai le tue ricerche sulle batterie (qualsiasi 18650 oltre 2000mAh di capacità pubblicizzata su Ebay è una truffa con un'alta probabilità).

Consigliato: