Raspberry PiにArduinoを接続してArduioのD13のLEDをGoでLチカします。

  1. 概要
    Arduino UNOをStandardFirmataを動かしRaspberry Piに接続します。Raspberry PiではGo言語でFirmataプロトコルでArduino UNOのD13-LEDを点滅させるプログラムを書き実行します。
    先行事例:https://github.com/hybridgroup/gobot/tree/master/platforms/firmataをトレースします。
  2.  Arduinioの準備
    1. StandardFirmataを書き込む。
      Arduino IDEを動かしているパソコン(or Raspberry Pi)にArduino UNOを接続しStandardFirmataスケッチを書き込みます。
    2. StandardFirmataを書き込んだArduino UNOをRaspberry Piに接続します。
    3. 念のためにユーザpiをシリアルポートを利用できるグループdialoutに登録します。
      $ sudo usermod -a -G dialout pi
  3. Arduinoパッケージのインストール
    $ go get -d -u gobot.io/x/gobot/... && go install gobot.io/x/gobot/platforms/firmata
  4. ソース・ファイルarduino_blink.goを作成します。
    package main
    
    import (
    	"time"
    
    	"gobot.io/x/gobot"
    	"gobot.io/x/gobot/drivers/gpio"
    	"gobot.io/x/gobot/platforms/firmata"
    )
    
    func main() {
    	firmataAdaptor := firmata.NewAdaptor("/dev/ttyACM0")
    	led := gpio.NewLedDriver(firmataAdaptor, "13")
    
    	work := func() {
    		gobot.Every(1*time.Second, func() {
    			led.Toggle()
    		})
    	}
    
    	robot := gobot.NewRobot("bot",
    		[]gobot.Connection{firmataAdaptor},
    		[]gobot.Device{led},
    		work,
    	)
    
    	robot.Start()
    }
  5. 実行
     $ go run arduino_blink.go
  6. 参考
    Raspberry Piに接続したArduinoなどにスケッチのHEXファイルのアップロードなどを行うユーティリティ gort のインストール

    $ wget https://s3.amazonaws.com/gort-io/0.8.1/gort_0.8.1_armhf.deb
    
    $ sudo dpkg -i gort_0.8.1_armhf.deb
    
    $ gort --help
    

    シリアルポートの様子を見る

    gort scan serial
    
    1 serial port(s) found.
    
    1. [/dev/ttyACM0] - [usb-Arduino__www.arduino.cc__0043_6413138333135141F0D0-if00]
       USB device:  Bus 001 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

    アンインストール

     $ sudo dpkg -r gort