メインコンテンツに移動

I2C通信(Wire)

I2C通信(Wire)

2線による通信を行うためのI2C通信ライブラリです。Wireと呼ばれることもあります。通信ラインにはプルアップ抵抗をつけてください。 使用可能なチャネルとピン番号は以下の通りで、ピンマップでも確認できます。スレーブデバイスには対応していません。

使用する場合は、#include <Wire.h>を記述してください。

Wire : 20(SCL), 21(SDA)

begin

概要
初期化します。
文法
Wire.begin()
パラメータ
なし (スレーブデバイスには対応していません)
戻り値
なし

requestFrom

概要
相手先に対して受信シーケンスを発行し、データを読み出す。
文法
Wire.requestFrom(address, quantity)
Wire.requestFrom(address, quantity, stop)
パラメータ
address: データ要求をするデバイスの7ビットアドレス
quantity: 要求するバイト数
stop : boolean。trueは要求後、バス要求までメッセージを停止。falseは通信を継続して、送信を継続。
戻り値
スレーブデバイスから受信したバイト数。

beginTransmission

概要
該当アドレスのスレーブに対して通信を開始する。送るデータはwrite()でキューに入れ、endTransmission()でスレーブに送る。
文法
Wire.beginTransmission(address)
パラメータ
address: 7ビットのアドレス。
戻り値
なし

endTransmission

概要
beginTransmission()で開始したスレーブデバイスに、write()で入れたキューのデータを送り、通信を完了する。
文法
unsigned char Wire.endTransmission()
パラメータ
なし
戻り値
0

write

概要
送信バッファの末尾に文字列や、データを追加する。
文法
Wire.write(value)
Wire.write(string)
Wire.write(data, length)
パラメータ
value: 1バイトのデータ
string: 1バイトの文字列
data: 配列データ
length: 送るバイト数
戻り値
送信したバイト数。

available

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

read

概要
受信バッファからデータを1バイト取り出す
文法
Wire.read()
パラメータ
なし
戻り値
次に受信したデータ。

setFrequency

概要
周波数を設定します。
文法
Wire.setFrequency(freq)
パラメータ
freq: frequency (<400000)
戻り値
なし

setSoftWire

概要
指定されたピンにソフトウェアWireを適用します。
文法
Wire.setSoftWire(int sda, int scl)
パラメータ
sda: SDAピン, scl: SCLピン
戻り値
なし

サンプルプログラム

アドレス0x40のスレーブデバイスから6バイトのデータを受信。


#include <Arduino.h>
#include <Wire.h>
void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}
 
void loop()
{
  Wire.requestFrom(0x40, 6);    // request 6 bytes from slave device #2
 
  while(Wire.available())    // slave may send less than requested
  { 
    char c = Wire.read();    // receive a byte as character
    Serial.print(c);         // print the character
  }
 
  delay(500);
}