ラズパイ5のlibgpiodでGPIO制御(Lチカ)する
libgpiodでGPIO制御
ラズパイでは、今まで(ラズパイ4まで)pigpioという便利なライブラリを使ってGPIO制御をしていました。
ただ、ラズパイ5ではハードウェアの構成が大きく変わり、pigpioは動きません。今後も動くようになるか分からない状況のようです。
現状のラズパイのGPIO制御の推奨ライブラリ主要なライブラリの1つは、LinuxでのGPIO制御に標準的に使われているlibgpiodのようなので、libgpiodを使ったGPIO制御を試してみました。
ラズパイ5の基本的なセットアップなどは以下記事参照ください。
libgpiodのラズパイのピン番号との対応
最初に分からなかったのが、ピンの対応です。以下コマンドで調べることができます。
$ gpioinfo
ずらずらーと出てきますが、ラズパイの場合重要なのはgpiochip4
という部分です。
gpiochip4 - 54 lines:
line 0: "ID_SD" unused input active-high
line 1: "ID_SC" unused input active-high
line 2: "PIN3" unused input active-high
line 3: "PIN5" unused input active-high
line 4: "PIN7" unused input active-high
line 5: "PIN29" unused input active-high
line 6: "PIN31" unused input active-high
line 7: "PIN26" unused input active-high
line 8: "PIN24" unused input active-high
line 9: "PIN21" unused input active-high
line 10: "PIN19" unused input active-high
line 11: "PIN23" unused input active-high
line 12: "PIN32" unused input active-high
line 13: "PIN33" unused input active-high
line 14: "PIN8" unused input active-high
line 15: "PIN10" unused input active-high
line 16: "PIN36" unused input active-high
line 17: "PIN11" unused input active-high
line 18: "PIN12" unused input active-high
line 19: "PIN35" unused input active-high
line 20: "PIN38" unused input active-high
line 21: "PIN40" unused input active-high
line 22: "PIN15" unused input active-high
line 23: "PIN16" unused input active-high
line 24: "PIN18" unused input active-high
line 25: "PIN22" unused input active-high
line 26: "PIN37" unused input active-high
line 27: "PIN13" unused input active-high
lin![](https://storage.googleapis.com/zenn-user-upload/72841b128ac0-20240218.jpg)e 28: "PCIE_RP1_WAKE" unused input active-high
line 29: "FAN_TACH" unused input active-high
line 30: "HOST_SDA" unused input active-high
line 31: "HOST_SCL" unused input active-high
line 32: "ETH_RST_N" "phy-reset" output active-low [used]
line 33: "-" unused input active-high
line 34: "CD0_IO0_MICCLK" "cam0_reg" output active-high [used]
line 35: "CD0_IO0_MICDAT0" unused input active-high
line 36: "RP1_PCIE_CLKREQ_N" unused input active-high
line 37: "-" unused input active-high
line 38: "CD0_SDA" unused input active-high
line 39: "CD0_SCL" unused input active-high
line 40: "CD1_SDA" unused input active-high
line 41: "CD1_SCL" unused input active-high
line 42: "USB_VBUS_EN" unused output active-high
line 43: "USB_OC_N" unused input active-high
line 44: "RP1_STAT_LED" "PWR" output active-low [used]
line 45: "FAN_PWM" unused output active-high
line 46: "CD1_IO0_MICCLK" "cam1_reg" output active-high [used]
line 47: "2712_WAKE" unused input active-high
line 48: "CD1_IO1_MICDAT1" unused input active-high
line 49: "EN_MAX_USB_CUR" unused output active-high
line 50: "-" unused input active-high
line 51: "-" unused input active-high
line 52: "-" unused input active-high
line 53: "-" unused input active-high
ここで"PINXX"
がラズパイのピン番号を示しています。ピン番号は以下で確認しましょう。
ここで、例えばline17: "PIN11"
は40pinの11番目(GPIO 17)に対応します。
libgpioでGPIO制御(Lチカ)
上記でlibgpioでの名称とラズパイのピン番号の対応が分かりました。
今回はGPIO17(11pin)
を使用するので、以下のようなプログラムを使用します。特にライブラリなどのインストールの必要はありませんでした。
import gpiod
import time
PIN_NO = 17
chip = gpiod.Chip('gpiochip4', gpiod.Chip.OPEN_BY_NAME)
line = chip.get_line(PIN_NO)
line.request(consumer="LED", type=gpiod.LINE_REQ_DIR_OUT)
try:
while True:
line.set_value(1)
time.sleep(1)
line.set_value(0)
time.sleep(1)
finally:
line.release()
回路は、以下のバスの降車ボタンを使ったLチカ回路です。
回路図は以下のようになります。
トランジスタは2SC3419です。文字が書かれている方からみて、左からE(エミッタ)、C(コレクタ)、B(ベース)です。エクボと覚えましょう。
回路を知らないと少し難しく見えるかもしれませんが、要はGPIO17がHigh(1)になったらLEDが光って、Low(0)になったらLEDが消灯するというだけの回路です。
プログラムを実行すると以下のようにLチカできました。
まとめ
ラズパイ5でGPIO制御(Lチカ)しました。
ピン番号の対応がよくわからず時間かかりました。そんな初歩的なところでつまづくの自分くらいでしょうか?しかし、pigpioが使えないのは残念ですね。
参考リンク
関連記事
Discussion