I2C(Wire)
I2Cはたった2本の結線で最大112ノードが通信できるシリアルバスです.マイコン同士の通信やセンサーからの情報の読み出しに広く利用されます.通信は必ずマスターから開始され,指定されたスレーブのみが返信できる1対nのバスです.ArduinではI2CをWireライブラリから扱うことができます.
I2Cマスター
自分がI2Cのマスターになり,スレーブのセンサーやマイコンと通信を行います.
必ず使用前にWire.begin()
を1回だけ実行して初期化を忘れないでください.
一方的な書き込み
マスターからスレーブへ一方的に書き込みます.書き込みたいデータ量に合わせてwrite
メソッドの呼び出し回数を増減してください.
byte address = 0x48;
Wire.beginTransmission(address);
Wire.write(0xAA);
Wire.write(0xBB);
Wire.endTransmission();
一方的な読み込み
スレーブから一方的にデータを読み込みます.読み込みたいバイト数を最初にスレーブへ送信します.その後,スレーブからデータが送信されますのでWire.read()
で受け取ります.
byte address = 0x48;
Wire.requestFrom(address, 2); // request 2byte
while(Wire.available()) {
byte val = Wire.read();
}
書き込んでから読み込み
マスターからデータを書き込んでから読み込みます.レジスタ番号を指定して読み込む場合などに使われます.
byte address = 0x48;
Wire.beginTransmission(address);
Wire.write(0xAA);
Wire.endTransmission(false);
Wire.requestFrom(address, 1, true);
byte val = Wire.read();
もっと詳しい情報
もっとわかりやすく書いてある記事