Arduino - LCD I2C

Dans ce tutoriel Arduino LCD I2C, nous apprendrons à connecter un LCD I2C (afficheur à cristaux liquides) à une carte Arduino. Les LCD sont très populaires et largement utilisés dans les projets électroniques pour afficher des informations. Il existe de nombreux types de LCD. Ce tutoriel prend comme exemple le LCD 16x2 (16 colonnes et 2 lignes). Les autres LCD sont similaires.

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×LCD I2C
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos de l'écran LCD I2C 16x2

Dans le tutoriel précédent, nous avons appris à utiliser un écran LCD standard. Cependant, le câblage entre Arduino et l'écran LCD standard est compliqué. Par conséquent, le LCD I2C a été créé pour simplifier le câblage. En fait, le LCD I2C est composé d'un écran LCD standard, d'un module I2C et d'un potentiomètre.

Brochage

LCD I2C utilise l'interface I2C, donc il possède 4 broches :

  • Broche GND : doit être connectée à GND (0V).
  • Broche VCC : l'alimentation pour l'écran LCD, doit être connectée à VCC (5V).
  • Broche SDA : signal de données I2C
  • Broche SCL : signal d'horloge I2C
Schéma de brochage LCD I2C

Coordonnées LCD

LCD I2C 16x2 comprend 16 colonnes et 2 lignes. Les colonnes et les lignes sont indexées à partir de 0.

Coordonnées Arduino LCD I2C

Diagramme de câblage

Schéma de câblage Arduino LCD I2C

This image is created using Fritzing. Click to enlarge image

LCD I2C Arduino Uno, Nano Arduino Mega
Vin 5V 5V
GND GND GND
SDA A4 20
SCL A5 21

Comment programmer pour un LCD I2C

Grâce à la bibliothèque LiquidCrystal_I2C, utiliser un LCD est un jeu d'enfant.

  • Inclure la bibliothèque :
#include <LiquidCrystal_I2C.h> // Bibliothèque pour LCD
  • Déclarez un objet LiquidCrystal_I2C avec l'adresse I2C, le nombre de colonnes, le nombre de lignes :
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C 0x27, 16 colonnes et 2 lignes
  • Initialisez l'écran LCD.
lcd.init(); //initialiser l'ecran LCD lcd.backlight(); //allumer le rétroéclairage
  • Déplacez le curseur à la position souhaitée (indice_colonne, indice_ligne)
lcd.setCursor(column_index, row_index);
  • Imprimez un message sur l'écran LCD.
lcd.print("Hello World!");

Il y a encore bien d'autres choses que nous pouvons faire avec les écrans LCD (voir la partie Faire plus avec les LCD).

※ NOTE THAT:

L'adresse I2C de l'écran LCD peut varier selon les fabricants. Dans le code, nous avons utilisé 0x27 qui est spécifié par le fabricant DIYables.

