Display met vier regels van 20 tekens, type Blue Serial IIC/I2C/TWI 2004 204 20X4 Character LCD Module
De oude standaardbibliotheek voor I²C displays kan worden gebruikt, maar geeft soms problemen.
Er zijn veel bibliotheken in omloop voor I²C displays.
Het beste werken de bibliotheken van Frank de Brabander, genaamd LiquidCrystal_I2C en die van Hangul. Beide bibliotheken kun je installeren via menu → Hulpmiddelen → Bibliotheken Beheren.
De bibliotheek van Frank de Brabander doet hetzelfde als de standaard bibliotheek van de Arduino, maar voegt extra mogelijkheden en ondersteuning van displays toe. Om conflicten te voorkomen kun je standaardbibliotheek LiquidCrystal_I2C verwijderen of verplaatsen.
Aansluiting op je Arduino
Step-up converter: 3,3 volt gaat erin; een gestabiliseerde 5 volt spanning komt eruit.
Sluit VCC aan op 5 volt en GND op GND; bij de meeste Arduino's moet SDA op A4 en SCL op A5.
Aansluiten op een bord met een ESP-processor
Dit wordt uitgebreider beschreven bij het 2-regels display. Voor de I²C interface heb je meestal 5 volt nodig; 3,3 volt werkt echt niet. Als je geen 5 volt uitgang hebt, dan kun je het beste een goedkope step-up converter kopen. Deze verhoogt de spanning tot precies 5 volt. Zie de foto hiernaast. De Wemos D1 heeft overigens wel een 5V uitgang, als je hem aansluit via de USB poort.
Test met lichtkrant
Dit display heeft enorm veel mogelijkheden. Ik laat hier de lichtkrant zien. Verderop staat enige uitleg bij de code. De programma's voor het tweeregelig display kun je ook met dit display gebruiken.
#include <LiquidCrystal_I2C.h> // Bibliotheek van Frank de Brabander
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Mogelijke waarden: 0x27 en 0x3F
void setup() {
Wire.begin(21, 22); // Vermeld hier de juiste sda en scl pinnen
lcd.begin (20, 4); // initialiseer op 20 karakters en 4 regels.
lcd.backlight();
lcd.setCursor(2, 0); lcd.print("Hallo allemaal !");
lcd.setCursor(0, 1); lcd.print("Hier zie je het I2C-");
lcd.setCursor(0, 2); lcd.print("display met 4 regels");
}
String Krant = " Dit is 'n mooie lichtkrant!";
void loop() {
for(int Teller = 0; Teller <= Krant.length() - 20; Teller++) {
lcd.setCursor(0, 3);
lcd.print(Krant.substring(Teller, Teller + 20));
delay(250);
}
delay(1000);
}
#include <LiquidCrystal_I2C_Hangul.h>
LiquidCrystal_I2C_Hangul lcd(0x27, 20, 4); // Mogelijke waarden: 0x27 en 0x3F
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(2, 0); lcd.print("Hallo allemaal !");
lcd.setCursor(0, 1); lcd.print("Hier zie je het I2C-");
lcd.setCursor(0, 2); lcd.print("display met 4 regels");
}
String Krant = " Dit is 'n mooie lichtkrant!";
void loop() {
for (int Teller = 0; Teller <= Krant.length() - 20; Teller++) {
lcd.setCursor(0, 3);
lcd.print(Krant.substring(Teller, Teller + 20));
delay(250);
}
delay(1000);
}
Uitleg bij de code
Met de opdracht LiquidCrystal_I2C lcd(0x27, 20, 4) definieer je een object met de naam lcd dat je kunt zien als het display. Je mag natuurlijk ook een andere naam kiezen dan lcd, bijvoorbeeld display. Overal moet je lcd dan vervangen door display. De eerste parameter die je meegeeft (0x27) is het I²C-adres. Daarna volgt het aantal karakters per regels en dan het aantal regels.
In de setup geef je eerst aan dat het een display is van 20 plaatsen en 4 regels. Vervolgens zet je de achtergrondverlichting aan (HIGH). Daarna zet je de cursor op de plaats waar ik de eerste letter wil hebben. setCursor(2, 0) betekent de derde plaats van regel 1. Vervolgens wordt een tekst geprint op het lcd scherm.
Bij andere displays kun je vaak makkelijk lichtkranten maken. Maar dit display is standaard zo ingesteld dat te lange regels doorgaan op de eerste regel. Als je die instellingen niet wilt wijzigen, is het hierdoor iets ingewikkelder. In het voorbeeld neem ik van de lange string "Krant" steeds de juiste letters die op de 20 plaatsen passen. Door te beginnen met spaties wordt de regel automatisch schoongemaakt als de krant begint te lopen. Het voordeel is wel dat dit met andere displays, met minimale aanpassingen, ook zal werken. De laatste tekst blijft even staan wegens delay(1000). Kies voor de delays de waardes die jij prettig vindt.
Als je de ESP gebruikt, neem dan boven je programma de regel #include <Wire.h> op, en in de setup Wire.begin(21, 22); als 21 en 22 de pinnen zijn waarop je sda en scl hebt aangesloten (dat kunnen dus ook andere pinnen zijn).
Of de lichtkrant er goed uitziet of niet wordt voornamelijk door de kwaliteit van het display bepaalt en de kleur. Zwart op wit zal er vaker goed uitzien dan wit op blauw. Optimaliseren van de code, kan de lichtkrant maar heel weinig verbeteren.