I2C通信(Wireクラス)

2線による通信を行うためのI2C通信ライブラリです。Wireと呼ばれることもあります。

使用する場合は、#include <wire.h>を記述してください。COTTONボードではSCL(クロック)はピン7、SDA(データ)はピン8です。Arduino Pro Miniと異なります。

begin

概要
初期化します。
文法
Wire.begin()
Wire.begin(address)
パラメータ
なし
戻り値
なし

requestFrom

概要
相手先に対して受信シーケンスを発行し、データを読み出す。
文法
Wire.requestFrom(unsigned char address, int count)
パラメータ
address: 相手先のアドレス(7bit)。RD/WRを示すビットは含まず、0~0x7fを指定してください。
count: 読み出したいデータのバイト数。0~260を指定。
戻り値
受信したバイト数。相手先がNACKを返した場合は、countで指定した値に満たなくても終了する。

available

概要
受信バッファ内にあるデータ数を調べる
文法
Wire.available()
パラメータ
なし
戻り値
データ数(バイト単位)

read

概要
受信バッファからデータを1バイト取り出す
文法
int Wire.read()
パラメータ
なし
戻り値
データがある場合は0~255を返す。データがない場合は-1を返す。

beginTransmission

概要
相手先に対して送信を開始するための準備をする。
文法
Wire.beginTransmission(unsigned char address)
パラメータ
address: 相手先アドレス。RD/WRを示すビットは含まず、0~0x7fを指定してください。
戻り値
なし

write

概要
送信バッファの末尾に文字列や、データを追加する。
文法
int Wire.write(data)
パラメータ
data: 送信したい文字列、データ
戻り値
成功したら送信したバイト数を返す。送信バッファ(260バイト)に空き容量が無ければ失敗して0を返す。

endTransmission

概要
相手先に送信シーケンスを発行する。I2C通信はこの関数を実行して初めて行われる。
文法
unsigned char Wire.endTransmission()
パラメータ
なし
戻り値
0: 成功
1: 送信バッファ溢れ
2: アドレス送信時にNACKを受信
3: データ送信時にNACKを受信
4: その他エラー

onReceive

概要
マスターからデータを受信したときにコールする関数を登録する。
文法
Wire.onReceive(handler)
パラメータ
handler:マスターからデータを受信したときにコールする関数
戻り値
なし

onRequest

概要
マスターがデータを要求したときにコールする関数を登録する。
文法
Wire.onRequest(handler)
パラメータ
handler:マスターがデータを要求したときにコールする関数
戻り値
なし

サンプルプログラム

アドレス10のデバイスに0を送るサンプルです。


#include <Arduino.h>
#include <Wire.h>
 
byte val = 0;
 
void setup() {
  Wire.begin();
 
  Wire.beginTransmission(10); //send to address 10
  Wire.write(val);  // send 1byte to que
  Wire.endTransmission();
}
 
void loop() {}