I2Cライター

諸事情で使うことになったArduino、多忙でなかなかいじれなかったのだが、ようやくI2Cライターを作ることができた。
といってもライブラリーがあり、なんというか、あっけなく終わった。
こんな感じだ。


#include

int i2cAddress = (ここでスレーブデバイスのアドレスを指定);

void writeI2C(byte* arrayWriteData, int sizeWrite)
{
Wire.beginTransmission(i2cAddress);
Wire.write(arrayWriteData, sizeWrite);
Wire.endTransmission();
}

void setup()
{
Wire.begin();
delay(1000);
}

void loop()
{
byte testData[] = {0x00, 0x01, 0x02, 0x03};
writeI2C(testData, sizeof(testData);
}

上記の Wire.endTransmissionが実行されたときに、実際にはI2Cへのアクセスが起こる。
なので、ひたすらWire.writeを繰り返しても、書き込まれないので注意。
I2Cにたくさんデータを書く必要がある場合には、このbyte宣言とwriteI2Cをひたすら繰り返せばよい。


I2Cは汎用でよく使われるバスである。
スレイブのアドレスの方法は決まっているが、ペイロード内のフォーマットは、例えばスレイブデバイス内のレジスタアドレスやデータフォーマット、ペイロードのサイズなど、各デバイス依存だ。
なのでArduinoのライブラリーでもスレイブのアドレス指定はあるが、ペイロードはbyte配列で自由に規定できる。
あとはsizeofでbyte配列の大きさを与えれば良いのだ。

Arduino Uno Rev3

Arduino Uno Rev3