Arduino-Wire(I2C)ライブラリの使い方
当記事では、ArduinoのWire(I2C)ライブラリの使い方について詳しく解説します。
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、各種I2Cデバイスを動作させます。
なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。
Wire(I2C)ライブラリ
関数 | 引数 | 戻り値 | 説明 |
---|---|---|---|
void begin(int address) | int address:スレーブアドレス | なし | I2C初期化 |
requestFrom(int address, int quantity, int stop) | int address:I2Cデバイスのアドレス int quantity:データのbyte数 int stop:1に指定すると、データ送信後にSTOPメッセージを送信して接続終了 0に指定するとデータ送信後も接続保持 | 受信したbyte数 | 他のI2Cデバイスにデータ要求 |
void beginTransmission(int address) | int address:I2Cデバイスのアドレス | なし | I2Cスレーブにデータ送信開始 |
endTransmission(int stop) | int stop:1に指定すると、データ送信後にSTOPメッセージを送信して接続終了 0に指定するとデータ送信後も接続保持 | データ送信結果 | I2Cスレーブデバイスとのデータ送信完了 |
write(value) write(string) write(data, length) | value:1byteデータ string:文字列データ data:配列データ length:送信byte数 | 送信したbyte数 | I2Cスレーブデバイスにデータ送信 |
int available(void) | なし | 読み込み可能byte数 | 読み込み可能なbyte数を調べる |
int read(void) | なし | 受信byte数 | 受信したbyte数を調べる |
begin()/I2C初期化
- 関数:void begin(int address)
- 引数:int address⇒スレーブアドレス
- 戻り値:なし
begin()関数は、I2Cの初期化を行います。引数で何も指定しなければ、Arduinoボードをマスターとして動作します。また、Arduinoボードをスレーブとして使用する場合は引数にスレーブアドレスを指定します。
requestFrom()/他のI2Cデバイスにデータ要求
- 関数:requestFrom(int address, int quantity, int stop)
- 引数:int address⇒I2Cデバイスのアドレス
- :int quantity⇒データのbyte数
- :int stop⇒1に指定すると、データ送信後にSTOPメッセージを送信して接続終了/0に指定するとデータ送信後も接続保持
- 戻り値:受信したbyte数
requestFrom()関数は、引数にI2Cデバイスのアドレスとデータのbyte数を指定することで、I2Cデバイスに対してデータの要求をします。
beginTransmission()/I2Cスレーブにデータ送信開始
- 関数:void beginTransmission(int address)
- 引数:int address⇒I2Cデバイスのアドレス
- 戻り値:なし
beginTransmission()関数は、引数にI2Cスレーブデバイスのアドレスを指定してデータ送信の接続を開始します。
endTransmission()/I2Cスレーブデバイスとのデータ送信完了
- 関数:endTransmission(int stop)
- 引数:int stop⇒1に指定すると、データ送信後にSTOPメッセージを送信して接続終了/0に指定するとデータ送信後も接続保持
- 戻り値:データ送信結果
endTransmission()関数は、I2Cスレーブデバイスとのデータ送信が完了した時に使用します。
write()/I2Cスレーブデバイスにデータ送信
- 関数:write(value)/write(string)/write(data, length)
- 引数:value⇒1byteデータ
- :string⇒文字列データ
- :data⇒配列データ
- :length⇒送信byte数
- 戻り値:送信したbyte数
write()は、beginTransmission()関数でデータ送信の接続を開始した後、実際のデータと送信byte数を引数で指定してデータをI2Cデバイスにデータ送信します。
available()/読み込み可能なbyte数を調べる
- 関数:int available(void)
- 引数:なし
- 戻り値:読み込み可能byte数
available()関数は、受信済みデータで、read()関数の読み込んでいないbyte数を戻り値で返します。
read()/受信したbyte数を調べる
- 関数:int read(void)
- 引数:なし
- 戻り値:受信byte数
read()関数は、I2Cから受信したデータを戻り値で返します。
サンプルプログラム(サンプルスケッチ)
Wire(I2C)ライブラリを使って、モータードライバ、センサ、有機ELディスプレイといった実際の電子部品を動かすサンプルプログラムをご紹介します。
DCモータードライバ「DRV8830」
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、DCモータードライバ「DRV8830」を動作させます。
温度・湿度センサ「SHT31」
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、温度・湿度センサ「SHT31」を動作させます。
温湿度・気圧センサ「BME280」
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、温湿度・気圧センサ「BME280」を動作させます。
距離センサ「GP2Y0E03」
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、距離センサ「GP2Y0E03」を動作させます。
デジタルカラーセンサ「S11059-02DT」
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、デジタルカラーセンサ「S11059-02DT」を動作させます。
3軸加速度センサ「ADXL345」
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、3軸加速度センサ「ADXL345」を動作させます。
有機ELディスプレイ「SO1602AW」
ArduinoのI2C制御用ライブラリ「Wire」を使ったプログラムで、有機ELディスプレイ「SO1602AW」を動作させます。
おすすめのArduinoボードはどれ?
当記事『Arduino-Wire(I2C)ライブラリの使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。
やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。
電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。
また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。
このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。