GPIO. Ez a varázslatos rövidítés sokáig ismeretlen volt számomra, az első Raspberry Pi Zero W-m megvásárlásakor találkoztam vele először. Sok Raspberry tulajdonos nem is használja, pedig nagyon praktikus dolog. A General Purpose Input Output mozaikszó olyan (általában digitális) be-kimenetet jelent, melynek állapotát a felhasználó futásidőben módosíthatja (kimenet) illetve figyelheti az állapotváltozását (bemenet). Aki már rakott össze PC-t, a bekapcsológomb, a Power LED, a Reset gomb, és a HDD LED bekötésekor is találkozhatott már ilyennel, csak azok kezelését a BIOS lefoglalja magának.
Mire jó a GPIO? Bemenetként tudunk rá kötni pl mozgásérzékelőt, nyitásérzékelőt, nyomógombot, egyéb bináris (kétállapotú, digitális) érzékelőket. Kimenetként tudunk vele LED-eket vagy reléket vezérelni.
Bár a régebbi PC-ken van soros és párhuzamos port is, amiket kis mókolással lehet ilyen célra használni, mostanság leginkább csak USB-vel lehet találkozni a számítógépeken. Létezik azonban FTDI gyártmányú soros átalakító, aminek segítségével modern PC-ken is tudunk ilyesmit csinálni.
Több típus is létezik, én most kettőt mutatnék be, az első a fenti képen látható FT232H (7-8 dolláros tétel) 16 darab GPIO láb használatát teszi lehetővé egy USB portról. Vagy engedélyezhető I2C, illetve SPI módja is. I2C módban 13 GPIO marad felhasználható, a 3 első pedig SCL, SDA-out, SDA-in lábakká válnak. Az I2C kétvezetékes kommunikációs mód, miért kell akkor három láb? Tervezési jellegzetesség, hogy egy lábat egy módban lehet inicializálni, vagy be, vagy kimenet, az SDA-nak pedig mindkettőt tudnia kell, így az SDA-out és SDA-in lábakat össze kell kötni, úgy vinni az I2C eszköz SDA lábára. Mivel (megfelelő erősségű) felhúzó ellenállást nem tartalmaz a modul, ezért magunknak kell gondoskodni, a szükséges 2-4Kohmos felhúzó ellenállásról is - kivéve ha a célegység már tartalmazza ezt, pl a 0.96"-os I2C OLED kijelző tartalmazza a felhúzó ellenállásokat, többet nem kell tenni egy körre.
Érdekesség, hogy bár sehol nem említik, de ahányat láttam, mindegyik úgy viselkedett, hogy az Input módba tett lábak Pullup üzembe kerültek, vagyis alapból 1 értéket vettek fel, tehát valamekkora kis felhúzó ellenállás csak van rajta, és alapból engedélyezett, tiltani nem lehet.
Hogyan használhatjuk ezt az eszközt? Ha programozni szeretnénk, a pyftdi könyvtár nagyon jól használható, ezt implementáltam egyébként az RPIEasy projektbe is, tehát akinek Linuxa van USB-vel rendelkező gépen, az RPIEasy-vel is beüzemelheti.
Az RPIEasy telepítése a hivatkozott cikkben ismertetésre került. A pyftdi függőséget a Hardware->Plugin&controller dependencies menüpont alatt lehetséges (GPIO néven fut az ellenség megtévesztésére), feltéve, hogy megfelelő jogosultságunk van a telepítésre... (egyébként a legtöbb plugin függőségének telepítése így megy)

A Hardware->Pinout&Ports-nál tudjuk felvenni az egyes FTDI eszközöket a listáról,majd beállítani, hogy az egyes lábak milyen célt szolgálnak.

Itt látható az I2C OLED kijelző kísérleti tesztje a jó öreg Ubuntu Linuxos PC-men, USB-n keresztül.
Azt azért el kell mondjam, hogy nem minden RPIEasy plugin fog működni alternatív hardveren (pl a DHT sem), mivel a legtöbb könyvtárat Raspberry-re írták, de jó pár működni fog. Az I2C függőséget telepítve pl az smbus funkciókat fogja a pyftdi felé továbbítani a program, így életre keltve pár külső smbus alapú könyvtárat.
Létezik nagyobb testvére is, pl az FT2232H, ahol már 2x16 GPIO is kezelhető, ahogy egyszerűbb és olcsóbb társa is, amit néhányan firmware feltöltésre is használnak, ez az FT232R. (cirka 2 dollár) Eredetileg az FTDI chipeket soros kommunikációra tervezték, de semmi akadálya nincs annak, hogy a rendelkezésre álló lábakat GPIO célra használjuk e helyett. Ennél az egyszerűbb verziónál viszont nincs mód sem I2C, sem SPI használatára, azt kizárólag az erősebb "H" típusok tudják.

Hogy konkrétan mire tudnám használni ezeket, azt még nem tudom, mivel általában praktikusabbnak tartom egy 1W fogyasztású RPI Zero állandó járatását 24/7-ben, mint egy 200W-ot zabáló számítógépét, de feltehetőleg mindenkinek - aki eljutott a cikk végéig - van legalább egy olyan ismerőse, aki fel tudná pimpelni az otthoni gépét/szerverét egy mozgásérzékelővel, I2C hőmérővel vagy egy I2C OLED kijelzővel, esetleg egy mezei relével, ami a macskaetető robotkart indítja... :)
Aki a blogot tüzetesen átolvasta, persze már találkozhatott USB relével és USB hőmérővel is, ám ezek az eszközök tovább bővítik a lehetőségek körét.
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.
Kommentezéshez lépj be, vagy regisztrálj! ‐ Belépés Facebookkal