EdisonのGPIOを使ってセンサーなどを接続するのもいいけど、USB接続でArduinoを追加するのもいいと思う。間に給電機能付きUSBハブを挟めば電気的に分離できるので難しい回路を作ってEdisonにいきなり接続してショートして全損という事態も避けられる。
もちろん超コンパクトに作るならEdisonのGPIOからI2Cとかで直接やった方がいい。
USBホスト
Edison Breakout Board KitのJ16 USBコネクタは、USBホストケーブルを接続してその先にUSBデバイスを接続できる。Arduinoの他にもUSBハブ経由でkorgのUSB MIDIコントローラやMIDIキーボード、USBスピーカーも接続できた(lsusbにデバイス名は表示された)けど、alsaがデフォルトでは入っていないのでコントロールできなかった。
J21から給電する
普通は給電用に使うJ16をUSBホストケーブル用に使うには、別の口から給電する必要がある。J21に7〜15Vを入れればいい。J21の外側がGND、内側がVCCになっている。
Breakout Board Hardware Guideより
7〜15Vを用意するのが面倒くさいので、試しに5Vを入れてみたら問題なく動いた。
余っているUSBケーブルをむいて、赤白黒緑の4本の線を取り出すと赤が5V、黒が0Vになってるのでそれを使う。こういうケーブルを作っておくと持ち運びも便利だし、しょっちゅう役立つ。
念の為にテスターで調べるか、持っていなければいらないLEDに一瞬チョンとつけて光るか確かめた方がいい。
あと、裏面のJ22に面実装のDCジャックを追加して、ACアダプタから動かす事もできるらしい。
Arduino
手元にあったArduino Micro(Leonardoと同じATMega32U4内蔵のUSB機能を使用)とArduino UNO(FTDIのチップのUSB機能を使用)の両方とも、ドライバなしでEdisonの「/dev/ttyACM0」として認識された。EdisonからArduinoを動かす
Arduinoにプログラム書いてEdisonと通信させるのは面倒なのでFirmataを使う。去年作ったarduino-firmata npmとcoffeeで書く
ArduinoFirmata = require 'arduino-firmata'
arduino = new ArduinoFirmata().connect process.env.ARDUINO
arduino.on 'connect', ->
console.log "connect!"
led_stat = false
setInterval ->
arduino.digitalWrite 13, led_stat
led_stat = !led_stat
, 1000 # 1秒ごとに点滅
setInterval ->
console.log arduino.analogRead 0
, 500 # 0.5秒ごとにADC0読み取り
% ARDUINO=/dev/ttyACM0 coffee led_blink.coffee