Wire

このライブラリを使うとI2C/TWIデバイスと通信することができる。R3レイアウト(1.0ピンアウト)のArduinoボードでは、SDA(データライン)とSCL(クロックライン)はAREFピンの近くのピンヘッダにある。Arduino Dueでは、2つのI2C/TWIインターフェイスがあり、SDA1とSCL1がAREFピンの近くにあり、もう一方は20番ピンと21番ピンである。

以下に様々なArduinoボードで、TWIピンがどこにあるかを示す。

ボードI2C/TWIピン
Uno, EthernetA4 (SDA), A5 (SCL)
Mega256020 (SDA), 21 (SCL)
Leonardo2 (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> 
Wire
Wireライブラリを初期化し、I2Cバスにマスターあるいはスレーブとして参加する。
Wireライブラリを無効化する
マスターがスレーブデバイスにデータを要求するのに使われる。
指定したアドレスに対応するI2Cスレーブデバイスへの通信を開始する。
beginTransmission()によって開始したスレーブデバイスへの通信を終了し、write()によってキューイングされたデータを実際に送信する。
マスターデバイスからの要求に対応してスレーブデバイスからデータを送信する。もしくは、マスターデバイスからスレーブデバイスにデータを送信する際にデータをキューイングする。
read()で取得可能なデータ長を返却する。
requestFrom()を呼んだ後にスレーブデバイスからマスターデバイスに送信されるデータを受信する。
I2C通信のクロック周波数を変更する
スレーブデバイスがマスターデバイスから送信されたデータを受信したときに呼び出される関数を登録する。
マスターデバイスがスレーブデバイスからのデータを要求したときに呼び出される関数を登録する。
I2C通信をマスターモードで利用するときの、通信タイムアウトを設定する
I2C通信のタイムアウトフラグをクリアする。
I2C通信のタイムアウトが発生したのかを確認する。

参照

オリジナルのページ

https://www.arduino.cc/reference/en/language/functions/communication/wire/

Last Revision: 2022/06/21

inserted by FC2 system