Raspberry Pi 4 Model B / gobot のLチカに謎に手間取ったので備忘録
タイトル通り。アホほど手間取った。
敗因を列挙してみる。
1. まずピン番号がわからなかった。
PINの番号に対して、GPIOのナンバーが割り振られているので、コードに起こす際に「あれ、これどっちの番号使えば良いんだ?」となった。最後まで総当たりで頑張った。気合すぎるだろ
2. 配線周りの知見がなさ過ぎた。
「あれ、LEDってこれどっちがプラスなんだっけ?」とか、「抵抗...?」みたいになっていちいち調べないと本当にわからなかった。プルアップ?プルダウン?おれにはプルタブしかわからないよ...
3. gobotがなかなか扱えなかった
というかサンプルコードがめっちゃ古くて全然動かなかった。
日本語文献で転がっているコードは大半がv1だったのでそれが原因かもしれない...?
v2にした瞬間キビキビ動くようになった。
4. トラブルシュートのために別の方法でGPIOにアクセスする手段を探し始めて沼った
めっちゃyak-shavingみを感じた。raspi-gpio とか入れてみたりしたけど結局根本的な原因特定にはいたらなかったので、いったん置いといた。
あとgpio readall
コマンドがdeprecatedになったらしく、色々転がっている文献やサンプルコード通りの検証が出来ず苦労した。
成果コードは以下。
package main
import (
"fmt"
"time"
"gobot.io/x/gobot/v2"
"gobot.io/x/gobot/v2/drivers/gpio"
"gobot.io/x/gobot/v2/platforms/raspi"
)
func main() {
r := raspi.NewAdaptor()
led := gpio.NewLedDriver(r, "7")
work := func() {
gobot.Every(1*time.Second, func() {
if err := led.Toggle(); err != nil {
fmt.Println(err)
}
})
}
robot := gobot.NewRobot("blinkBot",
[]gobot.Connection{r},
[]gobot.Device{led},
work,
)
if err := robot.Start(); err != nil {
panic(err)
}
}
ちなみに、コード中で指定している"7"
は、GPIOの番号ではなくピン番号でOKっぽい。
上記のコードだと、この画像のGPIO4(=7番ピン)に接続したLEDが対象になる。
(つまりGPIO自体の番号は気にしなくても良いのか)
引用: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#gpio-and-the-40-pin-header
終わり。開発に戻る。
明日はInterBEE最終日なので、既に前日の18時だが今からちょっとしたvMixのタリーライトでも作って早めに寝ようと思う。
RDeckのレポジトリを作成した。