.. note:: Bonjour et bienvenue dans la communauté des passionnés de Raspberry Pi & Arduino & ESP32 de SunFounder sur Facebook ! Plongez dans l'univers de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi nous rejoindre ?** - **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques avec l'aide de notre communauté et de notre équipe. - **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences. - **Aperçus exclusifs** : Profitez d'un accès anticipé aux nouvelles annonces de produits et aux avant-premières. - **Réductions spéciales** : Bénéficiez de réductions exclusives sur nos derniers produits. - **Promotions festives et concours** : Participez à des concours et des promotions spéciales lors des fêtes. 👉 Prêt à explorer et créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! .. _1.1.7_i2c_lcd: 1.1.7 I2C LCD1602 ====================== Introduction ------------------ Le LCD1602 est un écran à cristaux liquides de type caractère, capable d'afficher simultanément 32 caractères (16*2). Composants ------------------- .. image:: img/list_i2c_lcd.png Principe ----------- **I2C LCD1602** .. image:: img/i2c_lcd1602.png :width: 800 * **GND**: Masse * **VCC**: Alimentation en tension, 5V. * **SDA**: Ligne de données série. Connectez-la à VCC via une résistance pull-up. * **SCL**: Ligne d'horloge série. Connectez-la à VCC via une résistance pull-up. Comme vous le savez, bien que les écrans LCD et d'autres affichages améliorent grandement l'interaction homme-machine, ils partagent une faiblesse commune. Lorsqu'ils sont connectés à un contrôleur, plusieurs E/S sont occupées, ce qui réduit le nombre de ports disponibles pour d'autres fonctions. Pour remédier à ce problème, le LCD1602 avec un module I2C a été développé. Le module I2C intègre une puce PCF8574 qui convertit les données série I2C en données parallèles pour l'affichage LCD. * `PCF8574 Datasheet `_ **Adresse I2C** L'adresse par défaut est généralement 0x27, dans certains cas, elle peut être 0x3F. Prenons l'exemple de l'adresse par défaut 0x27. L'adresse du périphérique peut être modifiée en court-circuitant les broches A0/A1/A2 ; à l'état par défaut, A0/A1/A2 est à 1, et si le cavalier est enlevé, A0/A1/A2 est à 0. .. image:: img/i2c_address.jpg :width: 600 **Rétroéclairage/Contraste** Le rétroéclairage peut être activé via un cavalier, et en enlevant le cavalier, le rétroéclairage est désactivé. Le potentiomètre bleu à l'arrière est utilisé pour ajuster le contraste (la différence de luminosité entre le blanc le plus clair et le noir le plus sombre). .. image:: img/back_lcd1602.jpg * **Cavalier de court-circuit** : Le rétroéclairage peut être activé par ce cavalier, retirez-le pour le désactiver. * **Potentiomètre** : Utilisé pour ajuster le contraste (la clarté du texte affiché), augmentez-le en tournant dans le sens des aiguilles d'une montre et diminuez-le dans le sens inverse. Schéma --------------------- ============ ======== T-Board Name physical SDA1 Pin 3 SCL1 Pin 5 ============ ======== .. image:: img/schematic_i2c_lcd.png Procédures expérimentales ------------------------------ **Étape 1 :** Montez le circuit. .. image:: img/image96.png :width: 800 **Étape 2** : Configurez l'I2C (voir :ref:`i2c_config`. Si vous avez déjà configuré l'I2C, passez cette étape.) Pour les utilisateurs du langage C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Étape 3 :** Changez de répertoire. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/1.1.7/ **Étape 4 :** Compilez. .. raw:: html .. code-block:: gcc 1.1.7_Lcd1602.c -lwiringPi **Étape 5 :** Exécutez. .. raw:: html .. code-block:: sudo ./a.out Après l'exécution du code, vous verrez "Greetings", "From SunFounder" affiché sur le LCD. .. note:: * Si une erreur du type ``wiringPi.h: No such file or directory`` apparaît, veuillez vous référer à :ref:`install_wiringpi`. * Si vous obtenez l'erreur ``Unable to open I2C device: No such file or directory``, vous devez vous référer à :ref:`i2c_config` pour activer l'I2C et vérifier si le câblage est correct. * Si le code et le câblage sont corrects, mais que l'écran LCD ne s'affiche toujours pas, vous pouvez ajuster le potentiomètre à l'arrière pour augmenter le contraste. **Code** .. code-block:: c #include #include #include #include int LCDAddr = 0x27; int BLEN = 1; int fd; void write_word(int data){ int temp = data; if ( BLEN == 1 ) temp |= 0x08; else temp &= 0xF7; wiringPiI2CWrite(fd, temp); } void send_command(int comm){ int buf; // Envoyer d'abord les bits 7-4 buf = comm & 0xF0; buf |= 0x04; // RS = 0, RW = 0, EN = 1 write_word(buf); delay(2); buf &= 0xFB; // Mettre EN = 0 write_word(buf); // Envoyer ensuite les bits 3-0 buf = (comm & 0x0F) << 4; buf |= 0x04; // RS = 0, RW = 0, EN = 1 write_word(buf); delay(2); buf &= 0xFB; // Mettre EN = 0 write_word(buf); } void send_data(int data){ int buf; // Envoyer d'abord les bits 7-4 buf = data & 0xF0; buf |= 0x05; // RS = 1, RW = 0, EN = 1 write_word(buf); delay(2); buf &= 0xFB; // Mettre EN = 0 write_word(buf); // Envoyer ensuite les bits 3-0 buf = (data & 0x0F) << 4; buf |= 0x05; // RS = 1, RW = 0, EN = 1 write_word(buf); delay(2); buf &= 0xFB; // Mettre EN = 0 write_word(buf); } void init(){ send_command(0x33); // Doit initialiser en mode 8 bits en premier delay(5); send_command(0x32); // Puis passer en mode 4 bits delay(5); send_command(0x28); // 2 lignes et caractères de 5*7 points delay(5); send_command(0x0C); // Activer l'affichage sans curseur delay(5); send_command(0x01); // Effacer l'écran wiringPiI2CWrite(fd, 0x08); } void clear(){ send_command(0x01); // Effacer l'écran } void write(int x, int y, char data[]){ int addr, i; int tmp; if (x < 0) x = 0; if (x > 15) x = 15; if (y < 0) y = 0; if (y > 1) y = 1; // Déplacer le curseur addr = 0x80 + 0x40 * y + x; send_command(addr); tmp = strlen(data); for (i = 0; i < tmp; i++){ send_data(data[i]); } } void main(){ fd = wiringPiI2CSetup(LCDAddr); init(); write(0, 0, "Greetings!"); write(1, 1, "From SunFounder"); } **Explication du Code** .. code-block:: void write_word(int data){……} void send_command(int comm){……} void send_data(int data){……} void init(){……} void clear(){……} void write(int x, int y, char data[]){……} Ces fonctions sont utilisées pour contrôler le code source ouvert de l'I2C LCD1602. Elles nous permettent d'utiliser facilement l'I2C LCD1602. Parmi ces fonctions, `init()` est utilisée pour l'initialisation, `clear()` pour effacer l'écran, `write()` pour écrire ce qui est affiché, et les autres fonctions soutiennent ces opérations. .. code-block:: c fd = wiringPiI2CSetup(LCDAddr); Cette fonction initialise le système I2C avec le périphérique spécifié. Le prototype de la fonction : .. code-block:: c int wiringPiI2CSetup(int devId); Le paramètre `devId` est l'adresse du périphérique I2C, elle peut être trouvée avec la commande `i2cdetect` (voir annexe) et l'adresse de l'I2C LCD1602 est généralement 0x27. .. code-block:: c void write(int x, int y, char data[]){} Dans cette fonction, `data[]` est le texte à imprimer sur l'écran LCD, et les paramètres `x` et `y` déterminent la position d'impression (ligne `y+1`, colonne `x+1` comme position de départ du texte à imprimer). Pour les utilisateurs de Python ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Étape 3:** Changer de répertoire. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python/ **Étape 4:** Exécuter. .. raw:: html .. code-block:: sudo python3 1.1.7_Lcd1602.py Après l'exécution du code, vous verrez « Greetings », « From SunFounder » s'afficher sur l'écran LCD. .. note:: * Si vous obtenez l'erreur ``FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'``, vous devez consulter :ref:`i2c_config` pour activer l'I2C. * Si vous obtenez l'erreur ``ModuleNotFoundError: No module named 'smbus2'``, exécutez la commande ``sudo apt install python3-smbus2``. * Si l'erreur ``OSError: [Errno 121] Remote I/O`` apparaît, cela signifie que le module est mal câblé ou endommagé. * Si le câblage et le code sont corrects mais que l'écran LCD n'affiche toujours rien, essayez d'ajuster le potentiomètre à l'arrière pour augmenter le contraste. **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez aller dans le répertoire du code source tel que ``davinci-kit-for-raspberry-pi/python``. .. raw:: html .. code-block:: python import LCD1602 import time def setup(): LCD1602.init(0x27, 1) # init(adresse du périphérique, lumière de fond) LCD1602.write(0, 0, 'Greetings!!') LCD1602.write(1, 1, 'from SunFounder') time.sleep(2) def destroy(): LCD1602.clear() if __name__ == "__main__": try: setup() except KeyboardInterrupt: destroy() **Explication du Code** .. code-block:: python import LCD1602 Ce fichier est un fichier open source pour contrôler l'I2C LCD1602. Il permet d'utiliser facilement l'I2C LCD1602. .. code-block:: python LCD1602.init(0x27, 1) Cette fonction initialise le système I2C avec le périphérique désigné. Le premier paramètre est l'adresse du périphérique I2C, détectable par la commande `i2cdetect` (voir l'annexe pour les détails). L'adresse de l'I2C LCD1602 est généralement 0x27. .. code-block:: python LCD1602.write(0, 0, 'Greetings!!') Dans cette fonction, le texte `'Greetings!!'` est imprimé sur la ligne `0+1`, colonne `0+1` de l'écran LCD. Vous verrez maintenant « Greetings! From SunFounder » affiché sur l'écran LCD. Image du Résultat ------------------------ .. image:: img/image97.jpeg