概要
i2c通信とは、SDAとSCLの2つのピンだけで、複数のモジュールとの通信が可能なプロトコルになります。
Arduinoもi2c通信には対応していて手軽に使うことができますが、うまくi2c通信ができないこともあります。本記事では、そのような時にArduinoとモジュールとのi2cの接続状況を確認する方法について解説します。
Arduinoでi2cスキャン
こちらの記事に記載されているコードがおすすめです。
新しくArduinoのプロジェクトを作成後、下記コードで、現在繋がっているi2cのアドレスを一覧で見ることができます。(トップのコメントアウト部分がシンタックスエラーになっていたので除外しています。)
また、シリアルモニタにスキャン結果を表示するので、PCと繋がった状態での実行が前提となっています。
#include//include Wire.h library void setup() { Wire.begin(); // Wire communication begin Serial.begin(9600); // The baudrate of Serial monitor is set in 9600 while (!Serial); // Waiting for Serial Monitor Serial.println("\nI2C Scanner"); } void loop() { byte error, address; //variable for error and I2C address int nDevices; Serial.println("Scanning..."); nDevices = 0; for (address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); Serial.println(" !"); nDevices++; } else if (error == 4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for the next I2C scan }
Arduinoとモジュール同士をSCL/SDAピンで繋いだ状態で、こちらのコードをArduinoに書き込み実行をします。シリアルモニタで確認をすると、接続確認ができたモジュールのi2cアドレスを知ることができます。
これにより、該当のモジュールが正常にi2c通信ができる状態になっているかを確認することができます。