Raspberry PIに赤外線センサーを繋いで、センサーからの入力をGoで受け取る

Laravelの記事が書きかけなのですが、気分転換に触ったRaspberry PIが楽しかったのでメモ。

参考にした記事

qiita.com

この記事を読んで全く同じセンサーを秋月電子通商で買いました。配線やPythonのコードもそのまま動いて、実にありがたいものです。

Goでやってみる

Pythonで動くのはわかったのですが、せっかくなのでGoでも書いてみました。

先ほどの記事でGPIOの扱いかたも少しわかったので、ライブラリーとかなくてもなんとかなるかと思っていましたが、想像通り使えそうなライブラリーがありました。

github.com

サンプルコードを読みつつ、結果として以下のようなコードで参考にしたPythonのコードをほぼ同じようなことができました。

package main

import (
    "fmt"
    "os"
    "time"

    rpio "github.com/stianeikeland/go-rpio"
)

func main() {
    if err := rpio.Open(); err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    defer rpio.Close()

    pin := rpio.Pin(18)
    pin.Input()

    for {
        fmt.Println(pin.Read())
        time.Sleep(1000 * time.Millisecond)
    }
}

Raspberry PIならPythonで書いておけばまず間違いないとは思うのですが、Goで書ければgo getでデバイスに撒いたりできそうですね。

余談

実は一度配線を間違えてしまい、センサーあたりからちょっとやばそうな臭いがして、Raspberry PIが強制終了したことがありました。

ハードウェアをあつかうということは、当然ながらこういうことも起こりうるのだなと実感するいい機会ではありましたが、みなさまも安全には十分注意してRaspberry PIを楽しみましょう。