Training
Leertraject
Dit leertraject is bedoeld om cursisten uit te leggen hoe ze AI aan de rand kunnen implementeren met behulp van Azure-services.
Deze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
Algemene I/O-pinnen (GPIO) kunnen worden geconfigureerd om elektrische signalen als invoer te ontvangen. Op het meest eenvoudige niveau is dit handig voor scenario's waarin het openen/sluiten van een circuit wordt gedetecteerd. Dergelijke circuits kunnen bestaan uit drukknoppen, wisselschakelaars, reedschakelaars, drukschakelaars en andere apparaten die binaire (aan/uit) waarden vertegenwoordigen door een circuit te voltooien.
In deze zelfstudie gebruikt u .NET en de GPIO-pinnen van uw Raspberry Pi om het openen en sluiten van een circuit te detecteren.
Notitie
Deze zelfstudie is geschreven ervan uitgaande dat het doelapparaat Raspberry Pi is. Deze zelfstudie kan echter worden gebruikt voor elke Linux-SBC die .NET ondersteunt, zoals Orange Pi, ODROID en meer.
Zorg ervoor dat SSH is ingeschakeld op uw apparaat. Voor Raspberry Pi raadpleegt u Een SSH-server instellen in de documentatie van Raspberry Pi.
Gebruik de hardwareonderdelen om het circuit te bouwen, zoals wordt weergegeven in het volgende diagram:
In de bovenstaande afbeelding ziet u een directe verbinding tussen een grondspeld en pin 21.
Tip
Het diagram toont een breadboard en GPIO breakout voor illustratieve doeleinden, maar voel je vrij om gewoon een ground pin en pin 21 te verbinden met een jumper draad op de Raspberry Pi.
Raadpleeg indien nodig het volgende pin-outdiagram:
Afbeelding met dank aan Raspberry Pi Foundation.
Voer de volgende stappen uit in de ontwikkelomgeving van uw voorkeur:
Maak een nieuwe .NET Console-app met behulp van de .NET CLI of Visual Studio. Geef het de naam InputTutorial.
dotnet new console -o InputTutorial
cd InputTutorial
Voeg het pakket System.Device.Gpio toe aan het project. Gebruik .NET CLI vanuit de projectmap of Visual Studio.
dotnet add package System.Device.Gpio --version 2.2.0-*
Vervang de inhoud van Program.cs door de volgende code:
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)}");
}
In de voorgaande code:
GpioController
gemaakt. De using
declaratie zorgt ervoor dat het object wordt verwijderd en hardwareresources correct worden vrijgegeven.
GpioController
wordt geïnstantieerd zonder parameters, wat aangeeft dat het moet detecteren op welk hardwareplatform het wordt uitgevoerd en het logische pincodeschema moet gebruiken.PinMode.InputPullUp
.
PinValue.Low
deze . Wanneer de pin is losgekoppeld van de grond en het circuit open is, retourneert PinValue.High
de pin .Read()
. Als dit is PinValue.High
, wordt de Alert
tekenreeks naar de console geschreven. Anders wordt de Ready
tekenreeks geschreven.RegisterCallbackForPinValueChangedEvent()
registreert een callback-functie voor de PinEventTypes.Rising
gebeurtenissen en PinEventTypes.Falling
op de pincode. Deze gebeurtenissen komen overeen met de vastgemaakte statussen van PinValue.High
respectievelijk en PinValue.Low
.OnPinEvent()
.
OnPinEvent()
gebruikt een andere ternaire expressie waarmee ook de bijbehorende Alert
tekenreeksen of Ready
worden geschreven.de app bouwen. Als u de .NET CLI gebruikt, voert u uit dotnet build
. Druk op Ctrl+Shift+B om Visual Studio te bouwen.
Implementeer de app in de SBC als een zelfstandige app. Zie .NET-apps implementeren in Raspberry Pi voor instructies. Zorg ervoor dat u de uitvoerbare uitvoerbare uitvoermachtiging geeft met behulp van chmod +x
.
Voer de app uit op de Raspberry Pi door over te schakelen naar de implementatiemap en het uitvoerbare bestand uit te voeren.
./InputTutorial
In de console wordt tekst weergegeven die er ongeveer als volgt uitziet:
Initial status (05/10/2022 15:59:25): READY ✅
Koppel pin 21 los van de grond. In de console wordt tekst weergegeven die er ongeveer als volgt uitziet:
(05/10/2022 15:59:59) ALERT 🚨
Sluit pin 21 opnieuw aan en de grond. In de console wordt tekst weergegeven die er ongeveer als volgt uitziet:
(05/10/2022 16:00:25) READY ✅
Beëindig het programma door op Ctrl+C te drukken.
Gefeliciteerd U hebt GPIO gebruikt om invoer te detecteren met behulp van het System.Device.Gpio
NuGet-pakket. Er zijn veel toepassingen voor dit type invoer. Dit voorbeeld kan worden gebruikt voor elk scenario waarin een switch een circuit verbindt of onderbreekt. Hier volgt een voorbeeld van een magnetische rietschakelaar, die vaak wordt gebruikt om open deuren of vensters te detecteren.
Laten we het vorige voorbeeldconcept wat verder uitbreiden. Laten we eens kijken hoe dit kan worden toegepast bij het maken van een laser tripwire. Voor het bouwen van een laser-tripwire zijn de volgende extra onderdelen vereist:
Notitie
De sensormodule van de laserontvanger is de algemene naam die wordt toegepast op een algemene module die bij veel internetwinkels wordt gevonden. De naam of fabrikant van het apparaat kan verschillen, maar moet lijken op deze afbeelding.
Verbind de onderdelen zoals beschreven in het volgende diagram.
Let goed op de 10K Ω weerstanden. Deze implementeren een spanningsverdeler. Dit komt doordat de laserontvangermodule 5V uitvoert om aan te geven dat de straal is verbroken. Raspberry Pi ondersteunt alleen maximaal 3.3V voor GPIO-invoer. Aangezien het verzenden van de volledige 5V naar de pin de Raspberry Pi kan beschadigen, wordt de stroom van de ontvangermodule doorgegeven door een spanningsverdeler om de spanning te halveren tot 2,5V.
U kunt bijna dezelfde code gebruiken als eerder, met één uitzondering. In de andere voorbeelden hebben we zo gebruikt PinMode.InputPullUp
dat wanneer de pin is losgekoppeld van de grond en het circuit open is, de pin retourneert PinValue.High
.
In het geval van de laserontvangermodule detecteren we echter geen open circuit. In plaats daarvan willen we dat de pin fungeert als een gootsteen voor stroom die afkomstig is van de module van de laserontvanger. In dit geval openen we de pincode met PinMode.InputPullDown
. Op deze manier retourneert PinValue.Low
de pin wanneer deze geen stroom krijgt en PinValue.High
wanneer deze stroom ontvangt van de laserontvangermodule.
controller.OpenPin(pin, PinMode.InputPullDown);
Belangrijk
Zorg ervoor dat de code die op uw Raspberry Pi is geïmplementeerd, deze wijziging bevat voordat u een laser tripwire test. Het programma werkt wel zonder, maar het gebruik van de verkeerde invoermodus riskeert schade aan je Raspberry Pi!
De bron voor deze zelfstudie is beschikbaar op GitHub.
.NET-feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven:
Training
Leertraject
Dit leertraject is bedoeld om cursisten uit te leggen hoe ze AI aan de rand kunnen implementeren met behulp van Azure-services.