/* Uhrzeit mit millis() erzeugen
 * Die Abfrage von millis() und previousMillis gibt eine Ausführung in der if-Abfrage
 * im Sekundentakt. Mit einem Module-60-Zähler werden Sekunden und Minuten erzeugt
 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>    // Die Bibliothek muss noch installiert werden!

LiquidCrystal_I2C lcd(0x27, 16, 2); // Display mit 2 Zeilen, 16 Zeichen, I2C-Adresse 0x27 (PCF8574!)

//***** Taster und LEDs wie auf bleuer Platine **********************
const int LED_rot=32, LED_gruen=33, Taster2=2, Taster4=4;

//***** Globale Variablen *******************************************
uint8_t heart[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000,
};
uint8_t heart2[8] = { 0b00000, 0b01010, 0b01110, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000,};
uint8_t heart3[8] = { 0b00000,  0b01010,	0b11111,	0b11111,	0b01110,	0b00100,	0b00000,	0b00000  };
byte Empfang5[8] = { 0b00000, 0b00000, 0b00001,	0b00011, 0b00111,	0b01111, 0b11111, 0b00000 };
byte Empfang4[8] = { 0b00000, 0b00000, 0b00001,	0b00011, 0b00111,	0b01111, 0b00000, 0b00000 };
byte Empfang3[8] = { 0b00000, 0b00000, 0b00001,	0b00011, 0b00111,	0b00000, 0b00000, 0b00000 };
byte Empfang2[8] = { 0b00000, 0b00000, 0b00001,	0b00011, 0b00000,	0b00000, 0b00000, 0b00000 };
byte Empfang1[8] = { 0b00000, 0b00000, 0b00001,	0b00000, 0b00000,	0b00000, 0b00000, 0b00000 };

//***** Setup, wird 1x ausgeführt ***********************************
void setup() {
  Serial.begin(115200);
  pinMode(LED_rot, OUTPUT);
  pinMode(LED_gruen, OUTPUT);
  pinMode(Taster2, INPUT_PULLUP);
  pinMode(Taster4, INPUT_PULLUP);

  lcd.init(); // oder
  //lcd.begin(16, 2);
  lcd.backlight();       // Hintergrundbeleuchtung einschalten
  
  lcd.createChar(0, Empfang1);  // verwende Array heart[]
  lcd.createChar(1, Empfang2);  // verwende Array heart[]
  lcd.createChar(2, Empfang3);  // verwende Array heart[]
  lcd.createChar(3, Empfang4);  // verwende Array heart[]
  lcd.createChar(4, Empfang5);  // verwende Array heart[]
  
  lcd.createChar(5, heart);  // verwende Array heart[]
  lcd.createChar(6, heart2);  // verwende Array heart[]
  lcd.createChar(7, heart3);  // verwende Array heart[]
}

//***** Loop wird immer wieder ausgeführt ****************************
void loop() {
 
  lcd.setCursor(0,0);
  lcd.print("  I \x03 Arduino");

  for (int temp = 0; temp < 5; temp++) {
    lcd.setCursor(2*temp,1);
    lcd.write(temp);
    delay(1000);
  }
    
}
Taster2
Taster4
LED32
LED34
ESP32 Schulboard mit LEDs und Tastern, I2C-Bus mit Standard-Belegung
Auf dem Display sitzt ein PCF8574