Arduino - LCD1602 - I2C

i2c-digram


Le bus I2C permet aux périphériques ou aux composants équipés de l'interface I2C de communiquer entre eux avec 4 fils

  • Signal de donnée : SDA
  • Signal d’horloge : SCL
  • Signal  d'alimentation : +Vcc
  • Signal de masse : Gnd


  • L'Arduino possède un bus I2C Maitre
  • L'afficheur LCD 1602 I2C possède un bus I2C Esclave


Arduino - Pinout

arduino-i2c


Les broches I2C de l'Arduino Uno sont en

  • Broche 18 - A4 - SDA
  • Broche 19 - A5 - SCL

.

Si vous regardez le pinout de l'Arduino Uno, vous remarquerez qu'il y a 2 broches identifiés SDA et 2 broches identifiés SCL (Voir image ci-jointe).

Mais si vous regardez bien les broches

  • 18 - A4 - SDA
  • 19 - A5 - SCL

en  bas/gauche  sont doublées en  haut/droite .



Présentation de l'interface I2C du LCD 1602

ic2-repere


L'interface I2C du LCD 1602 possède d'un coté 4 broches

  • Gnd - La masse
  • Vcc - Le +5v
  • SDA - Le bit de donnée SDA
  • SCL - Le bit d'horloge SCL


et de l'autre coté 2 broches qui correspondent au rétro-éclairage


Sur le dessus de la carte I2C,  vous trouverez

  • 1 potentiometre pour le réglage du constraste
  • 3 cavaliers à souder A0, A1 et A2 pour l'adresse de l'interface I2C 


 De base les LCD 1602 - I2C sont configurés en 0x3f ou 0x27 suivant le type du composant (Voir tableau ci-dessous) 

Adresse de l'interface I2C

i2c-adresse



L'interface I2C est un composant électronique du type  PCF8574AT  ou  PCF8574T qui possède son adresse.


Vous pouvez modifier l'adresse suivant vos besoins, en soudant un cavalier aux emplacements A0, A1 et A2 suivant le tableau ci-contre


PCF8574AT PCF8574T Cavaliers Cavaliers Cavaliers 
Adresse I2CAdresse I2CA0 A1 A2
0x3f 0x27
0x3e 0x26 cavalier
0x3d 0x25 cavalier
0x3c 0x24 cavaliercavalier
0x3b 0x23 cavalier
0x3a 0x22 cavaliercavalier
0x39 0x21 cavaliercavalier
0x38 0x20 cavaliercavaliercavalier

Connexion du LCD 1602 - I2C a l'Arduino Uno

arduino-lcd-i2c-cablage


Relier l'afficheur LCD 1602 - I2C à l'Arduino Uno


Lcd 1602 I2C  ---> Arduino Uno

  • Vcc à la broche +5v   # +5v
  • Gnd à la broche Gnd   # Masse
  • SDA à la broche A4   # Bus Données
  • SCL à la broche A5   # Bus Horloge


Détection de l'adresse du lCD1602 I2C

  • scanner-i2c-code
  • scanner-i2c-moniteur-serie


Pour détecter l'adresse du LCD1602 - I2C, nous utilisons un code disponible sur le site Arduino 

Puis nous le téléverserons dans l'Arduino ...

Le Moniteur Série affichera l'adresse I2C du LCD1602 - I2C


Le code


// --------------------------------------
// i2c_scanner
//

#include <Wire.h>


void setup()
{
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C 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
}



Installation de la Bibliothèque LiquidCrystal - I2C

  • bibliotheque-inclure
  • liquidcrystal_i2c_frank2brabander


Nous installons la bibliothéque LiquidCrystal I2C de Frank de Brabander

Dans l'Arduino IDE, cliquer sur

  • Croquis
  • Inclure une bibliothèque
  • Gérer les bibliothéques [Ctrl]+[Maj]+[i]


Dans la fenêtre "Gestionnaire de bibliothèques"

Rechercher "LiquidCrystal I2c" de Frank de Brabander

Une fois trouver, cliquer sur [Installer]



Code LiquidCrystal I2C - Hello World

  • hello_world
  • hello_world_code
  • arduino-i2c-blog-claude


Nous utiliserons le code "Hello World" de Frank de Brabander

  • Fichier / Exemples / LiquidCrystal I2c / Hello World


Une fois chargé dans l'Arduino IDE, il faut modifier quelques lignes, car le code initial est prévu pour un afficheur20 colonnes et 4 lignes

 Les lignes modifiées ou supprimées sont surlignées en vert 


Le code


//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


// LCD address = 0x27
// 16 = Nbre Colonnes
// 2 = Nbre Lignes
LiquidCrystal_I2C lcd(0x27,16,2);  // Remplacer le 20 , 4 par 16 , 2


void setup()
{
  lcd.init();  // initialize the lcd 
  
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(1,0);  // Colonne 1 Ligne 0  // Laisser uniquement les lignes 0 et 1
  lcd.print("Le Blog");
  lcd.setCursor(6,1);  // Colonne 6 Ligne 1  // Supprimer les lignes 2 et 3
  lcd.print("de Claude");
}

void loop()
{
}