Arduinoのサンプルプログラム

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初期化

begin()/I2C初期化
  • 関数:void begin(int address)
  • 引数:int address⇒スレーブアドレス
  • 戻り値:なし

begin()関数は、I2Cの初期化を行います。引数で何も指定しなければ、Arduinoボードをマスターとして動作します。また、Arduinoボードをスレーブとして使用する場合は引数にスレーブアドレスを指定します。

requestFrom()/他のI2Cデバイスにデータ要求

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スレーブにデータ送信開始

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()/I2Cスレーブデバイスにデータ送信
  • 関数:write(value)/write(string)/write(data, length)
  • 引数:value⇒1byteデータ
  •   :string⇒文字列データ
  •   :data⇒配列データ
  •   :length⇒送信byte数
  • 戻り値:送信したbyte数

write()は、beginTransmission()関数でデータ送信の接続を開始した後、実際のデータと送信byte数を引数で指定してデータをI2Cデバイスにデータ送信します。

available()/読み込み可能なbyte数を調べる

available()/読み込み可能なbyte数を調べる
  • 関数:int available(void)
  • 引数:なし
  • 戻り値:読み込み可能byte数

available()関数は、受信済みデータで、read()関数の読み込んでいないbyte数を戻り値で返します。

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を実現したい方におすすめです。

テキストのコピーはできません。