003.拡張コネクタでLチカ
2026-08-13
外部回路を制御できた
概要
本体Lチカはできたので今度は拡張コネクタから信号線を引き出して外部回路をドライブする。はい、外部でLチカです。
物理だよ物理
信号PIN確認
拡張コネクタのPINを確認する。ChatGPTさんやCopilotさんはP8コネクタの12番を勧めてくるのでこれを使おう。

引用:BeagleBone Black 公式ドキュメントPDF 66ページ
P8コネクタは46pin(23pin2列)でこの写真だと一番上の左側が1番、右側が2番。一番下の左側が45番、右が46番。P8コネクタの12番は上から数えて6個目の右側になる。
GNDは1番2番なので1番を使おう。どちらも公式ドキュメントの69ページに説明がある。
回路
ブレッドボードにパーツを配置する。
ChatGPTにこの写真から回路図的な物を書いてもらった。
抵抗はついギザギザで書いちゃうけど、現在のJISでは四角になってる。
抵抗を入れる理由
なんで直接LEDをつながないで抵抗を入れているかというと、
- LEDに過大な電流が流れるのを防ぐため
- LEDとGPIOの両方を保護するため
に電流制限のための抵抗を直列に入れる。
赤色LEDの順方向電圧はおおよそ1.8~2.2Vくらい。定格電流が 10~20mA程度。この範囲で収まるように抵抗を挟み込むわけだ。
GPIOの出力が3.3Vなので、仮にLEDに2.0Vの電圧がかかるようにするなら、抵抗に1.3Vが掛かればよい。そしてその場合は
1.3V ÷ 330Ω ≒ 0.0039A ≒ 4.0mA
なのでLEDには約4.0mAの電流が流れる事になる。流す電流を増やすなら(明るくするなら)抵抗の値を小さく変更する。
LED直結だと3.3Vがかかるのでぶっ壊れるんじゃないかなぁ。
※この例だと抵抗を挟み込んで回路に流れる電流を4.0mAにしている。LEDは順方向電圧を超えると電流が急激に増えるので、電流を制限できるものが無いとLEDやGPIOに過大な電流が流れてぶっ壊れるよ。
ソフトウエア
GPIO ってキーワードがこれからあちこち出てくるけど、これは GPIO : General Purpose Input/Output (汎用入出力)の事。
マイコン(Arduino、Raspberry Pi Pico、ESP32や今使っているBeagleBone Blackなど)やSoC(Raspberry Piなど)が持つピンのうち、ソフトウェアから自由に入力または出力として使える端子やその機能の事。
仮想ファイル(/sys/class/…)を使うのは古いとCopilotに怒られたのでこっちで行くよ!
下調べ
BBB(BeagleBone Black)にSSHでログインして、お奨めされたP8コネクタ12番PINのアクセス方法を調べる。
debian@BeagleBone:~$ uname -a
Linux BeagleBone 5.10.168-ti-r83 #1bullseye SMP PREEMPT Thu Aug 7 20:36:50 UTC 2025 armv7l GNU/Linux
debian@BeagleBone:~$ gpioinfo
gpiochip0 - 32 lines:
line 0: "[mdio_data]" unused input active-high
line 1: "[mdio_clk]" unused input active-high
line 2: "P9_22 [spi0_sclk]" "P9_22" input active-high [used]
line 3: "P9_21 [spi0_d0]" "P9_21" input active-high [used]
line 4: "P9_18 [spi0_d1]" "P9_18" input active-high [used]
line 5: "P9_17 [spi0_cs0]" "P9_17" input active-high [used]
line 6: "[mmc0_cd]" "cd" input active-low [used]
line 7: "P9_42A [ecappwm0]" "P9_42" input active-high [used]
line 8: "P8_35 [lcd d12]" "P8_35" input active-high [used]
line 9: "P8_33 [lcd d13]" "P8_33" input active-high [used]
line 10: "P8_31 [lcd d14]" "P8_31" input active-high [used]
line 11: "P8_32 [lcd d15]" "P8_32" input active-high [used]
line 12: "P9_20 [i2c2_sda]" "P9_20" input active-high [used]
line 13: "P9_19 [i2c2_scl]" "P9_19" input active-high [used]
line 14: "P9_26 [uart1_rxd]" "P9_26" input active-high [used]
line 15: "P9_24 [uart1_txd]" "P9_24" input active-high [used]
line 16: "[rmii1_txd3]" unused input active-high
line 17: "[rmii1_txd2]" unused input active-high
line 18: "[usb0_drvvbus]" unused input active-high
line 19: "[hdmi cec]" unused input active-high
line 20: "P9_41B" "P9_41" input active-high [used]
line 21: "[rmii1_txd1]" unused input active-high
line 22: "P8_19 [ehrpwm2a]" "P8_19" input active-high [used]
line 23: "P8_13 [ehrpwm2b]" "P8_13" input active-high [used]
line 24: "NC" unused input active-high
line 25: "NC" unused input active-high
line 26: "P8_14" "P8_14" input active-high [used]
line 27: "P8_17" "P8_17" input active-high [used]
line 28: "[rmii1_txd0]" unused input active-high
line 29: "[rmii1_refclk]" unused input active-high
line 30: "P9_11 [uart4_rxd]" "P9_11" input active-high [used]
line 31: "P9_13 [uart4_txd]" "P9_13" input active-high [used]
gpiochip1 - 32 lines:
line 0: "P8_25 [mmc1_dat0]" "P8_25" input active-high [used]
line 1: "[mmc1_dat1]" "P8_24" input active-high [used]
line 2: "P8_5 [mmc1_dat2]" "P8_05" input active-high [used]
line 3: "P8_6 [mmc1_dat3]" "P8_06" input active-high [used]
line 4: "P8_23 [mmc1_dat4]" "P8_23" input active-high [used]
line 5: "P8_22 [mmc1_dat5]" "P8_22" input active-high [used]
line 6: "P8_3 [mmc1_dat6]" "P8_03" input active-high [used]
line 7: "P8_4 [mmc1_dat7]" "P8_04" input active-high [used]
line 8: "NC" "PHY reset" output active-low [used]
line 9: "NC" unused input active-high
line 10: "NC" unused input active-high
line 11: "NC" unused input active-high
line 12: "P8_12" unused output active-high
line 13: "P8_11" "P8_11" input active-high [used]
line 14: "P8_16" "P8_16" input active-high [used]
line 15: "P8_15" "P8_15" input active-high [used]
line 16: "P9_15A" "P9_15" input active-high [used]
line 17: "P9_23" "P9_23" input active-high [used]
line 18: "P9_14 [ehrpwm1a]" "P9_14" output active-high [used]
line 19: "P9_16 [ehrpwm1b]" "P9_16" input active-high [used]
line 20: "[emmc rst]" unused input active-high
line 21: "[usr0 led]" unused output active-high
line 22: "[usr1 led]" unused output active-high
line 23: "[usr2 led]" unused output active-high
line 24: "[usr3 led]" unused output active-high
line 25: "[hdmi irq]" "interrupt" input active-high [used]
line 26: "[usb vbus oc]" unused input active-high
line 27: "[hdmi audio]" "enable" output active-high [used]
line 28: "P9_12" "P9_12" input active-high [used]
line 29: "P8_26" "P8_26" input active-high [used]
line 30: "P8_21 [emmc]" "P8_21" input active-high [used]
line 31: "P8_20 [emmc]" "P8_20" input active-high [used]
gpiochip2 - 32 lines:
line 0: "P9_15B" unused input active-high
line 1: "P8_18" "P8_18" input active-high [used]
line 2: "P8_7" "P8_07" input active-high [used]
line 3: "P8_8" "P8_08" input active-high [used]
line 4: "P8_10" "P8_10" input active-high [used]
line 5: "P8_9" "P8_09" input active-high [used]
line 6: "P8_45 [hdmi]" "P8_45" input active-high [used]
line 7: "P8_46 [hdmi]" "P8_46" input active-high [used]
line 8: "P8_43 [hdmi]" "P8_43" input active-high [used]
line 9: "P8_44 [hdmi]" "P8_44" input active-high [used]
line 10: "P8_41 [hdmi]" "P8_41" input active-high [used]
line 11: "P8_42 [hdmi]" "P8_42" input active-high [used]
line 12: "P8_39 [hdmi]" "P8_39" input active-high [used]
line 13: "P8_40 [hdmi]" "P8_40" input active-high [used]
line 14: "P8_37 [hdmi]" "P8_37" input active-high [used]
line 15: "P8_38 [hdmi]" "P8_38" input active-high [used]
line 16: "P8_36 [hdmi]" "P8_36" input active-high [used]
line 17: "P8_34 [hdmi]" "P8_34" input active-high [used]
line 18: "[rmii1_rxd3]" unused input active-high
line 19: "[rmii1_rxd2]" unused input active-high
line 20: "[rmii1_rxd1]" unused input active-high
line 21: "[rmii1_rxd0]" unused input active-high
line 22: "P8_27 [hdmi]" "P8_27" input active-high [used]
line 23: "P8_29 [hdmi]" "P8_29" input active-high [used]
line 24: "P8_28 [hdmi]" "P8_28" input active-high [used]
line 25: "P8_30 [hdmi]" "P8_30" input active-high [used]
line 26: "[mmc0_dat3]" unused input active-high
line 27: "[mmc0_dat2]" unused input active-high
line 28: "[mmc0_dat1]" unused input active-high
line 29: "[mmc0_dat0]" unused input active-high
line 30: "[mmc0_clk]" unused input active-high
line 31: "[mmc0_cmd]" unused input active-high
gpiochip3 - 32 lines:
line 0: "[mii col]" unused input active-high
line 1: "[mii crs]" unused input active-high
line 2: "[mii rx err]" unused input active-high
line 3: "[mii tx en]" unused input active-high
line 4: "[mii rx dv]" unused input active-high
line 5: "[i2c0 sda]" unused input active-high
line 6: "[i2c0 scl]" unused input active-high
line 7: "[jtag emu0]" unused input active-high
line 8: "[jtag emu1]" unused input active-high
line 9: "[mii tx clk]" unused input active-high
line 10: "[mii rx clk]" unused input active-high
line 11: "NC" unused input active-high
line 12: "NC" unused input active-high
line 13: "[usb vbus en]" unused input active-high
line 14: "P9_31 [spi1_sclk]" "P9_31" input active-high [used]
line 15: "P9_29 [spi1_d0]" "P9_29" input active-high [used]
line 16: "P9_30 [spi1_d1]" "P9_30" input active-high [used]
line 17: "P9_28 [spi1_cs0]" "P9_28" input active-high [used]
line 18: "P9_42B [ecappwm0]" "P9_92" input active-high [used]
line 19: "P9_27" "P9_27" input active-high [used]
line 20: "P9_41A" "P9_91" input active-high [used]
line 21: "P9_25" "P9_25" input active-high [used]
line 22: "NC" unused input active-high
line 23: "NC" unused input active-high
line 24: "NC" unused input active-high
line 25: "NC" unused input active-high
line 26: "NC" unused input active-high
line 27: "NC" unused input active-high
line 28: "NC" unused input active-high
line 29: "NC" unused input active-high
line 30: "NC" unused input active-high
line 31: "NC" unused input active-high
debian@BeagleBone:~$ config-pin -q P8_12
Current mode for P8_12 is: default
debian@BeagleBone:~$ config-pin -l P8_12
Available modes for P8_12 are: default gpio gpio_pu gpio_pd eqep pruout
debian@BeagleBone:~$
gpiochip1 の line 12 を見ると
"P8_12" unused output active-high
とあるからたぶんこれ。
P8_12はP8拡張コネクタの12番PINって事らしい。ChatGPTさん曰く「凄く親切だぁ」だそうなので、他の機器ではこうはいかないかも。
このP8_12をGPIOで使えるようにする。
debian@BeagleBone:~$ sudo config-pin P8_12 gpio [sudo] debian のパスワード: Current mode for P8_12 is: gpio debian@BeagleBone:~$ sudo config-pin -q P8_12 Current mode for P8_12 is: gpio debian@BeagleBone:~$
とりあえずgpioのコマンドで試すからシェルスクリプトを書いた。
debian@BeagleBone:~$ cat LChika.sh
#!/bin/sh
while true
do
sudo gpioset --mode=time --sec=1 gpiochip1 12=1
sudo gpioset --mode=time --sec=1 gpiochip1 12=0
done
debian@BeagleBone:~$
gpiosetコマンドで指定のPINに電圧をかけるか否かを決められる。
オプションの –mode=time –sec=1 は設定した状態を1秒維持してから終了しろの意。gpiosetコマンドが終了するとPINへの出力も終わるようなのでこれは必須。
どうせなのでPythonでも書いてみる。
- LChika.py
import gpiod import time chip = gpiod.Chip("gpiochip1") line = chip.get_line(12) line.request( consumer="LChika", type=gpiod.LINE_REQ_DIR_OUT, default_vals=[0] ) while True : line.set_value(1) time.sleep(1) line.set_value(0) time.sleep(1)
結果
こんな感じ

