Cum să setați adresele I²C și să utilizați un scaner I²C pentru LCD1602 și LCD2004
În acest tutorial, vom explora cum să setăm adrese I²C și să utilizăm un scaner I²C pentru afișajele LCD1602 și LCD2004. Înțelegerea comunicării I²C este crucială pentru integrarea acestor module LCD în proiectele tale cu Arduino, permițând transmiterea eficientă a datelor și controlul. Până la sfârșitul acestui ghid, vei putea identifica eficient adresele I²C ale afișajelor tale LCD și să te asiguri că funcționează corect.


Vom folosi senzorul BMP-180 ca parte a acestui proiect, care funcționează prin comunicare I²C. Senzorul oferă citiri de temperatură și presiune, care pot fi afișate pe LCD1602 sau LCD2004. Acest tutorial va include instrucțiuni de cablare, fragmente de cod și o demonstrație a rezultatelor așteptate. Pentru o înțelegere mai vizuală, asigură-te că verifici videoclipul asociat (în videoclip la 00:00).
Hardware Explicat
Componentele principale pentru acest proiect includ senzorul BMP-180, un afișaj LCD1602 sau LCD2004 și o placă Arduino. BMP-180 este un senzor digital de presiune care comunică prin protocolul I²C, necesitând doar două linii de date: SDA (linia de date) și SCL (linia de ceas). Afișajele LCD sunt, de asemenea, compatibile cu I²C și pot fi controlate ușor folosind același protocol de comunicare, permițând o configurare curată și eficientă.
BMP-180 funcționează cu o tensiune de alimentare între 1,8V și 3,6V, ceea ce înseamnă că poate fi alimentat printr-un regulator de tensiune dacă folosești o sursă de tensiune mai mare. Afișajele LCD, pe de altă parte, funcționează de obicei la 5V, ceea ce face ușoară interfațarea cu o placă Arduino fără componente suplimentare.
Detalii din Fișa Tehnică
| Producător | Bosch |
|---|---|
| Număr de piesă | BMP-180 |
| Tensiune logică/IO | 1,8 - 3,6 V |
| Tensiune de alimentare | 1,8 - 3,6 V |
| Curent de ieșire (pe canal) | 3,6 µA |
| Curent de vârf (pe canal) | 1 mA |
| Ghid de frecvență PWM | N/A |
| Praguri logice de intrare | N/A |
| Cădere de tensiune / RDS(on) / saturație | N/A |
| Limite termice | -40 până la +85 °C |
| Pachet | 3,6 x 3,8 mm |
| Note / variante | Senzor de temperatură și presiune |
- Asigură o tensiune de alimentare adecvată: 1,8V până la 3,6V pentru BMP-180.
- Folosește rezistențe de pull-up pe liniile SDA și SCL pentru o comunicare I²C stabilă.
- Păstrează firele scurte pentru a evita degradarea semnalului.
- Verifică adresa I²C corectă în timpul scanării.
- Monitorizează intervalul de temperatură: -40 până la +85 °C pentru BMP-180.
Instrucțiuni de Cablare

Pentru a cabla senzorul BMP-180 și afișajul LCD la Arduino, urmează acești pași:

Mai întâi, conectează pinul Vn al BMP-180 la ieșirea de 5V de pe Arduino. Apoi, conectează pinul GND al BMP-180 la masa Arduino. Pinul SDA al BMP-180 ar trebui să fie legat la pinul A4 al Arduino, în timp ce pinul SCL se conectează la A5.
Pentru LCD1602 sau LCD2004, conectează pinul VCC la 5V de pe Arduino și pinul GND la masă, de asemenea. Pinul SDA al LCD ar trebui să se conecteze și el la A4 (partajat cu BMP-180), iar pinul SCL ar trebui să se conecteze la A5.
Această configurare permite ambelor dispozitive să comunice pe același bus I²C, asigurând o configurare curată și eficientă.
Exemple de Cod & Explicații
Pentru a scana adrese I²C, vom folosi un fragment simplu de cod. Următorul extras inițializează comunicarea I²C și pregătește monitorul serial:
#include
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: așteaptă monitorul serial
Serial.println("\nScaner I2C");
}
Acest cod inițializează biblioteca Wire pentru comunicarea I²C și configurează monitorul serial pentru ieșire. Este esențial pentru depanare și pentru a te asigura că dispozitivele I²C sunt recunoscute.
Funcția loop scanează dispozitivele de pe bus-ul I²C și afișează adresele lor:
void loop() {
byte error, address;
int nDevices = 0;
Serial.println("Scanare...");
for(address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("Dispozitiv I2C găsit la adresa 0x");
Serial.println(address, HEX);
nDevices++;
}
}
if (nDevices == 0) Serial.println("Niciun dispozitiv I2C găsit\n");
delay(5000); // așteaptă 5 secunde pentru următoarea scanare
}
Această buclă verifică fiecare adresă de la 1 la 127, încercând să comunice cu orice dispozitive prezente. Dacă un dispozitiv confirmă comunicarea, adresa sa este afișată în monitorul serial. Acesta este un pas crucial în identificarea adresei I²C a LCD-ului tău sau a altor dispozitive conectate.
Demonstrație / Ce să Aștepți
Când rulezi scanerul I²C, ar trebui să vezi mesaje în monitorul serial care indică dacă au fost găsite dispozitive I²C. Dacă are succes, ieșirea va afișa adresele dispozitivelor conectate, formatate ca valori hexazecimale (de exemplu, "Dispozitiv I2C găsit la adresa 0x27"). Dacă nu sunt găsite dispozitive, vei vedea un mesaj corespunzător.
Este important să te asiguri că toate conexiunile sunt sigure și că nivelurile corecte de tensiune sunt furnizate pentru a evita problemele de detectare a dispozitivelor (în videoclip la 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
}
Lucruri de care ai putea avea nevoie
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
-
AliExpressPurchase LCD1602-I2C from AliExpresss.click.aliexpress.com
Resurse și referințe
Încă nu sunt resurse.
Fișiere📁
Biblioteci Arduino (zip)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB
Fișier Fritzing
-
LCD2004-I2C
LCD2004-I2C.fzpz0.02 MB