Search Code

Како да поставите I²C адреси и да користите I²C скенер за LCD1602 и LCD2004

Како да поставите I²C адреси и да користите I²C скенер за LCD1602 и LCD2004

Во ова упатство, ќе истражиме како да поставиме I²C адреси и да користиме I²C скенер за LCD1602 и LCD2004 дисплеите. Разбирањето на I²C комуникацијата е клучно за интегрирање на овие LCD модули со вашите Arduino проекти, овозможувајќи ефикасен пренос на податоци и контрола. До крајот на овој водич, ќе можете ефективно да ги идентификувате I²C адресите на вашите LCD дисплеи и да се осигурате дека тие функционираат правилно.

LCD1602-I2C display module with 4 wires

Ќе го користиме BMP-180 сензорот како дел од овој проект, кој работи со I²C комуникација. Сензорот обезбедува читања на температура и притисок, кои можат да се прикажат на LCD1602 или LCD2004. Ова упатство ќе вклучува инструкции за поврзување, код примери и демонстрација на очекуваните резултати. За повизуелно разбирање, задолжително погледнете го придружното видео (во видеото на 00:00).

Објаснување на хардверот

Главните компоненти за овој проект вклучуваат BMP-180 сензор, LCD1602 или LCD2004 дисплеј и Arduino плоча. BMP-180 е дигитален сензор за притисок кој комуницира преку I²C протоколот, барајќи само две линии за податоци: SDA (линија за податоци) и SCL (линија за часовник). LCD дисплеите исто така се компатибилни со I²C и лесно можат да се контролираат со истиот комуникациски протокол, овозможувајќи чисто и ефикасно поставување.

BMP-180 работи со напон на напојување помеѓу 1.8V и 3.6V, што значи дека може да се напојува преку регулатор на напон ако користите повисок извор на напон. LCD дисплеите, од друга страна, обично работат на 5V, што го олеснува поврзувањето со Arduino плоча без дополнителни компоненти.

Детали од податочната табела

Производител Bosch
Број на дел BMP-180
Логички/IO напон 1.8 - 3.6 V
Напон на напојување 1.8 - 3.6 V
Излезна струја (по канал) 3.6 µA
Врвна струја (по канал) 1 mA
Насоки за PWM фреквенција Н/П
Прагови на влезна логика Н/П
Пад на напон / RDS(on) / заситување Н/П
Термички граници -40 до +85 °C
Пакет 3.6 x 3.8 mm
Белешки / варијанти Сензор за температура и притисок

 

  • Осигурете правилно напојување: 1.8V до 3.6V за BMP-180.
  • Користете pull-up отпорници на SDA и SCL линиите за стабилна I²C комуникација.
  • Држете ги жиците кратки за да избегнете деградација на сигналот.
  • Проверете ја точната I²C адреса при скенирање.
  • Следете го температурниот опсег: -40 до +85 °C за BMP-180.

Инструкции за поврзување

Arduino wirng for LCD1602 with I2C
Arduino wirng for LCD1602 with I2C

За да го поврзете BMP-180 сензорот и LCD дисплејот со вашиот Arduino, следете ги овие чекори:

Прво, поврзете го Vn пинот на BMP-180 со 5V излезот на Arduino. Потоа, поврзете го GND пинот на BMP-180 со земјата на Arduino. SDA пинот на BMP-180 треба да се поврзе со A4 пинот на Arduino, додека SCL пинот се поврзува со A5.

За LCD1602 или LCD2004, поврзете го VCC пинот со 5V на Arduino и GND пинот исто така со земја. SDA пинот на LCD треба исто така да се поврзе со A4 (споделен со BMP-180), а SCL пинот треба да се поврзе со A5.

Оваа конфигурација овозможува двата уреди да комуницираат преку истата I²C магистрала, обезбедувајќи чисто и ефикасно поставување.

Код примери и објаснување

За да скенирате I²C адреси, ќе користиме едноставен код. Следниот извадок ја иницијализира I²C комуникацијата и го подготвува серискиот монитор:


#include 

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial); // Leonardo: почекајте за сериски монитор
  Serial.println("\nI2C Scanner");
}

Овој код ја иницијализира Wire библиотеката за I²C комуникација и го поставува серискиот монитор за излез. Тој е од суштинско значење за дебагирање и осигурување дека I²C уредите се препознаени.

Функцијата loop скенира за уреди на I²C магистралата и ги печати нивните адреси:


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); // почекајте 5 секунди за следно скенирање
}

Оваа јамка ја проверува секоја адреса од 1 до 127, обидувајќи се да комуницира со сите присутни уреди. Ако уредот потврди комуникација, неговата адреса се печати на серискиот монитор. Ова е клучен чекор во идентификувањето на I²C адресата на вашиот LCD или други поврзани уреди.

Демонстрација / Што да очекувате

Кога ќе го стартувате I²C скенерот, треба да видите пораки на серискиот монитор што укажуваат дали се пронајдени I²C уреди. Ако е успешно, излезот ќе ги прикаже адресите на поврзаните уреди, форматирани како хексадецимални вредности (на пр., "I2C device found at address 0x27"). Ако не се пронајдени уреди, ќе видите соодветна порака.

Важно е да се осигурате дека сите врски се безбедни и дека се обезбедени точните нивоа на напон за да се избегнат проблеми со откривање на уреди (во видеото на 05:30).

Images

Arduino wirng for LCD1602 with I2C
Arduino wirng for LCD1602 with I2C
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD2004_display-1
LCD2004_display-1
LCD2004_display-2
LCD2004_display-2
I2C_module
I2C_module
125-Arduino code for finding an I2C address
Language: C++
// --------------------------------------
//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
}

Things you might need

Resources & references

No resources yet.

Files📁

Arduino Libraries (zip)

Fritzing File