Training
Lernpfad
In diesem Lernpfad wird erläutert, wie Sie KI am Edge mithilfe von Azure-Diensten bereitstellen.
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
GPIO-Stifte (General Purpose I/O) können für die Annahme elektrischer Signale als Eingabe konfiguriert werden. Auf der einfachsten Ebene ist dies nützlich für Szenarien, in denen das Öffnen/Schließen eines Schaltkreises erkannt wird. Solche Schaltungen können Drucktasten, Umschalter, Reedschalter, Druckschalter und andere Geräte umfassen, die binäre Werte (ein/aus) darstellen, indem sie einen Schaltkreis schließen.
In diesem Tutorial verwenden Sie .NET und die GPIO-Stifte Ihres Raspberry Pi, um das Öffnen und Schließen eines Schaltkreises zu erkennen.
Hinweis
Dieses Tutorial wurde unter der Annahme geschrieben, dass das Zielgerät Raspberry Pi ist. Dieses Tutorial kann jedoch für jeden Linux-basierten SBC verwendet werden, der .NET unterstützt, z. B. Orange Pi, ODROID und mehr.
Stellen Sie sicher, dass SSH auf Ihrem Gerät aktiviert ist. Für Raspberry Pi: Lesen Sie Einrichten eines SSH-Servers in der Dokumentation zu Raspberry Pi.
Verwenden Sie die Hardwarekomponenten, um eine Schaltung wie im folgenden Diagramm zu erstellen:
Das Bild oben zeigt eine direkte Verbindung zwischen einem Erdungsstift und Stift 21.
Tipp
Im Diagramm sind zu Veranschaulichungszwecken eine Steckplatine und eine GPIO-Kabelpeitsche dargestellt, aber Sie können einfach auf dem Raspberry Pi einen Erdungsstift und Stift 21 mit einer Drahtbrücke verbinden.
Beachten Sie falls nötig das folgende Anschlussdiagramm:
Bild mit freundlicher Genehmigung der Raspberry Pi Foundation.
Führen Sie in Ihrer bevorzugten Entwicklungsumgebung die folgenden Schritte aus:
Erstellen Sie eine neue .NET-Konsolen-App, indem Sie entweder die .NET-CLI oder Visual Studio verwenden. Nennen Sie sie InputTutorial.
dotnet new console -o InputTutorial
cd InputTutorial
Fügen Sie dem Projekt das Paket System.Device.Gpio hinzu. Verwenden Sie entweder .NET CLI aus dem Projektverzeichnis oder Visual Studio.
dotnet add package System.Device.Gpio --version 2.2.0-*
Ersetzen Sie den Inhalt von Program.cs durch den folgenden 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)}");
}
Für den Code oben gilt:
GpioController
. Mit der using
-Deklaration wird sichergestellt, dass das Objekt verworfen wird und die Hardwareressourcen richtig freigegeben werden.
GpioController
wird ohne Parameter instanziiert, was angibt, dass die Hardwareplattform, auf der sie ausgeführt wird, erkannt werden und das logische Stiftnummerierungsschema verwendet werden soll.PinMode.InputPullUp
geöffnet.
PinValue.Low
zurückgegeben. Wenn der Stift von der Erde getrennt und der Schaltkreis geöffnet ist, gibt der Stift PinValue.High
zurück.Read()
gelesen. Wenn dies PinValue.High
ist, gibt er die Alert
-Zeichenfolge an der Konsole aus. Andernfalls wird die Ready
-Zeichenfolge ausgegeben.RegisterCallbackForPinValueChangedEvent()
registriert eine Rückruffunktion für die beiden Ereignisse PinEventTypes.Rising
und PinEventTypes.Falling
am Stift. Diese Ereignisse entsprechen den Stiftzuständen PinValue.High
bzw PinValue.Low
.OnPinEvent()
.
OnPinEvent()
verwendet einen weiteren ternären Ausdruck, der auch die entsprechenden Zeichenfolgen Alert
oder Ready
schreibt.Erstellen Sie die App. Führen Sie dotnet build
aus, wenn Sie die .NET-CLI verwenden. Drücken Sie STRG+UMSCHALT+B, um die App in Visual Studio zu kompilieren.
Stellen Sie die App auf dem SBC als eigenständige App bereit. Anweisungen hierzu finden Sie unter Bereitstellen von .NET-Apps auf einem Raspberry Pi-Gerät. Erteilen Sie dabei mithilfe von chmod +x
die execute-Berechtigung für ausführbare Dateien.
Führen Sie die App auf dem Raspberry Pi aus, indem Sie zum Bereitstellungsverzeichnis wechseln und die ausführbare Datei ausführen.
./InputTutorial
Die Konsole zeigt einen Text an, der ungefähr dem folgenden entspricht:
Initial status (05/10/2022 15:59:25): READY ✅
Trennen Sie Stift 21 von der Erde. Die Konsole zeigt einen Text an, der ungefähr dem folgenden entspricht:
(05/10/2022 15:59:59) ALERT 🚨
Verbinden Sie Stift 21 wieder mit der Erde. Die Konsole zeigt einen Text an, der ungefähr dem folgenden entspricht:
(05/10/2022 16:00:25) READY ✅
Beenden Sie das Programm, indem Sie STRG+C drücken.
Glückwunsch! Sie haben GPIO verwendet, um Eingaben mithilfe des NuGet-Pakets System.Device.Gpio
zu erkennen! Für diese Art von Eingabe gibt es viele Verwendungsmöglichkeiten. Dieses Beispiel kann mit jedem Szenario verwendet werden, in dem ein Schalter einen Schaltkreis schließt oder unterbricht. Hier sehen Sie ein Beispiel für die Verwendung mit einem magnetischen Reedschalter, der häufig verwendet wird, um geöffnete Türen oder Fenster zu erkennen.
Um das vorherige Beispielkonzept noch etwas zu erweitern, sehen wir uns an, wie es sich auf die Erstellung eines Laser-Stolperdrahts anwenden lässt. Für das Erstellen eines Laser-Stolperdrahts sind die folgenden zusätzlichen Komponenten erforderlich:
Hinweis
Laserempfangssensormodul ist der allgemeine Name für ein gebräuchliches Modul, das von vielen Internethändlern angeboten wird. Das Gerät kann hinsichtlich Name oder Hersteller abweichen, sollte aber dieser Abbildung ähneln.
Verbinden Sie die Komponenten wie im folgenden Diagramm dargestellt.
Achten Sie besonders auf die 10 KΩ-Widerstände. Diese implementieren einen Spannungsteiler. Dies hat den Grund, dass das Laserempfangsmodul 5 V ausgibt, um eine Unterbrechung des Strahls anzuzeigen. Raspberry Pi unterstützt für GPIO-Eingaben nur bis zu 3,3 V. Da das Senden der vollen 5 V an den Stift den Raspberry Pi beschädigen könnte, wird der Strom aus dem Empfängermodul durch einen Spannungsteiler geleitet, um die Spannung auf 2,5 V zu halbieren.
Sie können mit einer Ausnahme fast den gleichen Code wie zuvor verwenden. In den anderen Beispielen haben wir PinMode.InputPullUp
verwendet, damit der Stift PinValue.High
zurückgibt, wenn er von der Erde getrennt und der Schaltkreis offen ist.
Im Fall des Laserempfangsmoduls erkennen wir jedoch keinen offenen Schaltkreis. Stattdessen soll der Stift als Senke für Strom aus dem Laserempfangsmodul fungieren. In diesem Fall öffnen wir den Stift mit PinMode.InputPullDown
. Auf diese Weise gibt der Stift PinValue.Low
zurück, wenn er keinen Strom erhält, und PinValue.High
, wenn er Strom vom Laserempfangsmodul empfängt.
controller.OpenPin(pin, PinMode.InputPullDown);
Wichtig
Achten Sie darauf, dass der auf Ihrem Raspberry Pi bereitgestellte Code diese Änderung enthält, bevor Sie einen Laser-Stolperdraht testen. Das Programm funktioniert ohne die Änderung, aber durch die Verwendung des falschen Eingabemodus riskieren Sie Schäden an Ihrem Raspberry Pi!
Der Quellcode für dieses Tutorial ist auf GitHub verfügbar.
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Training
Lernpfad
In diesem Lernpfad wird erläutert, wie Sie KI am Edge mithilfe von Azure-Diensten bereitstellen.