Somethings we are not sure what the address of a device is or we want to check if a devices works we can use a I2C
scanner. Every device connected to the I2C
bus has an address. This address is used to communicate with the device. An I2C
adress consists of 7 bits and can be between 0x08
and 0x77
. The I2C
scanner will scan all addresses and report back if a device is found on that address.
// SPDX-FileCopyrightText: 2023 Carter Nelson for Adafruit Industries
//
// SPDX-License-Identifier: MIT
// --------------------------------------
// i2c_scanner
//
// Modified from https://playground.arduino.cc/Main/I2cScanner/
// --------------------------------------
#include <Wire.h>
// Set I2C bus to use: Wire, Wire1, etc.
#define WIRE Wire
void setup () {
WIRE. begin ();
Serial. begin ( 9600 );
while ( ! Serial)
delay ( 10 );
Serial. println ( " \n I2C Scanner" );
}
void loop () {
byte error, 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 next scan
}