Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
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:
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:
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
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-*
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
Ausing
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állPinValue.High
.
- 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
- 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 vanPinValue.High
, aAlert
sztringet a konzolra írja. Ellenkező esetben a karakterláncotReady
írja. -
RegisterCallbackForPinValueChangedEvent()
egy visszahívási függvényt regisztrál mind aPinEventTypes.Rising
mind aPinEventTypes.Falling
eseményekhez a tűn. Ezek az események megfelelnek a pin-állapotoknakPinValue.High
, illetvePinValue.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
vagyReady
sztringeket is megírja. - A fő szál végtelen ideig alszik, miközben a rögzítési eseményekre vár.
- A felhasználói deklaráció létrehoz egy példányt.
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+.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.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 ✅
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 🚨
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 ✅
Á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.
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ézeres tripwire hardver csatlakoztatása
Csatlakoztassa az összetevőket az alábbi ábrán leírtak szerint.
Ü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!
A forráskód lekérése
Az oktatóanyag forrása a GitHubon érhető el.