Arduino - LCD1602 - I2C
Arduino - Pinout
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
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
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 I2C | Adresse I2C | A0 | A1 | A2 |
0x3f | 0x27 | |||
0x3e | 0x26 | cavalier | ||
0x3d | 0x25 | cavalier | ||
0x3c | 0x24 | cavalier | cavalier | |
0x3b | 0x23 | cavalier | ||
0x3a | 0x22 | cavalier | cavalier | |
0x39 | 0x21 | cavalier | cavalier | |
0x38 | 0x20 | cavalier | cavalier | cavalier |
Détection de l'adresse du lCD1602 I2C
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
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
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()
{
}