基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
Ethernet
Ethernetサーバー
Ethernetクライアント
サーボモーター
ステッピングモーター
キャラクタ液晶表示
EEPROM
SPI通信
I2C通信(Wire)
メモリカード
メモリカード(File操作)
周期処理(MsTimer2)
時計(RTC)
ユーティリティ
I2C通信(Wire)
2線による通信を行うためのI2C通信ライブラリです。Wireと呼ばれることもあります。通信ラインにはプルアップ抵抗をつけてください。 チャネルは合計9本使用可能です。スレーブはWire8のみ使用できます。対応するチャネルとピン番号は以下の通りで、ピンマップでも確認できます。
使用する場合は、#include <Wire.h>
を記述してください。
Wire : A5(SCL), A4(SDA)
Wire1: 0(SCL), 1(SDA)
Wire2: 7(SCL), 6(SDA)
Wire3: 26(SCL), 24(SDA)
Wire4: 5(SCL), 3(SDA)
Wire5: 8(SCL), 9(SDA)
Wire6: 11(SCL), 12(SDA)
Wire7: 60(SCL), 58(SDA)
Wire8: 30(SCL), 31(SDA)
begin
- 概要
- 初期化します。
- 文法
- Wire.begin(address)
- パラメータ
- address: スレーブとして動作するときに7ビットのアドレスを指定します。マスター動作時は不要です。
- 戻り値
- なし
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: 成功
1: 送信バッファ溢れ
2: アドレス送信時にNACKを受信
3: データ送信時にNACKを受信
4: その他エラー
write
- 概要
- 送信バッファの末尾に文字列や、データを追加する。
- 文法
- Wire.write(value)
Wire.write(string)
Wire.write(data, length) - パラメータ
- value: 1バイトのデータ
string: 1バイトの文字列
data: 配列データ
length: 送るバイト数 - 戻り値
- 送信したバイト数。
available
- 概要
- 受信バッファ内にあるデータ数を調べる
- 文法
- Wire.available()
- パラメータ
- なし
- 戻り値
- データ数(バイト単位)
read
- 概要
- 受信バッファからデータを1バイト取り出す
- 文法
- Wire.read()
- パラメータ
- なし
- 戻り値
- 次に受信したデータ。
onReceive
- 概要
- スレーブとして動作時に、マスターからデータを受信したときにコールする関数を登録します。
- 文法
- Wire.onReceive(handler)
- パラメータ
- handler: スレーブ受信でコールする関数名。この関数は受信データ数をint型の引数として、戻り値なしの関数にしてください。例:void myHandler(int numBytes)
- 戻り値
- なし
- 補足
- スレーブはWire8のみサポートしています。
onRequest
- 概要
- スレーブとして動作時に、マスターから送信要求を受けたときにコールする関数を登録します。
- 文法
- Wire.onRequest(handler)
- パラメータ
- handler: スレーブ送信要求でコールする関数名。この関数は引数なし、戻り値なしの関数にしてください。例:void myHandler()
- 戻り値
- なし
- 補足
- スレーブはWire8のみサポートしています。
サンプルプログラム
アドレス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);
}
アドレス0x40のスレーブとして動作し、マスターから送信要求を受けたときにhello を返す。
#include <Arduino.h>
#include <Wire.h>
void requestEvent();
void setup() {
Wire8.begin(0x40); // join i2c bus with address #0x40
Wire8.onRequest(requestEvent); // register event
}
void loop() {
delay(100);
}
// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
Wire8.write("hello "); // respond with message of 6 bytes
// as expected by master
}