I/O (GPIO) per utilizzo generico possono essere configurati per ricevere segnali elettrici come input. A livello di base, questo è utile per gli scenari che rilevano l'apertura/chiusura di un circuito. Tali circuiti possono includere pulsanti, interruttore, commutatori reed, commutatori di pressione e altri dispositivi che rappresentano valori binari (on/off) completando un circuito.
In questa esercitazione si useranno i pin GPIO di Raspberry Pi e .NET per rilevare l'apertura e la chiusura di un circuito.
Prerequisiti
Computer a scheda singola (SBC) basato su ARM (ARMv7 o versione successiva)
Cavi ponticello
Pane (facoltativo)
Scheda di interruzione Raspberry Pi GPIO (facoltativa)
Questa esercitazione viene scritta presupponendo che il dispositivo di destinazione sia Raspberry Pi. Questa esercitazione può tuttavia essere usata per qualsiasi SBC basato su Linux che supporta .NET, ad esempio Orange Pi, ODROID e altro ancora.
Usare i componenti hardware per compilare il circuito come illustrato nel diagramma seguente:
L'immagine precedente illustra una connessione diretta tra un pin di terra e un pin 21.
Suggerimento
Il diagramma illustra un'interruzione di pane e GPIO per scopi illustrativi, ma si è liberi di connettere solo un pin di terra e un pin 21 con un cavo jumper sul Raspberry Pi.
Fare riferimento al diagramma di pinout seguente in base alle esigenze:
Una dichiarazione using crea un'istanza di GpioController. La using dichiarazione garantisce che l'oggetto venga eliminato e le risorse hardware vengano rilasciate correttamente.
GpioController viene creata un'istanza senza parametri, che indica che deve rilevare quale piattaforma hardware è in esecuzione e usare lo schema di numerazione dei pin logici.
Il pin GPIO 21 viene aperto con PinMode.InputPullUp.
Verrà aperto il pin con un resistore PullUp impegnato. In questa modalità, quando il pin è connesso a terra, restituirà PinValue.Low. Quando il pin viene disconnesso dal terreno e il circuito è aperto, il pin restituisce PinValue.High.
Lo stato iniziale viene scritto in una console usando un'espressione ternaria. Lo stato corrente del pin viene letto con Read(). Se è PinValue.High, scrive la Alert stringa nella console. In caso contrario, scrive la Ready stringa.
RegisterCallbackForPinValueChangedEvent() registra una funzione di callback sia per gli PinEventTypes.Rising eventi che PinEventTypes.Falling per il pin. Questi eventi corrispondono rispettivamente agli stati di pin di PinValue.High e PinValue.Low, .
La funzione callback punta a un metodo denominato OnPinEvent().
OnPinEvent()usa un'altra espressione ternaria che scrive anche le stringhe o Ready corrispondentiAlert.
Il thread principale dorme in modo indefinito durante l'attesa di eventi di pin.
Compilare l'app. Se si usa l'interfaccia della riga di comando .NET, eseguire dotnet build. Per compilare in Visual Studio, premere CTRL+MAIUSC+B.
Distribuire l'app in SBC come app autonoma. Per istruzioni, vedere Distribuire app .NET in Raspberry Pi. Assicurarsi di concedere all'eseguibile l'autorizzazione di esecuzione usando chmod +x.
Eseguire l'app in Raspberry Pi passando alla directory di distribuzione ed eseguendo il file eseguibile.
Bash
./InputTutorial
La console visualizza testo simile al seguente:
Console
Initial status (05/10/2022 15:59:25): READY ✅
Disconnettere il pin 21 dal terreno. La console visualizza testo simile al seguente:
Console
(05/10/2022 15:59:59) ALERT 🚨
Riconnettere il pin 21 e il terreno. La console visualizza testo simile al seguente:
Console
(05/10/2022 16:00:25) READY ✅
Terminare il programma premendo CTRL+C.
Congratulazioni! È stato usato GPIO per rilevare l'input usando il System.Device.Gpio pacchetto NuGet. Per questo tipo di input sono disponibili molti usi. Questo esempio può essere usato con qualsiasi scenario in cui un commutatore si connette o interrompe un circuito. Ecco un esempio che lo usa con un commutatore reed magnetico, che spesso viene usato per rilevare porte o finestre aperte.
Tripwire laser
Estendendo ulteriormente il concetto di esempio precedente, si esaminerà il modo in cui questo potrebbe essere applicato alla creazione di un tripwire laser. La creazione di un tripwire laser richiede i componenti aggiuntivi seguenti:
Modulo del trasmettitore laser KY-008
Modulo sensore del ricevitore laser (vedere la nota seguente)
2 10K Ω resistori
Nota
Il modulo sensore del ricevitore laser è il nome generico applicato a un modulo comune trovato in molti rivenditori Internet. Il dispositivo può variare in nome o produttore, ma dovrebbe essere simile a questa immagine.
Connettere l'hardware di tripwire laser
Connettere i componenti come descritto nel diagramma seguente.
Prestare attenzione ai resistori di Ω 10K. Queste implementano un divisore di tensione. Questo perché il modulo del ricevitore laser restituisce 5V per indicare che il raggio è interrotto. Raspberry Pi supporta solo fino a 3.3V per l'input GPIO. Poiché l'invio del valore completo 5V al pin potrebbe danneggiare Raspberry Pi, la corrente dal modulo ricevitore viene passata attraverso un divisore di tensione per metà della tensione a 2,5V.
Applicare gli aggiornamenti del codice sorgente
È quasi possibile usare lo stesso codice delle versioni precedenti, con un'eccezione. Negli altri esempi è stato usato PinMode.InputPullUp in modo che quando il pin viene disconnesso dal terreno e il circuito è aperto, il pin restituisce PinValue.High.
Tuttavia, nel caso del modulo del ricevitore laser, non viene rilevato un circuito aperto. Si vuole invece che il pin funzioni come sink per l'attuale proveniente dal modulo del ricevitore laser. In questo caso, si aprirà il pin con PinMode.InputPullDown. In questo modo, il pin restituisce PinValue.Low quando non ottiene alcuna corrente e PinValue.High quando riceve l'corrente dal modulo del ricevitore laser.
C#
controller.OpenPin(pin, PinMode.InputPullDown);
Importante
Assicurarsi che il codice distribuito nel Raspberry Pi includa questa modifica prima di testare un tripwire laser. Il programma funziona senza di esso, ma usando la modalità di input sbagliata rischia di danneggiare raspberry Pi!
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback:
Questo percorso di apprendimento ha lo scopo di spiegare agli studenti come distribuire intelligenza artificiale nei dispositivi perimetrali usando servizi di Azure.