pigpioとC言語でGPIOを制御してLEDを点滅させる
前回はpigpioというライブラリを使って、PythonのコードでLEDを点滅させてみた。今回はC言語でコードを書いて、Lチカをやってみる。
なお、C言語でLチカするときはpigpioライブラリを直接使って実行する方法と、pigpiod(デーモン)を介して実行する方法があるが、まず今回はgpioライブラリを直接使って制御してみる。
回路は前回同様、以下のセットを使ってブレッドボード上につくる。
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Bullseye)
pigpio 1.79-1+rpt1
gcc version 10.2.1 20210110 (Raspbian 10.2.1-6+rpi1)
ブレッドボードに回路をつくる
ここは前回と一緒。LEDと抵抗をラズベリーパイの35pin(GPIO 19)と39pin(GND)に接続した。抵抗値は330Ω。
Cのコードを書く
C言語についてはpigpioの公式ページのpigpio C InterfaceのページにC言語での使い方が書いてある。こちらを参考にして、以前つくったWiringPiのコードをベースに以下のコードを作成↓
#include <pigpio.h> #include <unistd.h> int main (void) { int led_gpio = 19; gpioInitialise(); gpioSetMode(led_gpio, PI_OUTPUT); while (1) { gpioWrite(led_gpio, 1); usleep(500000); gpioWrite(led_gpio, 0); usleep(500000); } return 0 ; }
gccでコンパイルする
コードを置いてあるディレクトリで公式ページに従って以下のコマンドを実行し、pigpio_ledという名前で実行ファイルを作成する。gccのオプションについては「gcc オプション」とかでググればたくさん情報が出てくるので、気になる方はググッてみてください。
$ gcc -Wall -pthread -o pigpio_led pigpio_led.c -lpigpio -lrt
問題なくコンパイルが通れば、C言語のコードと同じディレクトリにpigpio_ledというファイルができているはず。
実行時にpigpiodは起動しないこと
あとはコンパイルしてできたファイルを実行するだけだが、ここで一点注意がある。Pythonの時は
$ sudo pigpiod
でデーモンを起動させていたが、C言語でpigpio.hをincludeして直接ライブラリをlinkしている場合、デーモンを起動した状態でプログラムを実行するとエラーが出る。もしデーモンを起動させている場合は
$ sudo killall pigpiod
でデーモンを終了してからファイルを実行する。ファイルの実行は以下で行う。
$ sudo ./pigpio_led
これで無事にLチカは達成できた。次回はpigpiodを使ってデーモンを介してC言語のコードでGPIOを操作し、Lチカをやってみたい。
日記まとめ
ラズパイで遊んでみた軌跡を以下でまとめてます。