Wireライブラリの各ファンクション

 I2Cとも呼ばれる2線式シリアル通信のためのライブラリです。Arduinoのマイコン・ボードのSDA(データ・ライン)とSCL(クロック・ライン)のバス・ラインに複数のデバイス(スレーブ)を接続し、マスタの制御のもとにマスタとスレーブとの間で通信を行います。
 I2Cアドレスには7ビットと8ビットのバージョンがあります。1バイトのコマンドのD7~D1の7ビットのアドレス・ビットでデバイスを特定し、D0の1ビットで書き込み(0)か読み出し(1)かを指定します。Wireライブラリは常に7ビットのアドレスを使用します。


 以下に示す具体的な処理を行う関数が用意されています。これらの関数は、次に示すようにWire.を前に置いて記述します。Wire.begin(); //Wireに続くbegin()の部分は指定する処理に応じて変わります。

Wire.begin(address)

マスタ
 Wireライブラリの関数を使用するための初期化を行います。begin()でアドレスを指定していないときには、Arduinoをマスタとして初期化されます。

使用例    Wire.begin();

スレーブ
Wire.begin(address);
 【パラメータ】
 address : スレーブ・アドレス ArduinoはI2Cのスレーブになる


 Wireライブラリをaddressで示されたI2Cのスレーブとして初期化します。以後各処理はスレーブとして動作します。Wireで使用されるアドレスは7ビットの0~127の値となります。

使用例    Wire.begin(address);


【戻り値】
     なし

Wire.requestFrom(address, quantity,[stop])


【パラメータ】
 address : データを要求するスレーブ・デバイスのアドレスを指定
 quantity:スレーブに要求したデータのバイト数
 stop : 通常省略します。I2Cバスに複数のマスタがある時バスの開放、処理が終わるまでの占有の制御を行います。stopがtrueの時は送信要求を出した後stopメッセージを出してバスを解放します。falseの場合は送信要求を出した後リスタート・メッセージを送出しバスを占有し続けます。
【戻り値】
  スレーブから受信したバイト数

 この関数を実行しスレーブに対してデータを要求します。その後Wire.available()で受信データの有無を確認し、Wire.receive()でデータを読み取ります。

Wire.available()


【パラメータ】
  なし
【戻り値】
  読み取りできるバイト数

 相手先からの受信データの有無を確認します。戻り値は受信し読み出すことができるデータのバイト数となります。この関数はbyte型の関数となります。この関数の戻り値は読み取り可能な受信データの数となります。

Wire.read()


【パラメータ】
  なし
【戻り値】
  バッファ中の受信データ


 Wire通信のマスタがスレーブに対してWire.requestFrom();でマスタへのデータ送信要求に対応して、スレーブから送られてきたデータをバイト単位で読み出します。

Wire.beginTransmission(address)


【パラメータ】
 マスタがデータを送信するスレーブのアドレス
【戻り値】
 なし

 アドレスで示す値をもったスレーブに、マスタからデータを送信することを示し、スレーブにマスタからのデータを受信する準備を行わせます。このあと必要な数のデータをWire.write(data)で送信を繰り返します。送信が終わったらWire.endTransmission()でマスタからスレーブへの送信処理を終わります。

Wire.write(data)


【パラメータ】
 パラメータの次の3種類のデータが指定できます
 value : バイトデータを設定します。  Wire.write(value)
 string : 文字列を設定します      Wire.write(string)
 data、length : バイトの配列データのdataとその配列の長さlengthを指定します
                     Wire.write(data,length)
【戻り値】
 送信したバイト数がバイト型の値として得られます。

 beginTransmission()関数で指定されたスレーブに対して、dataで示されるデータを送信します。dataはbyte型のデータ、文字列、バイトの配列の場合があります。dataがbyte型の配列の場合は、Wire.send(data,n)で示すようにbyte型の変数とnで送信するデータの数を指定します。

Wire.endTransmission()


【パラメータ】
  なし
【戻り値】
0 成功               1 データがバッファ長を超えている
2 アドレス送信に対し応答がない   3 データ送信に対し応答がない
4 その他のエラーが発生

 beginTransmission()で指定したスレーブに対して、sendで用意したデータを実際にスレーブに送出してスレーブへの送信処理を完了します。戻り値として0の場合正常に送信が完了したことを示し、それ以外はエラーが発生したことを示しエラーの内容は上記のようにコードで示されます。


(2016/6/6 V1.0)

神崎康宏