I2C通信(Wireクラス)

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

使用する場合は、#include <wire.h>を記述してください。KURUMIボードでは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() {}