Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Allmänna I/O-stift (GPIO) kan konfigureras för att ta emot elektriska signaler som indata. På den mest grundläggande nivån är detta användbart för scenarier som identifierar öppnande/stängning av en krets. Sådana kretsar kan innehålla tryckknappar, växlingsväxlar, vassbrytare, tryckbrytare och andra enheter som representerar binära (på/av)-värden genom att slutföra en krets.
I den här självstudien använder du .NET och Raspberry Pi:s GPIO-stift för att identifiera öppnandet och stängningen av en krets.
Förutsättningar
- ARM-baserad (ARMv7 eller senare) enkelkortsdator (SBC)
- Jumper wires
- Brödskiva (valfritt)
- Raspberry Pi GPIO breakout board (optional)
- .NET SDK 8 eller senare
Anmärkning
Den här handledningen är skriven med antagandet att målenheten är en Raspberry Pi. Den här handledningen kan dock användas för alla Linux-baserade SBC som stöder .NET, till exempel Orange Pi, ODROID med mera.
Kontrollera att SSH är aktiverat på enheten. För Raspberry Pi , se Konfigurera en SSH-server i Raspberry Pi-dokumentationen.
Förbereda maskinvaran
Använd maskinvarukomponenterna för att skapa kretsen enligt följande diagram:
Bilden ovan visar en direkt anslutning mellan en markstift och stift 21.
Tips/Råd
The diagram depicts a breadboard and GPIO breakout for illustrative purposes, but feel free to just connect a ground pin and pin 21 with a jumper wire on the Raspberry Pi.
Refer to the following pinout diagram as needed:
Bild med tillstånd Raspberry Pi Foundation.
Skapa appen
Slutför följande steg i den utvecklingsmiljö du föredrar:
Skapa en ny .NET-konsolapp med hjälp av .NET CLI eller Visual Studio. Ge den namnet InputTutorial.
dotnet new console -o InputTutorial cd InputTutorialLägg till paketet System.Device.Gpio i projektet. Använd antingen .NET CLI från projektkatalogen eller Visual Studio.
dotnet add package System.Device.Gpio --version 3.2.0-*Ersätt innehållet i Program.cs med följande kod:
using System.Device.Gpio; using System.Threading.Tasks; const int Pin = 21; const string Alert = "ALERT 🚨"; const string Ready = "READY ✅"; using var controller = new GpioController(); controller.OpenPin(Pin, PinMode.InputPullUp); Console.WriteLine( $"Initial status ({DateTime.Now}): {(controller.Read(Pin) == PinValue.High ? Alert : Ready)}"); controller.RegisterCallbackForPinValueChangedEvent( Pin, PinEventTypes.Falling | PinEventTypes.Rising, OnPinEvent); await Task.Delay(Timeout.Infinite); static void OnPinEvent(object sender, PinValueChangedEventArgs args) { Console.WriteLine( $"({DateTime.Now}) {(args.ChangeType is PinEventTypes.Rising ? Alert : Ready)}"); }I koden ovan:
- En användningsdeklaration skapar en instans av
GpioController. Deklarationenusingsäkerställer att objektet tas bort och att maskinvaruresurser släpps korrekt.-
GpioControllerinstansieras utan parametrar, vilket indikerar att den ska identifiera vilken maskinvaruplattform den körs på och använda det logiska pin-numreringsschemat.
-
- GPIO-stift 21 öppnas med
PinMode.InputPullUp.- This opens the pin with a PullUp resistor engaged. In this mode, when the pin is connected to ground, it will return
PinValue.Low. När stiftet är frånkopplat från jord och kretsen är öppen, returnerar stiftetPinValue.High.
- This opens the pin with a PullUp resistor engaged. In this mode, when the pin is connected to ground, it will return
- Den inledande statusen skrivs till en konsol med ett ternäruttryck. The pin's current state is read with
Read(). Om det ärPinValue.Highskriver den strängenAlerttill konsolen. Otherwise, it writes theReadystring. -
RegisterCallbackForPinValueChangedEvent()registers a callback function for both thePinEventTypes.RisingandPinEventTypes.Fallingevents on the pin. Dessa händelser motsvarar pin-tillstånd förPinValue.HighrespektivePinValue.Low. - Återanropsfunktionen pekar på en metod som heter
OnPinEvent().OnPinEvent()använder ett annat ternary-uttryck som också skriver motsvarandeAlertellerReadysträngar. - The main thread sleeps indefinitely while waiting for pin events.
- En användningsdeklaration skapar en instans av
Skapa appen. Om du använder .NET CLI kör du
dotnet build. Om du vill skapa i Visual Studio trycker du på Ctrl+Skift+B.Distribuera appen till SBC som en fristående app. Anvisningar finns i Distribuera .NET-appar till Raspberry Pi. Make sure to give the executable execute permission using
chmod +x.Kör appen på Raspberry Pi genom att växla till mappen för distribution och köra den körbara filen.
./InputTutorialKonsolen visar text som liknar följande:
Initial status (05/10/2022 15:59:25): READY ✅Koppla bort stift 21 från marken. Konsolen visar text som liknar följande:
(05/10/2022 15:59:59) ALERT 🚨Reconnect pin 21 and ground. Konsolen visar text som liknar följande:
(05/10/2022 16:00:25) READY ✅Avsluta programmet genom att trycka på Ctrl+C.
Grattis! Du har använt GPIO för att identifiera indata med hjälp av System.Device.Gpio NuGet-paketet! Det finns många användningsområden för den här typen av indata. Det här exemplet kan användas med valfritt scenario där en växel ansluter eller bryter en krets. Här är ett exempel som använder det med en magnetbrytare, som ofta används för att upptäcka öppna dörrar eller fönster.
Laser tripwire
Om vi utökar det tidigare exempelkonceptet lite längre kan vi ta en titt på hur detta kan användas för att skapa en laser tripwire. Att skapa en laser tripwire kräver följande ytterligare komponenter:
- KY-008 lasersändare modul
- Sensormodul för lasermottagare (se anmärkning nedan)
- 2 10 kΩ motstånd
Anmärkning
Laser mottagarsensormodul är det generiska namnet som tillämpas på en gemensam modul som finns hos många internetåterförsäljare. Enheten kan variera i namn eller tillverkare, men bör likna den här bilden.
Ansluta laser tripwire-maskinvara
Anslut komponenterna enligt beskrivningen i följande diagram.
Var uppmärksam på 10K Ω motstånd. Dessa implementerar en spänningsavdelare. Detta beror på att lasermottagaremodulen matar ut 5V för att indikera att strålen är trasig. Raspberry Pi stöder endast upp till 3,3 V för GPIO-indata. Eftersom sändning av hela 5V till stiftet kan skada Raspberry Pi, överförs strömmen från mottagarmodulen genom en spänningsavdelare för att halvera spänningen till 2,5V.
Tillämpa källkodsuppdateringar
Du kan nästan använda samma kod som tidigare, med ett undantag. In the other examples, we used PinMode.InputPullUp so that when the pin is disconnected from ground and the circuit is open, the pin returns PinValue.High.
Men när det gäller modulen lasermottagare identifierar vi inte en öppen krets. I stället vill vi att stiftet ska fungera som en mottagare för ström som kommer från lasermottagaremodulen. I det här fallet öppnar vi pin-koden med PinMode.InputPullDown. This way, the pin returns PinValue.Low when it's getting no current, and PinValue.High when it receives current from the laser receiver module.
controller.OpenPin(pin, PinMode.InputPullDown);
Viktigt!
Kontrollera att koden som distribueras på Raspberry Pi innehåller den här ändringen innan du testar en laser tripwire. Programmet fungerar utan det, men att använda fel indataläge riskerar att skada din Raspberry Pi!
Hämta källkoden
The source for this tutorial is available on GitHub.