Arduino - LCD I2C

In deze Arduino LCD I2C tutorial leert u hoe u een LCD I2C (Liquid Crystal Display) aansluit op een Arduino-board. LCD’s zijn zeer populair en worden veel gebruikt in elektronica projecten voor het weergeven van informatie. Er zijn diverse typen LCD’s. In deze handleiding nemen we LCD 16x2 (16 kolommen en 2 rijen) als voorbeeld. Andere LCD’s zijn vergelijkbaar.

Hardware Benodigdheden

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×LCD I2C
1×Jumper wires (verbindingsdraadjes)
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over LCD I2C 16x2

In de vorige tutorial hebben we geleerd hoe een standaard LCD te gebruiken. Echter is de bekabeling tussen Arduino en een standaard LCD vaak complex. Daarom is de LCD I2C ontwikkeld om deze bekabeling te vereenvoudigen. In feite bestaat een LCD I2C uit een standaard LCD, een I2C-module en een potentiometer.

Pinout

LCD I2C gebruikt de I2C interface, waardoor het vier pinnen heeft:

  • GND pin: moet verbonden worden met GND (0V).
  • VCC pin: de voedingsspanning voor het LCD, moet aangesloten worden op VCC (5V).
  • SDA pin: I2C data signaal.
  • SCL pin: I2C kloksignaal.
LCD I2C Pinout

LCD Coördinaten

LCD I2C 16x2 heeft 16 kolommen en 2 rijen. De kolommen en rijen worden genummerd vanaf 0.

Arduino LCD I2C Coordinate

Aansluitschema

Arduino LCD I2C Wiring Diagram

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

Hoe te programmeren voor LCD I2C

Dankzij de LiquidCrystal_I2C bibliotheek is het gebruik van het LCD eenvoudig.

  • Voeg de bibliotheek toe:
#include <LiquidCrystal_I2C.h> // Bibliotheek voor LCD
  • Declareer een LiquidCrystal_I2C object met het I2C-adres, het aantal kolommen en het aantal rijen:
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C adres 0x27, 16 kolommen en 2 rijen
  • Initialiseer het LCD.
lcd.init(); // initialiseer het lcd lcd.backlight(); // zet de achtergrondverlichting aan
  • Verplaats de cursor naar de gewenste positie (kolom_index, rij_index)
lcd.setCursor(column_index, row_index);
  • Print een bericht op het LCD.
lcd.print("Hello World!");

Er zijn nog veel meer mogelijkheden met het LCD (zie het onderdeel Meer met LCD)

※ Notiz:

Het I2C-adres van het LCD kan per fabrikant verschillen. In de code gebruiken we 0x27, zoals gespecificeerd door DIYables.

