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 és a Raspberry Pi GPIO-csapjaival észlelheti egy áramkör megnyitását és bezárását.

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 10 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ármely olyan Linux-alapú SBC-hez használható, amely támogatja .NET, például Orange Pi, ODROID stb.

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:

Ábra a Raspberry Pi GPIO fejlécének kitűzéséről. Kép jóvoltból Raspberry Pi Foundation.
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 parancssori felület vagy 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(z) .NET CLI-t a projektkönyvtárból vagy a Visual Studio-t.

    dotnet package add System.Device.Gpio --version 4.0.1
    
  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 using 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ül példányosítják, ami azt jelzi, hogy érzékeli, melyik hardverplatformon fut, és a logikai tű számozási sémát használja.
    • A GPIO 21-es pinegység megnyitásra kerül a PinMode.InputPullUp paranccsal.
      • Ezzel megnyitja a csapot egy PullUp ellenállással. Ebben a módban, amikor a tű a földhöz van kapcsolva, PinValue.Low-t fog visszaadni. Ha a csap le van választva a földről, és a kapcsolatcsoport nyitva van, 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 ez PinValue.High, a Alert sztringet a konzolra írja. Ellenkező esetben a Ready sztringet írja.
    • RegisterCallbackForPinValueChangedEvent() visszahívási függvényt regisztrál mind a PinEventTypes.Rising és a PinEventTypes.Falling eseményekhez a tűn. Ezek az események a PinValue.High és a PinValue.Low pin-állapotoknak felelnek meg.
    • 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 dotnet build parancsot. A Visual Studio-ban történő buildeléshez nyomja le a Ctrl+Shift+B billentyűkombinációt.

  5. Helyezze üzembe az alkalmazást az SBC-ben önálló alkalmazásként. Útmutatásért lásd: A Raspberry Pi .NET-alkalmazások üzembe helyezése. Győződjön meg arról, hogy a végrehajtható fájlnak végrehajtási 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-t használva é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 az általános elnevezés, amit egy olyan közös modulra alkalmaznak, amely sok internetes kiskereskedőnél megtalálható. 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. A többi példában azt használtuk PinMode.InputPullUp , hogy amikor a csap le van választva a földről, és a kapcsolatcsoport nyitva van, a csap visszaáll PinValue.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 tűt a PinMode.InputPullDown segítségével nyitjuk meg. Így az érintkező PinValue.Low jelet ad vissza, amikor nem kap áramot, és PinValue.High jelet, 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 működik nélküle, de a rossz bemeneti mód helytelen használata veszélyt jelenthet a Raspberry Pi-re!

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 elérhető GitHub.

Következő lépések