ちょっとTea Time!? lgpioの憂鬱(Raspberry PiのGPIOライブラリ) 2026.9.5

久しぶりにラズパイのGPIOになにかをぶら下げて遊んで見ようかと思い、
以前に作ったボードを引っ張りだしてきました。


ラズパイ4に拡張ボードをとりつけて、いつでもGPIOで遊べるようにしたものです。


ピン配置はD16,D17の位置がすこし変則的ですが、このようになっています。

なぜ、いまだにラズパイ4か?

なぜ、いまだにラズパイ4をつかっているかというと、大きく2つの理由があります。

1.GPIOライブラリのWiringPiがラズパイ5で使えない
  これが大きな要因です。いままで、C言語でGPIOをつかうときにWiringPiというGPIOライブラリをつかっていましたが、
 開発は中止されてしまいラズパイ5ではつかえません。

2.ラズパイ5がない
  実は最大の要因でもあったりするのですが、以前にラズパイ5を購入した直後に電源を入れ間違えて昇天させてしまいました。

いまはラズパイ5はありませんが、ラズパイ5で使えるGPIOライブラリがあれば、より快適に遊べるはずです。
ということで、ラズパイ5でつかえるGPIOライブラリがあるか調べてみました。
#といっても、いまラズパイ5って高いのですよね〜。

このあたりの調べ物は横着してAIです。

lgpioなるライブラリがあるみたい

yahooの検索エンジンにAIモードがあるので、そこで問い合わせてみました。
まず、ラズパイ5で使えるライブラリの有無を問い合わせです。

なにやらlgpiolibgpiodの2種類があります。
汎用的にはlibgpiodがいいようだけど、lgpioの方が使いやすいらしいので、
こちらを試てみることにします。

で、使うにはライブラリのインストールが必要ですが、
これも、AIにインストール方法を問い合わせです。

lgpioを使ってみましょう!

ついでなので、AIにlgpioをつかったLチカのサンプルプログラムを作ってもらいました。



#include <stdio.h>
#include <unistd.h>
#include <lgpio.h>

#define GPIO_CHIP 0
#define LED_GPIO  17

int main(void)
{
    int h;

    h = lgGpiochipOpen(GPIO_CHIP);
    if (h < 0) {
        fprintf(stderr, "gpiochip open error: %d\n", h);
        return 1;
    }

    if (lgGpioClaimOutput(h, 0, LED_GPIO, 0) < 0) {
        fprintf(stderr, "gpio claim output error\n");
        lgGpiochipClose(h);
        return 1;
    }

    for (int i = 0; i < 10; i++) {
        lgGpioWrite(h, LED_GPIO, 1);
        usleep(500000);

        lgGpioWrite(h, LED_GPIO, 0);
        usleep(500000);
    }

    lgGpioFree(h, LED_GPIO);
    lgGpiochipClose(h);
    return 0;
}

サンプルプログラムだけでなく、ちゃんとコンパイルと実行方法も教えてくれます。

実際にはコンパイルと実行は下記でいいようです。
 cc -o blink blink.c -llgpio
 ./blink

動かしてみましょう!おっそ!!!


どのくらいのGPIOのON/OFFの実行速度が出るか調べるために、
サンプルプログラムをすこし改変して、単純にON/OFFを繰り返すだけにします。

#include <stdio.h>
#include <lgpio.h>

int main(void)
{
 int i;
 int h = lgGpiochipOpen(0);
 if (h < 0) {
  printf("gpiochip open error\n");
  return 1;
}

 lgGpioClaimOutput(h, 0, 17, 0);
 while(1){
  lgGpioWrite(h, 17, 1);
  lgGpioWrite(h, 17, 0);
 }
 lgGpiochipClose(h);
 return 0;
}


これを実行して、GPIOピンの波形を調べてみました。

おっそ!

 なんと、パルスの周波数はたかだか240kHzです。GPIOのONあるいはOFFに
それぞれ約2usの時間がかかるようです。こりゃ、遅すぎます。
 たしかWiringPiをつかったときはnsオーダだったはず。PIC(64MHz)でも62.5nsで実行可能です。
 これだけ遅いと、使い物にならないなあ〜。


GPIOの出力波形です。え?こんなに遅いの?


繰り返し周波数はなんと240kHzしかでません。ON/OFFにそれぞれ約2usかかる計算です。

まとめ
 ラズパイ5でGPIOを制御するライブラリとしてlgpioがありました。
 ただし、GPIOのOn.OFFの実行速度がかなり遅いです。
 これならば、ラズパイ4ではWiringPiを使ったほうがはるかにいいでしょう。

 ということで、ラズパイ5の購入は当面なさそうです。

<念のため>
 ラズパイ4+WiringPiの場合です。

周波数32MHzなのでOn/OFFは約16nsです。lgpioより100倍以上早いです。

(おしまい)