Prima di iniziare a interfacciarsi ESP32 con sensore PIR dobbiamo sapere come funzionano gli interrupt e come leggerli e gestirli in ESP32. Discutiamo in dettaglio il funzionamento di PIR con ESP32.
Ecco il contenuto di questo articolo:
1: cosa sono interrupt
1.1: interrompe i pin in ESP32
2: Chiamare un interrupt in ESP32 - Micropython
3: Sensore PIR interfacciante con ESP32 - MicroPython
3.1: Sensore di movimento PIR (HC-SR501)
3.2: Pinout HC-SR501
3.3: codice
3.4: output
1: cosa sono interrupt
La maggior parte degli eventi che si verificano nella programmazione ESP32 eseguono sequenzialmente, il che significa esecuzione di riga del codice. Per gestire e controllare gli eventi che non devono essere eseguiti durante l'esecuzione sequenziale del codice e Interruzioni sono usati.
Ad esempio, se vogliamo eseguire un determinato compito quando si verifica un evento speciale o viene dato un segnale di trigger ai pin digitali del microcontrollore, utilizziamo interrupt.
Con l'interruzione non abbiamo bisogno di controllare continuamente lo stato digitale del pin di input ESP32. Quando si verifica un interrupt, il processore interrompe il programma principale e si chiama una nuova funzione che è nota come ISR (Routine di servizio di interruzione). Questo Isr La funzione gestisce l'interrupt causato dopo quel ritorno al programma principale e inizia a eseguirlo. Uno degli esempi di ISR è il sensore di movimento PIR che genera un interrupt una volta rilevato il movimento.
1.1: interrompe i pin in ESP32
Un interrupt esterno o hardware può essere causato da qualsiasi modulo hardware come sensore touch o pulsante. Gli interrupt del tocco si verificano quando viene rilevato un tocco in pin ESP32 o interrupt GPIO può anche essere utilizzato quando viene premuto un tasto o un pulsante.
In questo articolo attiveremo un interrupt quando il movimento viene rilevato usando il sensore PIR con ESP32.
Quasi tutti i pin GPIO tranne 6 pin integrati SPI che di solito si presentano nel 36 La versione pin della scheda ESP32 non può essere utilizzata ai fini dell'interruzione. Quindi, per ricevere gli interrupt esterni seguenti sono i pin che si possono usare in ESP32:
2: Chiamare un interrupt in ESP32 usando Micropython
Per programmare una scheda ESP32 con sensore PIR utilizzando il codice Micropython. Dobbiamo definire una funzione di interrupt. Di seguito sono riportati alcuni semplici passaggi che aiutano a definire un interrupt per la scheda ESP32.
Passaggio 1: Inizializza la funzione di gestione dell'interrupt: La funzione di gestione di interruzioni dovrebbe essere definita in modo semplice in modo che possa eseguire rapidamente e tornare al programma principale il più rapidamente possibile. Questo può essere fatto definendo una variabile globale in modo da poter accedere ovunque all'interno del codice se chiamato.
Qui in caso di sensore PIR useremo il pin GPIO come un globale variabile. La funzione di interruzione prenderà un pin come argomento e descriverà il pin GPIO che provoca la funzione di interruzione.
def handle_interrupt (pin):Passaggio 2: imposta il pin GPIO per un interrupt: Per ottenere il valore del pin GPIO dobbiamo creare un oggetto che ne trarrà input usando il Spillo.IN Come il secondo argomento all'interno della nostra classe PIN. Possiamo rinominarlo con qualsiasi altro.
pin = pin (13, pin.IN)Passaggio 3: collegare l'interrupt al pin GPIO per il sensore PIR usando il metodo IRQ ():
Usando il comando seguente, possiamo impostare l'interrupt su un pin che abbiamo definito prima.
PIR.IRQ (trigger = pin.IRQ_RISING, HANDLER = Handle_Interrupt)IL IRQ () Il metodo viene utilizzato per collegare l'interrupt al pin. IRQ () accetta due argomenti diversi:
grilletto: Questo argomento spiega la modalità di trigger. Di seguito sono riportate tre modalità:
Gestore: Questa funzione verrà chiamata una volta attivato un interrupt.
3: Sensore PIR interfacciante con ESP32
Come ora abbiamo coperto i concetti di interrupt con ESP32 usando Micropython ora, interfacciamo il sensore PIR con ESP32. Qui useremo Spillo.IRQ_RISING Modalità nel codice Micropython per il sensore PIR perché vogliamo attivare un LED ogni volta che il sensore PIR rileva un certo movimento. Questo LED rimarrà acceso per un tempo prestabilito, quindi si spegne.
Saranno richiesti componenti seguenti:
Schema per il sensore PIR con ESP32:
La configurazione del pin di ESP32 con sensore PIR è:
3.1: Sensore di movimento PIR (HC-SR501)
PIR è un acronimo per Sensori a infrarossi passivi. Due sensori piroelettrici usati insieme che rilevano la quantità di calore intorno ai suoi dintorni. Entrambi questi sensori piroelettrici mentono uno dopo l'altro e quando un oggetto entra nel loro intervallo un cambiamento nell'energia termica o la differenza del segnale tra entrambi questi sensori fa sì che la uscita del sensore PIR sia bassa. Una volta che PIR Out Pin si abbassa, possiamo impostare un'istruzione specifica da eseguire (Blink LED).
Di seguito sono riportate le caratteristiche del sensore PIR:
3.2: Pinout HC-SR501
PIR HC-SR501 viene fornito con tre pin. Due di loro sono pin di alimentazione per VCC e GND e uno è il pin di uscita per il segnale di trigger.
Di seguito è riportata la descrizione dei pin del sensore PIR:
Spillo | Nome | Descrizione |
1 | VCC | Pin di ingresso per sensore Connetti al pin Vin ESP32 |
2 | FUORI | Output del sensore |
3 | GND | Sensore GND |
3.3: codice
Ora per programmare ESP32 Scrivi il codice dato in Thonny IDE Editor o in qualsiasi altro IDE MicroPython e caricalo su ESP32.
dal pin di importazione macchinaInnanzitutto, abbiamo importato il spillo classe dal modulo macchina e sonno Metodo per aggiungere ritardo. Successivamente viene creata una variabile con il nome movimento. Questa variabile rileverà se viene rilevato o meno un movimento.
Quindi abbiamo creato una funzione Handle_interrupt. Ogni volta che il sensore PIR rileva il movimento, questa funzione verrà attivata. Impiega un pin come parametro di input e indica il pin che fa accadere l'interrupt.
In parole semplici ogni volta che PIR rileva il movimento, Handle_interrupt imposterà la variabile di movimento su true e memorizzerà il pin che fa accadere l'interrupt. Una cosa da ricordare sta sempre dichiarando il movimento variabile come globale perché è necessario in tutto il codice.
Andando avanti abbiamo creato due oggetti PIN, uno per archiviare i pin a LED e il secondo prenderà l'uscita del sensore PIR al pin GPIO 13. Inoltre abbiamo dichiarato il pin di trigger IN AUMENTO modalità.
Nel ciclo continuo Parte del codice, verificherà il valore della variabile di movimento una volta che diventa vero LED si accenderà al Pin 4 di ESP32. Se il LED interrompelato al movimento si spegne dopo 5 secondi.
3.4: output
Nella sezione di output possiamo vedere che l'oggetto è fuori portata del sensore PIR, quindi il GUIDATO è girato SPENTO.
Ora il movimento rilevato dal LED del sensore PIR girerà SU per 5 sec Dopodiché se non viene rilevato alcun movimento rimarrà SPENTO fino a quando non viene ricevuto il trigger successivo.
Seguendo l'output è mostrato dal file shell/terminale In Thonny Ide.
Conclusione
Un sensore PIR con ESP32 può aiutare a rilevare il movimento di cose diverse. Usando la funzione di interrupt in Micropython con ESP32 possiamo attivare una risposta su un pin GPIO specifico. Quando viene rilevata la modifica, la funzione di interruzione verrà attivata e si accende un LED.