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 diverse bibliotheken in omloop voor I²C displays. Het beste werkt volgens mij de bibliotheek van Francisco Malpartida, genaamd NewliquidCrystal_1.3.4.zip. Deze doet hetzelfde als de standaard bibliotheek van de Arduino, maar voegt mogelijkheden en ondersteuning van displays toe. Om conflicten te voorkomen moet je standaardbibliotheek LiquidCrystal_I2C verwijderen of verplaatsen. Je kunt het zip-bestand rechtstreeks aan je Arduino software koppelen, het hoeft niet gerenamed te worden.

Aansluiting op je Arduino

Dit is heel simpel: VCC op 5 volt en GND op GND; bij de meeste Arduino's SDA op A4 en SCL op A5.

Aansluiten op een bord met een ESP-processor

Step-up converter: 3,3 volt gaat erin; een gestabiliseerde 5 volt spanning komt eruit.
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 5 V 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> // Zorg dat je de goede bibliotheek hebt!

// Pas indien nodig het i2c adres (0x27) aan. Mogelijke waarden: 0x27 en 0x3F
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() { 
  lcd.begin (20, 4); // initialiseer op 20 karakters en 4 regels.
  lcd.setBacklight(HIGH);  
  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, ...) 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 adres. Daarna volgen pinverwijzingen van het display. Deze moet je zo overnemen. Het woord POSITIVE geeft aan dat als de achtergrondpin HOOG is de achtergrondverlichting aan gaat. Als je een foutmelding krijgt dat het woord POSITIVE niet bekend is, dan heb je een oude versie van de bibliotheek geladen. 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.