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 é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.
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 parancssori felület vagy Visual Studio használatával. Adja meg Az InputTutorial nevet.
dotnet new console -o InputTutorial cd InputTutorialAdja 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.1Cseré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. Ausingdeklaráció biztosítja az objektum ártalmatlanítását és a hardvererőforrások megfelelő kiadását.-
GpioControllerparamé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.InputPullUpparanccsal.- 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állPinValue.High.
- Ezzel megnyitja a csapot egy PullUp ellenállással. Ebben a módban, amikor a tű a földhöz van kapcsolva,
- A rendszer a kezdeti állapotot ternáris kifejezéssel írja a konzolra. A gombostű aktuális állapota a következővel
Read()olvasható: . Ha ezPinValue.High, aAlertsztringet a konzolra írja. Ellenkező esetben aReadysztringet írja. -
RegisterCallbackForPinValueChangedEvent()visszahívási függvényt regisztrál mind aPinEventTypes.Risingés aPinEventTypes.Fallingeseményekhez a tűn. Ezek az események aPinValue.Highés aPinValue.Lowpin-á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őAlertvagyReadysztringeket is megírja. - A fő szál végtelen ideig alszik, miközben a rögzítési eseményekre vár.
- A using deklaráció létrehoz egy példányt
Hozza létre az alkalmazást. Ha a .NET parancssori felületet használja, futtassa a
dotnet buildparancsot. A Visual Studio-ban történő buildeléshez nyomja le a Ctrl+Shift+B billentyűkombinációt.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 +xhaszná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.
./InputTutorialA 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-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.
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é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. 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!
A forráskód lekérése
Az oktatóanyag forrása elérhető GitHub.