Intel Edisonで大量のサーボを動かすPCA9685を使う話

概要

I2Cを使って,1つのチップで16個のサーボを動かすことのできるサーボドライバを使う話.
使うのは,Adafruitのモジュール Arduino用のライブラリはあるんだけど,微妙に修正が必要.
このブログではこれまでEdisonならではのIoTという文脈で試してきましたが,ここではお手軽なArduinoIDEを使ってみます.
Pythonで使う方法は,公式でRaspberryPi用の説明があるみたいですけど,このままで動くのかな?どうなんでしょう.

Arduino用ライブラリの導入

Arduino用のライブラリはgithubにあります.
これを落としてきて,Galileo, Edison用のArduinoIDE向けのライブラリディレクトリへ配置します.Macの場合は以下.

/Applications/Arduino\ edison.app/Contents/Resources/Java/libraries

ライブラリの修正

以下のディレクトリにあるcppファイルを修正します.

/Adafruit_PWMServoDriver/Adafruit_PWMServoDriver.cpp

Adafruit_PWMServoDriver.cpp中で以下のようになっている箇所があります.

#if defined(__AVR__)
 #define WIRE Wire
#elif defined(CORE_TEENSY) // Teensy boards
 #define WIRE Wire
#else // Arduino Due
 #define WIRE Wire1
#endif

ここの部分を全部コメントして,以下の1文のみにします.

#define WIRE Wire

これで,問題なく動作するようになります.

配線,プログラム

これについては通常のArduinoと変わらないので,Adafruit公式のチュートリアルや,サンプルプログラムを参照してください.