Raspberry Pi GPIO vezérlése C nyelven

A Raspberry Pi egyik nagy előnye, hogy van rajta egy tüskesor header amire ki van vezetve a GPIO lábainak egy része. A B változatban 26, míg a B+ esetében ez 40 tűs csatlakozót takar. Ez nem mind GPIO, vannak köztük táplábak is. A kivezetett lábak nagyszerű lehetőséget nyújtanak arra, hogy különböző áramköröket vezéreljünk a Raspberry Pi segítségével. Köthetünk rá LEDeket, gombokat, különböző érzékelőket és más áramköröket.

Szükségünk lesz a BCM 2835 C library-ra, hogy C programunkból használni tudjuk a Raspberry Pi GPIO lábait. Innen tölthetjük le.
Letöltés és kicsomagolás után lépjünk be a könyvtárába, majd a következő parancsokkal tudjuk fordítani és telepíteni:

$ make
$ sudo make check
$ sudo make install

A fentieket természetesen a Raspberry Pi-n kell végre hajtani, csakúgy, mint a továbbiakat.

A példa kódot C nyelven írtam.

A 11. sorban beincludoljuk a BCM 2835 lib header fájlját.
A 16-26. sorban a kapott paramétereknek megfelelően beállítjuk, hogy a Raspberry Pi melyik GPIO lábát akarjuk vezérelni.
A 31. sorban inicializálódik a BCM 2835 library, amennyiben nem sikerült, itt kilép a program.
A 37. sorban kimenetnek állítjuk a fentebb kiválasztott Raspberry Pi GPIO lábat.
A 41. sorban alacsonyra (GND) állítjuk a kiválasztott GPIO lábat.
A 44-ben, pedig magasra (3,3V) állítódik.
A 45-51. sor negálja a láb állapotát.
Az 54. sor lekérdezi a Raspberry Pi kiválasztott GPIO lábának állapotát.
Végül az 57. sorban lezárjuk a BCM 2835 libraryt.

A fenti C programot gcc-vel fordíthatjuk le:

$ gcc -o bin/rpi_gpi_set rpi_gpio_set.c -l bcm2835

A -l kapcsoló segítségével linkeljük hozzá a programunkhoz a BCM 2835 libraryt.
A programot rendszergazda jogokkal kell futtatni, hogy hozzáférhessen a Raspberry Pi GPIO portjához, például a

$ sudo rpi_gpio_set 22 1

parancs a P1_22-es portra kötött LED-et felkapcsolja. A pontos lábkiosztást a következő oldalon található táblázatban láthatod: link. A programunknak a P1_ utáni számot kell csak megadni paraméterül.

A program forráskódja megtalálható GitHubon is.

Amennyiben pl gombot szeretnénk kötni a Raspberry Pi-re és annak az állapotára vagyunk kíváncsiak, akkor a megfelelő GPIO lábat bemenetnek kell állítanunk:

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT);

Gomb esetén bekapcsolhatjuk a kiválasztott láb földre húzását a következőképpen:

bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_DOWN);

Ebben az esetben a gomb egyik lába a Raspberry Pi kiválasztott lábához csatlakozik, míg a másik a 3,3V-os tápfeszültségre (pl.: P1_01).
A gomb állapotát a

uint8_t value = bcm2835_gpio_lev(PIN);

sorral olvashatjuk ki. Amennyiben a gomb le van nyomva, a value értéke 1 lesz, különben 0.

A következő rész tartalmából…
Megnézzük, hogyan tudjuk kezelni a Raspberry Pi GPIO lábait Node.js-ben írt program segítségével.

Kategória: Programozás Címke: ,