このライブラリを使うとI2C/TWIデバイスと通信することができる。R3レイアウト(1.0ピンアウト)のArduinoボードでは、SDA(データライン)とSCL(クロックライン)はAREFピンの近くのピンヘッダにある。Arduino Dueでは、2つのI2C/TWIインターフェイスがあり、SDA1とSCL1がAREFピンの近くにあり、もう一方は20番ピンと21番ピンである。
以下に様々なArduinoボードで、TWIピンがどこにあるかを示す。
ボード | I2C/TWIピン |
---|---|
Uno, Ethernet | A4 (SDA), A5 (SCL) |
Mega2560 | 20 (SDA), 21 (SCL) |
Leonardo | 2 (SDA), 3 (SCL) |
Arduino 1.0からは、このライブラリはStreamクラスを継承していて、他のread/writeライブラリとの整合性をとっている。このため、send()とreceive()は、write()とread()に変更された。
Wireライブラリの最近のバージョンでは、バス上の問題を避けるために、タイムアウトを使うことができる。しかし現行バージョンでは、デフォルトでは有効になっていない。Wireライブラリを使うときは、これらのタイムアウトを常に有効にすることが推奨されている。詳細は、Wire.setWireTimeout()を参照。
注意
I2Cアドレスには7ビットのものと8ビットのものとがある。7ビットはデバイスを指定し、8ビット目は書き込みか読み出しかを決定する。Wireライブラリは7ビットアドレスだけを利用する。8ビットアドレスを使うデータシートやサンプルコードがある場合は、最下位ビットを落とし(値を1ビット右にシフトする)、アドレスを0から127の間にする必要がある。しかし、0から7のアドレスは予約されているため使われないので、利用できる最初のアドレスは8である。
SDA/SCLピンに接続する際は、プルアップ抵抗が必要であることに注意が必要である。詳細は、使用例を参照すること。MEGA2560ボードは、20番ピンと21番ピンにプルアップ抵抗が内蔵されている。
Wireライブラリの実装は、32バイトのバッファを利用する。このため、通信はその中で行う必要がある。1回の通信で上限を超えた場合は、データは捨てられる。
このライブラリを使うためには、以下を宣言する。
#include <Wire.h>
参照
オリジナルのページ
https://www.arduino.cc/reference/en/language/functions/communication/wire/
Last Revision: 2022/06/21