Arduino Code

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C adres 0x27, 16 kolommen en 2 rijen void setup() { lcd.init(); // initialiseer het lcd lcd.backlight(); } void loop() { lcd.clear(); // scherm wissen lcd.setCursor(0, 0); // cursor naar (0, 0) lcd.print("Arduino"); // tekst op (0, 0) weergeven lcd.setCursor(2, 1); // cursor naar (2, 1) verplaatsen lcd.print("GetStarted.com"); // tekst op (2, 1) weergeven delay(2000); // tekst 2 seconden tonen lcd.clear(); // scherm wissen lcd.setCursor(3, 0); // cursor naar (3, 0) lcd.print("DIYables"); // tekst op (3, 0) tonen lcd.setCursor(0, 1); // cursor naar (0, 1) lcd.print("www.diyables.io"); // tekst op (0, 1) tonen delay(2000); // 2 seconden weergeven }

Snel aan de slag

  • Ga naar het Libraries icoon in de linkerzijbalk van de Arduino IDE.
  • Zoek op "LiquidCrystal I2C" en vind de LiquidCrystal_I2C bibliotheek van Frank de Brabander.
  • Klik op de Installeren knop om de LiquidCrystal_I2C bibliotheek te installeren.
Arduino LiquidCrystal I2C library
  • Kopieer bovenstaande code en open deze in de Arduino IDE.
  • Klik op de Upload knop om de code naar de Arduino te uploaden.
  • Bekijk het resultaat op het LCD.
Arduino display text on LCD
image source: diyables.io
  • Probeer de tekst en positie aan te passen.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten om het aansluiten en programmeren van het LCD I2C helder te maken.

Meer met LCD

Aangepaste Karakters

De functie lcd.print() ondersteunt alleen ASCII-tekens. Wilt u een speciaal teken of symbool weergeven (bijv. een hartje, boze vogel), dan kunt u de onderstaande teken-generator gebruiken.

Het LCD 16x2 kan 32 tekens weergeven (2 rijen met 16 kolommen). Elk teken bestaat uit 40 pixels (8 rijen en 5 kolommen).

Arduino LCD 16x2 Pixel

De teken-generator stelt een teken (40 pixels) voor. U hoeft alleen de volgende stappen te doen:

Klik op elke pixel om deze aan of uit te zetten


Kopieer onderstaande code voor het aangepaste karakter
Vervang de customChar[8] in onderstaande code
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C adres 0x27, 16 kolommen en 2 rijen byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // initialiseer het lcd lcd.backlight(); lcd.createChar(0, customChar); // maak een nieuw aangepast teken aan lcd.setCursor(2, 0); // cursor naar (2, 0) lcd.write((byte)0); // print het aangepaste teken op (2, 0) } void loop() { }

Resultaat op LCD:

LCD custom character

Meerdere aangepaste karakters

We kunnen tot 8 aangepaste karakters maken (genummerd van 0 tot 7). Het onderstaande voorbeeld maakt en toont drie karakters.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C adres 0x27, 16 kolommen en 2 rijen 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(); // initialiseer het lcd lcd.backlight(); lcd.createChar(0, customChar0); // nieuw aangepast karakter (index 0) lcd.createChar(1, customChar1); // nieuw aangepast karakter (index 1) lcd.createChar(2, customChar2); // nieuw aangepast karakter (index 2) lcd.setCursor(2, 0); // cursor naar (2, 0) lcd.write((byte)0); // print aangepast teken 0 op (2, 0) lcd.setCursor(4, 0); // cursor naar (4, 0) lcd.write((byte)1); // print aangepast teken 1 op (4, 0) lcd.setCursor(6, 0); // cursor naar (6, 0) lcd.write((byte)2); // print aangepast teken 2 op (6, 0) } void loop() { }

Resultaat op LCD:

LCD multiple custom characters

Samenvatting: hoe gebruikt u aangepaste karakters op LCD

  • Gebruik de teken-generator hierboven om de binaire code voor het aangepaste teken te maken.
  • Declareer de binaire code voor het aangepaste teken (kopieer uit bovenstaande stap)
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Maak het aangepaste karakter en ken het toe aan een indexwaarde (0 tot 7) in de setup() functie
lcd.createChar(index, customChar);
  • Print het aangepaste teken op het LCD, wanneer dan ook (in setup() of loop() functie)
lcd.setCursor(column, row); // cursor naar gewenste positie lcd.write((byte)index); // print het aangepaste teken op die positie

Overige functies

Voeg onderstaande functies één voor één toe aan de loop() functie. Voeg na elke functie een delay(5000) toe.

  • Wis het LCD scherm
lcd.clear();
  • Verplaats de cursor naar linksboven op het LCD
lcd.home();
  • Verplaats de cursor naar een positie (kolom, rij)
lcd.setCursor(column, row);
  • Toon de LCD cursor
lcd.cursor();
  • Verberg de LCD cursor
lcd.noCursor();
  • Toon een knipperende LCD cursor
lcd.blink();
  • Zet de knipperende LCD cursor uit
lcd.noBlink();

Daag uzelf uit

Gebruik het LCD om één van de volgende projecten uit te voeren:

Problemen oplossen met LCD I2C

Als er geen tekst wordt weergegeven op het LCD I2C, controleer dan het volgende:

  1. Pas de helderheid van het LCD aan door de potentiometer aan de achterkant van het LCD te draaien.
  2. Het I2C-adres van het LCD kan verschillen per fabrikant. Gewoonlijk is het standaard I2C-adres 0x27 of 0x3F. Probeer deze waarden één voor één uit. Lukt het nog niet, draai dan onderstaande code om het I2C-adres te vinden.
// I2C adres scanner programma #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("Onbekende fout bij adres 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("Geen I2C apparaten gevonden"); else Serial.println("Klaar"); delay(5000); // wacht 5 seconden voor volgende scan }

Resultaat in Serial Monitor:

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  

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!