//*******************************************************//
// //
// Programme pour lister les adresses I2C //
// //
// UAICF Nevers-Vauzelles //
// http://www.modelisme58.fr //
// //
// Janvier 2026 - Vers 1.1 //
// //
//*******************************************************//
#include <Wire.h>
#include <LiquidCrystal.h>
const char rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//**********************************************************************
void setup()
{
delay (1500);
Wire.begin();
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("Scanner I2C...");
lcd.setCursor(0, 1);
lcd.print("Adresses en HEX");
Serial.println(F("******************************************"));
Serial.println(F(" UAICF Nevers-Vauzelles"));
Serial.println(F(" http://www.modelisme58.fr\n"));
Serial.println(F("Scanner Adresses I2C avec ecran LCD 16x2\n"));
Serial.print (F("******************************************"));
Serial.println(F("\n Liste les adresses de 1 -> 127"));
Serial.println(F(" Affichage en Hexadecimal"));
lcd.blink();
delay (1000);
}
//**********************************************************************
void loop()
{
delay (4000);
Serial.println();
lcd.clear();
byte Adresse;
byte Resultat;
byte Nb_Trouve = 0;
for (Adresse = 1; Adresse < 128; Adresse++)
{
Wire.beginTransmission(Adresse);
Resultat = Wire.endTransmission();
// 0 : succès (peripherique OK)
// 1 : donnée trop longue pour le buffer d'émission (erreur)
// 2 : NACK reçu sur l'adresse de transmission (pas de peripherique)
// 3 : NACK reçu sur la transmission de donnée (pas de peripherique)
// 4 : autre erreur (erreur donc...)
if (Resultat == 0)
{
if (Adresse < 16)
{
Serial.print(F("0x0"));
lcd.print("0x0");
} else {
Nb_Trouve++;
Serial.print(F("0x"));
Serial.print(Adresse, HEX);
Serial.print(F(" "));
lcd.print("0x");
lcd.print(Adresse, HEX);
lcd.print(" ");
}
}
if (Resultat == 4 || Resultat == 1)
{
Nb_Trouve++;
Serial.print(F("#### "));
lcd.print("#### ");
}
delay(25); // Temps d'attente pour ne pas generer d'erreur de lecture
if (Nb_Trouve == 3)
{
lcd.setCursor(0, 1);
Serial.print(F(" - "));
}
}
if (Nb_Trouve == 0)
{
lcd.setCursor(5, 0);
lcd.print("AUCUN");
lcd.setCursor(2, 1);
lcd.print("objet I2C !!!");
Serial.print(F("Aucun peripherique I2C connecte ou reconnu !"));
}
}Ecran de contrôle
Module dont on trouver l'adresse i2C
Interrupteur pour simuler la déconnexion du module i2C
Principe du Scanner d'adresses i2C