Comment définir les adresses I²C et utiliser un scanner I²C pour les LCD1602 et LCD2004
Dans ce tutoriel, nous allons explorer comment définir les adresses I²C et utiliser un scanner I²C pour les écrans LCD1602 et LCD2004. Comprendre la communication I²C est essentiel pour intégrer ces modules LCD à vos projets Arduino, car cela permet une transmission de données et un contrôle efficaces. À la fin de ce guide, vous serez en mesure d'identifier efficacement les adresses I²C de vos écrans LCD et de vérifier qu'ils fonctionnent correctement.


Nous utiliserons le capteur BMP-180 dans le cadre de ce projet, qui communique via I²C. Le capteur fournit des mesures de température et de pression, qui peuvent être affichées soit sur le LCD1602, soit sur le LCD2004. Ce tutoriel comprendra les instructions de câblage, des extraits de code et une démonstration des résultats attendus. Pour une compréhension plus visuelle, n'oubliez pas de consulter la vidéo associée (à 00:00).
Le matériel expliqué
Les principaux composants de ce projet comprennent le capteur BMP-180, un afficheur LCD1602 ou LCD2004 et une carte Arduino. Le BMP-180 est un capteur de pression numérique qui communique via le protocole I²C, ne nécessitant que deux lignes de données : SDA (ligne de données) et SCL (ligne d'horloge). Les afficheurs LCD sont également compatibles I²C et peuvent être facilement contrôlés en utilisant le même protocole de communication, ce qui permet une configuration propre et efficace.
Le BMP-180 fonctionne avec une tension d'alimentation comprise entre 1,8 V et 3,6 V, ce qui signifie qu'il peut être alimenté via un régulateur de tension si vous utilisez une source de tension plus élevée. Les écrans LCD, en revanche, fonctionnent généralement à 5 V, ce qui facilite leur connexion à une carte Arduino sans composants supplémentaires.
Détails de la fiche technique
| Fabricant | Bosch |
|---|---|
| Numéro de pièce | BMP-180 |
| Tension logique/E/S | 1.8 - 3.6 V |
| Tension d'alimentation | 1,8 - 3,6 V |
| Courant de sortie (par canal) | 3.6 µA |
| Courant de crête (par canal) | 1 mA |
| Conseils sur la fréquence PWM | Non applicable |
| Seuils logiques d'entrée | Sans objet |
| Chute de tension / RDS (en conduction) / saturation | Sans objet |
| Limites thermiques | -40 à +85 °C |
| Paquet | 3,6 × 3,8 mm |
| Notes / variantes | Capteur de température et de pression |
- Veillez à fournir une tension d'alimentation appropriée : 1.8V à 3.6V pour le BMP-180.
- Utilisez des résistances de pull-up sur les lignes SDA et SCL pour une communication I²C stable.
- Gardez les fils courts pour éviter la dégradation du signal.
- Vérifiez que l'adresse I²C est correcte lors du balayage.
- Plage de température : -40 à +85 °C pour le BMP-180.
Instructions de câblage

Pour câbler le capteur BMP-180 et l'écran LCD à votre Arduino, suivez ces étapes :

Commencez par connecter le BMP-180.VnConnectez la broche à la sortie 5 V de l'Arduino. Ensuite, connectez laGNDbroche du BMP-180 à la masse de l'Arduino. LeSDAla broche du BMP-180 doit être reliée à celle de l'Arduino.A4goupille, tandis que leSCLla broche se connecte àA5.
Pour le LCD1602 ou le LCD2004, connectez leVCCbroche au 5V de l'Arduino et leGNDmettre la broche à la masse également. LeSDAla broche de l'écran LCD doit également être connectée àA4 (partagé avec le BMP-180), et leSCLla broche doit se connecter àA5.
Cette configuration permet aux deux appareils de communiquer sur le même bus I²C, garantissant une installation propre et efficace.
Exemples de code et guide pas à pas
Pour scanner les adresses I²C, nous utiliserons un simple extrait de code. L'extrait suivant initialise la communication I²C et prépare le moniteur série :
#include
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
Ce code initialise la bibliothèque Wire pour la communication I²C et configure le moniteur série pour la sortie. Il est essentiel pour le débogage et pour s'assurer que les périphériques I²C sont reconnus.
La fonction loop recherche les appareils sur le bus I²C et affiche leurs adresses :
void loop() {
byte error, address;
int nDevices = 0;
Serial.println("Scanning...");
for(address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
Serial.println(address, HEX);
nDevices++;
}
}
if (nDevices == 0) Serial.println("No I2C devices found\n");
delay(5000); // wait 5 seconds for next scan
}
Cette boucle vérifie chaque adresse de 1 à 127, en tentant de communiquer avec les appareils présents. Si un appareil répond, son adresse est affichée sur le moniteur série. C'est une étape cruciale pour identifier l'adresse I²C de votre écran LCD ou d'autres appareils connectés.
Démonstration / À quoi s'attendre
Lorsque le scanner I²C est lancé, vous devriez voir des messages dans le moniteur série indiquant si des périphériques I²C ont été détectés. Si l'opération réussit, la sortie affichera les adresses des périphériques connectés, formatées en valeurs hexadécimales (par exemple, Périphérique I²C trouvé à l'adresse 0x27). Si aucun périphérique n'est trouvé, vous verrez un message correspondant.
Il est important de s'assurer que toutes les connexions sont sécurisées et que les niveaux de tension corrects sont fournis afin d'éviter des problèmes de détection de l'appareil (dans la vidéo à 05:30).
// --------------------------------------
//http://playground.arduino.cc/Main/I2cScanner
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not known.
// Version 2, June 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26, 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
// Version 6, November 27, 2015.
// Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit addresses might not be seen properly.
// Watch Video explaining I2C address: https://www.youtube.com/watch?v=bqMMIbmYJS0
//
#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
}
Ce dont vous pourriez avoir besoin
-
Amazon
-
AliExpressAcheter LCD1602-I2C sur AliExpresss.click.aliexpress.com
-
AliExpressAchetez 10 pièces de LCD1602-I2C sur AliExpresss.click.aliexpress.com
Ressources et références
Aucune ressource pour le moment.
Fichiers📁
Bibliothèques Arduino (zip)
-
Bibliothèque LCD1602 pour Arduino de Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB
Fichier Fritzing
-
LCD2004-I2C
LCD2004-I2C.fzpz0.02 MB