Megosztás a következőn keresztül:


GPIO használata bináris bemenethez

Az általános célú I/O (GPIO) csapok konfigurálhatók úgy, hogy bemenetként elektromos jeleket fogadjanak. Ez a legalapvetőbb szinten olyan forgatókönyvek esetében hasznos, amelyek észlelik a kapcsolatcsoport megnyitását/bezárását. Ilyen áramkörök lehetnek például a nyomógombok, a billenőkapcsolók, az érintkezőkapcsolók, a nyomáskapcsolók és más olyan eszközök, amelyek bináris (be- és kikapcsolt) értékeket képviselnek a kapcsolás lezárásával.

Ebben az oktatóanyagban a .NET-et és a Raspberry Pi GPIO-csapjait fogja használni a kapcsolatcsoportok megnyitásának és bezárásának észleléséhez.

Előfeltételek

  • ARM-alapú (ARMv7 vagy újabb) egylapos számítógép (SBC)
  • Átvezető vezetékek
  • Próbatábla (nem kötelező)
  • Raspberry Pi GPIO-bővítőpanel (nem kötelező)
  • .NET SDK 8 vagy újabb

Megjegyzés:

Ez az oktatóanyag meg van írva, feltéve, hogy a céleszköz Raspberry Pi. Ez az oktatóanyag azonban bármilyen Linux-alapú SBC-hez használható, amely támogatja a .NET-et, például az Orange Pi-t, az ODROID-ot és sok mást.

Győződjön meg arról, hogy az SSH engedélyezve van az eszközön. Raspberry Pi esetén tekintse meg az SSH-kiszolgáló beállítását a Raspberry Pi dokumentációjában.

A hardver előkészítése

A következő ábrán látható módon használja a hardver összetevőket az áramkör megépítéséhez.

Egy olyan kapcsolatcsoportot ábrázoló diagram, amely egy földelőtűt csatlakoztat a 21-hez.

A fenti kép közvetlen kapcsolatot ábrázol egy földelő csap és a 21-21- s tű között.

Jótanács

Az ábra egy rajztáblát és egy GPIO-kitörést ábrázol szemléltető célokra, de nyugodtan csatlakoztassa a 21-es csapot egy ugródróttal a Raspberry Pi-n.

Szükség esetén tekintse meg a következő csatlakozási rajzot:

Egy diagram, amely bemutatja a Raspberry Pi GPIO fejlécének lábkiosztását. A kép a Raspberry Pi Foundation jóvoltából.
Kép jóvoltból Raspberry Pi Foundation.

Az alkalmazás létrehozása

Hajtsa végre a következő lépéseket az előnyben részesített fejlesztési környezetben:

  1. Hozzon létre egy új .NET-konzolalkalmazást a .NET CLI vagy a Visual Studio használatával. Adja meg Az InputTutorial nevet.

    dotnet new console -o InputTutorial
    cd InputTutorial
    
  2. Adja hozzá a System.Device.Gpio csomagot a projekthez. Használja a .NET CLI-t a projektkönyvtárból vagy a Visual Studióból.

    dotnet add package System.Device.Gpio --version 3.2.0-*
    
  3. Cserélje le a Program.cs fájl tartalmát a következő kódra:

    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)}");
    }
    

    Az előző kódban:

    • A felhasználói deklaráció létrehoz egy példányt.GpioController A using deklaráció biztosítja az objektum ártalmatlanítását és a hardvererőforrások megfelelő kiadását.
      • GpioController paraméterek nélküli példányosítása azt jelzi, hogy észlelnie kell, melyik hardverplatformon fut, és a logikai tű számozási sémát használja.
    • A GPIO 21-es pin meg van nyitva PinMode.InputPullUp.
      • Ezzel megnyitja a tűt egy bekapcsolt PullUp ellenállással. Ebben a módban, ha a tű a földhöz van csatlakoztatva, vissza fog térni PinValue.Low. Ha a csap le van választva a földről, és az áramkör megszakad, a csap visszaáll PinValue.High.
    • A rendszer a kezdeti állapotot ternáris kifejezéssel írja a konzolra. A gombostű aktuális állapota a következővel Read()olvasható: . Ha így van PinValue.High, a Alert sztringet a konzolra írja. Ellenkező esetben a karakterláncot Ready írja.
    • RegisterCallbackForPinValueChangedEvent() egy visszahívási függvényt regisztrál mind a PinEventTypes.Rising mind a PinEventTypes.Falling eseményekhez a tűn. Ezek az események megfelelnek a pin-állapotoknak PinValue.High, illetve PinValue.Low azoknak.
    • A visszahívási függvény egy úgynevezett OnPinEvent()metódusra mutat. OnPinEvent() egy másik ternáris kifejezést használ, amely a megfelelő Alert vagy Ready sztringeket is megírja.
    • A fő szál végtelen ideig alszik, miközben a rögzítési eseményekre vár.
  4. Hozza létre az alkalmazást. Ha a .NET parancssori felületet használja, futtassa a parancsot dotnet build. A Visual Studióban való buildeléshez nyomja le a CtrlShift+B+.

  5. Helyezze üzembe az alkalmazást az SBC-ben önálló alkalmazásként. Útmutatásért lásd: .NET-alkalmazások üzembe helyezése a Raspberry Pi-ben. Győződjön meg arról, hogy a végrehajtható fájlnak végrehajtás engedélyt ad, a chmod +x használatával.

  6. Futtassa az alkalmazást a Raspberry Pi-en az üzembehelyezési könyvtárra való váltással és a végrehajtható fájl futtatásával.

    ./InputTutorial
    

    A konzol a következőhöz hasonló szöveget jelenít meg:

    Initial status (05/10/2022 15:59:25): READY ✅
    
  7. Válassza le a 21-es tűt a földről. A konzol a következőhöz hasonló szöveget jelenít meg:

    (05/10/2022 15:59:59) ALERT 🚨
    
  8. Csatlakoztassa újra a pin 21-et és a talajt. A konzol a következőhöz hasonló szöveget jelenít meg:

    (05/10/2022 16:00:25) READY ✅
    
  9. Állítsa le a programot a CtrlC+ lenyomásával.

