Go Down

Topic: Modulo WiFi+Bt ESP32 (Read 30397 times) previous topic - next topic

steve-cr

Scusate ma utilizzando più variabili con millis per evitare di usare i delay, gli crea qualche problema o sono io che non riesco a farlo andare?
Allora, usare millis "per evitare i delay" mi sembra un po' poco come ragione.
Diciamo che se usi delay, la scheda ti si INCHIODA finché non ha finito di contare e non fa niente altro.
Usando millis continui a far girare il programma.
Puoi usare tutte le variabili che vuoi per andare a comparare il millis letto poco prima col millis letto attualmente
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

steve-cr

Non dovrebbe creare nessun problema.
 9V ? Due o tre ore ce la fai :-)
Si, mi sono accorto anche io che ESP32 assorbe tanto. Ho solo messo una scheda ed un display 20x4, collegata alla sola USB del PC e all'accensione la retroilluminazione del display sfarfalla e molte volte il programma non partiva....
Con un alimentatore 5v è tutta un'altra cosa.
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

ziopippo

Allora, usare millis "per evitare i delay" mi sembra un po' poco come ragione.
Diciamo che se usi delay, la scheda ti si INCHIODA finché non ha finito di contare e non fa niente altro.
Usando millis continui a far girare il programma.
Puoi usare tutte le variabili che vuoi per andare a comparare il millis letto poco prima col millis letto attualmente
Chiedo venia, non ho specificato le ragioni ma erano le medesime da te citate.

Uso spesso millis per evitare che il microcontrollore si "INCHIODI" come dici tu senza alcun problema.
Con una LOLIN D32 PRO invece non capisco perchè non andava.  :smiley-confuse:
Da qui la mia domanda ;)

testato

Che poi in realtà il delay non é per forza bloccante, vedi yield, ma questo é altro discorso
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

ziopippo

#259
Mar 14, 2019, 10:25 am Last Edit: Mar 14, 2019, 10:26 am by ziopippo
Che poi in realtà il delay non é per forza bloccante, vedi yield, ma questo é altro discorso
Confesso di non avere ancora le idee chiare sull'utilizzo e sul perchè debba essere/venga utilizzato yeald(). Tra l'altro, yeald() è regolabile nel tempo o da come ho letto non è possibile associare nessun parametro e non fa nulla? Quindi a che serve?  :smiley-confuse:  :o 

gpb01

#260
Mar 14, 2019, 10:40 am Last Edit: Mar 14, 2019, 11:49 am by gpb01
Quindi a che serve?  :smiley-confuse:  :o 
Gli ESP in raltà NON sono come Arduino dove hai SOLO il tuo programma che gira e sei tu che controlli tutto ...
... gli ESP sono sistemi "multi-task" in cui il tuo programma è solo uno dei task che girano contemporaneamente all'interno.

Ora, per evitare blocchi e malfunzionamenti, negli ESP è implementato un meccanismo di "watchdog" (questo puoi averlo anche in un normale programma Arduino per controllarne il corretto funzionamento) il quale, se vede un blocco di più di X tempo, effettua un "reset" dell'ESP con conseguente riavvio.

Dato che tu, nel tuo programma, potresti utilizzare un qualche cosa che blocca l'esecuzione degli altri task, come la funzione delay() che, normalmente, è bloccante, è stato introdotto un meccansismo che evita tale cosa ...
... semplificando, per farti capire, nel ESP, la delay() in realtà NON blocca completamente tutto, ma, con regolarità chiama la funzione yield() che ha il compito di passare il controllo ad un altro task (che così può essere eseguito per ciò che deve fare), resettare il "watchdog" (così da evitare il "reset" del ESP) e poi tornare al tuo ciclo di attesa ... e la cosa si ripete sino a quando non è passato il tempo d'attesa da te richiesto.

Spero di averti, più o meno, chiarito le idee :D

Guglielmo
Search is Your friend ... or I am Your enemy !

ziopippo

Grazie mille Guglielmo per l'esauriente e tempestiva spiegazione ;) In realtà alcuni semplici concetti da te menzionati li conoscevo già ma ciò che ignoravo era che l'ESP facesse ricorso a yeald per switchare i vari processi. ;)
Ora mi resta però da capire perchè se uso più di una variabile con millis (per evitare di usare delay) non riesco a tenporizzare più di una funzione. E' come se accettasse solo e soltanto una variabile da usare con millis e la cosa mi lascia sconcertato  :smiley-eek-blue:  soprattutto perchè mi avete già risposto che non è possibile che avvenga ciò  :P

zoomx

#262
Mar 14, 2019, 11:42 am Last Edit: Mar 14, 2019, 11:58 am by zoomx
yield non yeald.

@ziopippo
non ho capito il problema che incontri. Usare millis è come guardare l'orologio molto molto molto spesso  per vedere che ora è in modo da decidere cosa fare in base al tempo che è passato.
Ma gli esempi ti funzionano?

Edit:
grazie Guglielmo! ho corretto anche io!

gpb01

#263
Mar 14, 2019, 11:50 am Last Edit: Mar 14, 2019, 11:53 am by gpb01
yeld non yeald.
In verità yield() (... è anche documentata nel reference)... comunque, grazie, ho corretto il post  :smiley-mr-green:

Guglielmo
Search is Your friend ... or I am Your enemy !

ziopippo

yeld non yeald.

@ziopippo
non ho capito il problema che incontri. Usare millis è come guardare l'orologio molto molto molto spesso  per vedere che ora è in modo da decidere cosa fare in base al tempo che è passato.
Ma gli esempi ti funzionano?
Nel mio sketch no e non ho fatto la prova del nove facendo un nuovo scketch pulito con solo l'utilizzo di più millis. Avendo in questo periodo solo un'oretta al giorno per portare avanti il mio progettino nel frattempo avevo lasciato in sospeso la questione millis per continuare con le altre funzioni che mi ero proposto di fargli fare ;)  :smiley-evil:

In verità yield() (... è anche documentata nel reference)... comunque, grazie, ho corretto il post  :smiley-mr-green:

Guglielmo
Mi aggiungo anche io agli autori dell'errore di sbaglio  :smiley-razz:  ;D

zoomx

ziopippo,

dovresti partire dagli esempi per capire come funziona.
Attento a come fai i controlli del tempo passato, in genere si controlla che il tempo passato sia uguale o maggiore di quello che doveva passare. Uguale soltanto non va bene perché potresti guardare l'orologio troppo tardi.

ziopippo

ziopippo,

dovresti partire dagli esempi per capire come funziona.
Attento a come fai i controlli del tempo passato, in genere si controlla che il tempo passato sia uguale o maggiore di quello che doveva passare. Uguale soltanto non va bene perché potresti guardare l'orologio troppo tardi.
Se rileggi qui mio post puoi verificare come uso i millis ;)

gpb01

Se rileggi qui mio post puoi verificare come uso i millis ;)
... e purtroppo NON va bene.  NON si può usare in quel semplice modo, ma occorre sempre valutare una differenza di tempi (che risolve anche il problema dell'overflow) ... come faccio sempre, ti invito a ristudiarti questi link ... PRIMO, SECONDO e tutti gli articoli che si trovano QUI, nonché QUESTO bell'esempio ... dovrebbero chiarire le idee ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

ziopippo

Lo farò senz'altro grazie! ;)

zoomx

Se non scrivo castronerie....
questo
Code: [Select]
if (previousMillisWiFi < intervalWiFi)
non va mica, dovrebbe essere
Code: [Select]
if (millis()- previousMillisWiFi > intervalWiFi)
cioè esattamente lo stesso confronto che fai più sotto.

Go Up