Code Arduino

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C 0x27, 16 colonnes et 2 lignes void setup() { lcd.init(); // initialiser l'écran LCD lcd.backlight(); } void loop() { lcd.clear(); // effacer l'affichage lcd.setCursor(0, 0); // placer le curseur à (0, 0) lcd.print("Arduino"); // afficher le message à (0, 0) lcd.setCursor(2, 1); // placer le curseur à (2, 1) lcd.print("GetStarted.com"); // afficher le message à (2, 1) delay(2000); // afficher ce qui précède pendant deux secondes lcd.clear(); // effacer l'affichage lcd.setCursor(3, 0); // placer le curseur à (3, 0) lcd.print("DIYables"); // afficher le message à (3, 0) lcd.setCursor(0, 1); // placer le curseur à (0, 1) lcd.print("www.diyables.io"); // afficher le message à (0, 1) delay(2000); // afficher ce qui précède pendant deux secondes }

Étapes rapides

  • Naviguez vers l'icône Libraries sur la barre gauche de l'IDE Arduino.
  • Recherchez "LiquidCrystal I2C", puis trouvez la bibliothèque LiquidCrystal_I2C de Frank de Brabander
  • Cliquez sur le bouton Install pour installer la bibliothèque LiquidCrystal_I2C.
Bibliothèque LiquidCrystal I2C pour Arduino
  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload de l'IDE Arduino pour téléverser le code sur Arduino
  • Observez le résultat sur l'écran LCD
Afficher du texte sur un écran LCD avec Arduino
image source: diyables.io
  • Essayez de modifier le texte et la position

Vidéo

Faites plus avec les écrans LCD

Personnage sur mesure

La fonction lcd.print() ne prend en charge que les caractères ASCII. Si vous souhaitez afficher un caractère spécial ou un symbole (par exemple, un cœur, un oiseau en colère), vous devez utiliser le générateur de caractères ci-dessous.

LCD 16x2 peut afficher 32 caractères (2 lignes et 16 colonnes). Chaque caractère est composé de 40 pixels (8 lignes et 5 colonnes).

Écran LCD Arduino 16x2 pixels

Le générateur de caractères représente un caractère (40 pixels). Vous devez simplement suivre les étapes suivantes :

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C 0x27, 16 colonnes et 2 lignes byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // initialiser l'afficheur LCD lcd.backlight(); // activer le rétroéclairage lcd.createChar(0, customChar); // créer un nouveau caractère personnalisé lcd.setCursor(2, 0); // déplacer le curseur à (2, 0) lcd.write((byte)0); // afficher le caractère personnalisé à (2, 0) } void loop() { }

Résultat sur l'écran LCD :

Caractère personnalisé LCD

Plusieurs personnages personnalisés

Nous pouvons créer jusqu'à 8 caractères personnalisés (indexés de 0 à 7). L'exemple ci-dessous crée et affiche trois caractères.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C 0x27, 16 colonnes et 2 lignes byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // initialiser l'écran LCD lcd.backlight(); lcd.createChar(0, customChar0); // créer un nouveau caractère personnalisé (index 0) lcd.createChar(1, customChar1); // créer un nouveau caractère personnalisé (index 1) lcd.createChar(2, customChar2); // créer un nouveau caractère personnalisé (index 2) lcd.setCursor(2, 0); // déplacer le curseur à (2, 0) lcd.write((byte)0); // afficher le caractère personnalisé 0 à (2, 0) lcd.setCursor(4, 0); // déplacer le curseur à (4, 0) lcd.write((byte)1); // afficher le caractère personnalisé 1 à (4, 0) lcd.setCursor(6, 0); // déplacer le curseur à (6, 0) lcd.write((byte)2); // afficher le caractère personnalisé 2 à (6, 0) } void loop() { }

Résultat sur l'écran LCD :

Caractères personnalisés multiples LCD

Résumé : comment utiliser un caractère personnalisé sur un LCD

  • Utilisez le générateur de caractères ci-dessus pour créer un code binaire pour le caractère personnalisé.
  • Déclarez le code binaire pour le caractère personnalisé (copiez de l'étape précédente)
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Créez un caractère personnalisé et attribuez-le à une valeur d'index (de 0 à 7) dans la fonction setup().
lcd.createChar(index, customChar);
  • Imprimez le caractère personnalisé sur l'écran LCD à tout moment, n'importe où (dans la fonction setup() ou loop())
lcd.setCursor(column, row); // déplacer le curseur à la position souhaitée lcd.write((byte)index); // imprimer le caractère personnalisé à la position souhaitée

Autres fonctions

Ajoutez les fonctions ci-dessous une par une dans la fonction loop(). Et ajoutez delay(5000) après chaque fonction.

  • Écran LCD clair
lcd.clear();
  • Déplacez le curseur dans le coin supérieur gauche de l'écran LCD.
lcd.home();
  • Déplacez le curseur vers une position (colonne, ligne)
lcd.setCursor(column, row);
  • Afficher le curseur LCD
lcd.cursor();
  • Masque le curseur LCD.
lcd.noCursor();
  • Afficher le curseur clignotant de l'écran LCD.
lcd.blink()
  • Désactive le curseur clignotant de l'écran LCD.
lcd.noBlink()

Relevez le défi

Utilisez un écran LCD pour réaliser l'un des projets suivants :

Dépannage sur LCD I2C

Si le texte ne s'affiche pas sur l'écran LCD I2C, veuillez vérifier les problèmes suivants :

i. Ajustez la luminosité de l'écran LCD en tournant le potentiomètre situé à l'arrière de l'écran LCD.

ii. Selon les fabricants, l'adresse I2C de l'écran LCD peut être différente. Habituellement, l'adresse I2C par défaut de l'écran LCD est 0x27 ou 0x3F. Essayez ces valeurs une par une. Si vous échouez toujours, exécutez le code ci-dessous pour trouver l'adresse I2C.

// Programme de balayage d'adresses I2C #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; 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"); else Serial.println("done"); delay(5000); // attendez 5 secondes pour le prochain balayage }

Le résultat sur le moniteur série :

COM6
Send
Scanning... I2C device found at address 0x3F ! done Scanning... I2C device found at address 0x3F ! done
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!