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


A GPIO használata bináris bemenethez

Az általános célú I/O (GPIO) tűk konfigurálhatók úgy, hogy bemenetként fogadják az elektromos jeleket. Ez a legalapvetőbb szinten olyan forgatókönyvek esetében hasznos, amelyek észlelik egy kapcsolatcsoport megnyitását/bezárását. Az ilyen áramkörök lehetnek nyomógombok, váltókapcsolók, reed kapcsolók, nyomáskapcsolók és egyéb eszközök, amelyek bináris (be- és kikapcsolt) értékeket képviselnek egy kapcsolatcsoport befejezésével.

Ebben az oktatóanyagban a .NET-et és a Raspberry Pi GPIO-tűit fogja használni egy kapcsolatcsoport megnyitásának és bezárásának észleléséhez.

Előfeltételek

  • ARM-alapú (ARMv7 vagy újabb) egytáblás számítógép (SBC)
  • Jumper drótok
  • Rajztábla (nem kötelező)
  • Raspberry Pi GPIO melléktábla (nem kötelező)
  • .NET SDK 7 vagy újabb

Megjegyzés

Ez az oktatóanyag azt feltételezve íródott, hogy a céleszköz Raspberry Pi. Ez az oktatóanyag azonban minden olyan Linux-alapú SBC-hez használható, amely támogatja a .NET-et, például az Orange Pi-t, az ODROID-ot és egyebeket.

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 kapcsolatcsoportot a hardverösszetevők használatával hozhatja létre az alábbi ábrán látható módon:

Egy olyan áramkört ábrázoló diagram, amely egy földelt tűt csatlakoztat a 21-hez.

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

Tipp

A diagram egy rajztáblát és EGY GPIO-törést ábrázol szemléltető célokra, de nyugodtan csatlakoztassa a 21-es csapot egy ugróhuzallal a Raspberry Pi-n.

Szükség szerint tekintse meg a következő kitűződiagramot:

A Raspberry Pi GPIO fejlécét ábrázoló diagram. 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 CLI vagy a Visual Studio használatával. Adja neki 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 2.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)}");
    }
    

    A fenti kód a következőket végzi el:

    • A using deklaráció létrehozza a példányát.GpioController A using deklaráció biztosítja az objektum megsemmisítését és a hardvererőforrások megfelelő kiadását.
    • A GPIO pin 21 a-vel PinMode.InputPullUpvan megnyitva.
      • Ezzel megnyitja a gombostűt egy PullUp-ellenállással . Ebben a módban, ha a tű földhöz csatlakozik, a visszaadja PinValue.Lowa következőt: . Ha a csap le van választva a földről, és a kapcsolatcsoport nyitva van, a tű a következőt adja PinValue.Highvissza: .
    • A kezdeti állapotot a rendszer egy konzolra írja egy ternáris kifejezéssel. A gombostű aktuális állapotát a következővel olvassa be: Read(). Ha az PinValue.High, akkor a sztringet Alert a konzolra írja. Ellenkező esetben a sztringet Ready írja.
    • RegisterCallbackForPinValueChangedEvent()egy visszahívási függvényt regisztrál a és PinEventTypes.Falling az PinEventTypes.Rising eseményhez a pin-kódon. Ezek az események a és PinValue.Lowa pin-állapotának PinValue.High felelnek meg.
    • A visszahívási függvény egy nevű 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 határozatlan ideig alszik, miközben a pin-eseményekre vár.
  4. Az alkalmazás létrehozása. Ha a .NET CLI-t használja, futtassa a parancsot dotnet build. A Visual Studióban való buildeléshez nyomja le a CtrlShift+Bbillentyűkombinációt+.

  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ó végrehajtási engedélyt a használatával chmod +xadja meg.

  6. Futtassa az alkalmazást a Raspberry Pi-n 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. Bontsa le a 21-et 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 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 billentyű lenyomásával+.

Gratulálunk! A GPIO használatával észlelte a bemenetet a System.Device.Gpio NuGet-csomag használatával! Az ilyen típusú bemenetek sokféleképpen használhatók. Ez a példa bármely olyan forgatókönyvhöz használható, amikor egy kapcsoló csatlakozik vagy megszakít egy kapcsolatcsoportot. Íme egy példa, amely mágneses reval használja, amelyet gyakran használnak nyitott ajtók vagy ablakok észlelésére.

Animált GIF, amely egy mágneses reed kapcsoló megnyitását és bezárását szemlélteti. A kapcsoló mágnesnek van kitéve, és az alkalmazás READY (KÉSZ) állapotot jelenít meg. A mágnes el lesz távolítva, és az alkalmazás megjeleníti a ALERT (RIASZTÁS) elemet. A művelet ezután megismétlése.

Lézeres tripwire

Az előző példakoncepciót egy kicsit tovább bővítve vizsgáljuk meg, hogyan lehetne ezt alkalmazni egy lézeres tripwire létrehozásához. A lézeres tripwire létrehozásához a következő további összetevők szükségesek:

  • KY-008 lézeres adómodul
  • Lézerérzékelő modul (lásd az alábbi megjegyzést)
  • 2 10 000 Ω ellenállás

Megjegyzés

A lézerérzékelős modul egy általános név, amelyet számos internetes kereskedő közös moduljára alkalmaztak. Az eszköz neve vagy gyártója eltérő lehet, de ennek a képnek kell hasonlítania.

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.

Diagram egy áramkörről, amely egy lézerérzékelő modulból kap bemenetet.

Ügyeljen a 10K Ω ellenállásra. Ezek feszültségelosztót alkalmaznak. Ennek az az oka, hogy a lézerérzékelő modul 5V-os kimenetet ad ki, jelezve, hogy a nyaláb megszakadt. A Raspberry Pi csak 3,3V-os GPIO-bemenetet támogat. Mivel a teljes 5V-os tűre való 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éget 2,5V-ra felezze.

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

Egy kivétellel szinte ugyanazt a kódot használhatja, mint korábban. A többi példában úgy használtuk PinMode.InputPullUp , hogy amikor a tű le van választva a földről, és a kapcsolatcsoport nyitva van, a tű a következőt adja PinValue.Highvissza: .

A lézerérzékelő 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ézerérzékelő modulból érkező áramhoz. Ebben az esetben a gombostűt a következővel PinMode.InputPullDownnyitjuk meg: . Ily módon a tű akkor ad vissza PinValue.Low , ha nincs áram, és PinValue.High amikor áramot fogad a lézerérzékelő modulból.

controller.OpenPin(pin, PinMode.InputPullDown);

Fontos

A lézeres tripwire tesztelése előtt győződjön meg arról, hogy a Raspberry Pi-on üzembe helyezett kód tartalmazza ezt a módosítást. A program nem működik nélküle, de ha nem a megfelelő bemeneti módot használja, az károsíthatja a Raspberry Pi-t!

Animált GIF, amely a lézeres tripwire bemutatóját mutatja be. A lézeres emitter megvilágítja a lézerérzékelő modult, és az alkalmazás READY (KÉSZ) állapotot jelenít meg. A lézersugár megszakadt, és az alkalmazás riasztást jelenít 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