Gratulálok! A GPIO segítségével észlelte a bemenetet a System.Device.Gpio NuGet csomaggal! Az ilyen típusú bemenetek sokféleképpen használhatók. Ez a példa bármely olyan esetben használható, amikor egy kapcsoló csatlakozik vagy megszakít egy áramkört. Íme egy példa, amely mágneses jávakapcsolóval használja, amelyet gyakran használnak nyitott ajtók vagy ablakok észlelésére.

Animált GIF, amely egy mágneses jávakapcsoló megnyitását és bezárását szemlélteti. A kapcsoló mágnesnek van kitéve, és az alkalmazás KÉSZ állapotban jelenik meg. A mágnes el lesz távolítva, és az alkalmazás megjeleníti a ALERT billentyűt. A művelet ezután megismétlése.

Lézeres csapószál

Az előző példakoncepciót kicsit tovább bővítve tekintsük át, hogyan alkalmazható ez egy lézeres tripwire létrehozására. A lézeres tripwire létrehozásához a következő további összetevőkre van szükség:

  • KY-008 lézeradó modul
  • Lézerérzékelő modul (lásd az alábbi megjegyzést)
  • 2 10K Ω ellenállások

Megjegyzés:

Lézervevő érzékelő modul az általános megnevezés, amelyet sok internetes kiskereskedőnél megtalálható közös modulra használnak. Az eszköz neve vagy gyártója eltérő lehet, de ennek a képnek hasonlónak kell lennie.

Lézerérzékelő modul képe

Lézeres tripwire hardver csatlakoztatása

Csatlakoztassa az összetevőket az alábbi ábrán leírtak szerint.

Egy lézerérzékelő modulból bemenetet fogadó áramkört ábrázoló diagram.

Ügyeljen a 10K Ω ellenállásra. Ezek egy feszültségelosztót implementálnak. Ennek az az oka, hogy a lézervevő modul 5V-os kimenetet ad ki, hogy jelezze, hogy a gerenda meghibásodott. A Raspberry Pi csak legfeljebb 3,3V-os GPIO bemenetet támogat. Mivel a teljes 5V a csapra küldése károsíthatja a Raspberry Pi-t, a vevőmodul árama egy feszültségelosztón keresztül halad át, hogy a feszültség felére csökkenjen 2,5V-ra.

Forráskódfrissítések alkalmazása

Egyetlen kivétellel szinte ugyanazt a kódot használhatja, mint korábban. Többi példában azt használtukPinMode.InputPullUp, hogy amikor a csap le van választva a földről és az áramkör nyitva van, a csap visszatérPinValue.High.

A lézervevő modul esetében azonban nem észlelünk nyitott áramkört. Ehelyett azt szeretnénk, hogy a tű fogadóként működjön a lézervevő modulból érkező áramhoz. Ebben az esetben a PinMode.InputPullDown-val nyitjuk meg a gombostűt. A csap így PinValue.Low értéket ad vissza, amikor nincs áram, és PinValue.High amikor áramot kap a lézervevő modulból.

controller.OpenPin(pin, PinMode.InputPullDown);

Fontos

Győződjön meg arról, hogy a Raspberry Pi-en üzembe helyezett kód tartalmazza ezt a módosítást a lézeres tripwire tesztelése előtt. A program tényleg működik nélküle, de a rossz bemeneti mód kárt okozhat a Raspberry Pi-ben!

Animált GIF, amelyen a lézeres tripwire bemutatása látható. A lézeres emitter megvilágítja a lézerérzékelő modult, és az alkalmazás a READY (KÉSZ) állapotot jeleníti meg. A lézersugár elromlott, és az alkalmazás a RIASZTÁSt jeleníti meg. A művelet ezután megismétlése.

A forráskód lekérése

Az oktatóanyag forrása a GitHubon érhető el.

Következő lépések