20250928_170823
wie ich ein Relaissystem mit ESP32 und 2,4″ TFT-Touchscreen gebaut habe. Ihr könnt damit bis zu 6 Relais steuern – direkt über den Touchscreen oder auch bequem über euer Smartphone im WLAN. Perfekt für Smart-Home-Projekte, DIY-Automatisierung und Maker, die Spaß am Basteln haben! 💡 Features: Steuerung von bis zu 6 Relais Touchscreen GUI komplett selbst programmiert Virtuelle Tastatur für WLAN-Verbindung IP-basierte Steuerung über Smartphone Factory Reset & Kalibrierung integriert Erweiterbar für Smart-Home-Funktionen Geplantes 3D-Gehäuse-Design für sauberen Aufbau
  • Date: 08.10 AM, 01 November 2018

Das ist ein ESP32 Touchscreen-Steuerpanel mit 6 Relais, WiFi-Einstellungen, Webserver und System-Menüs.
Man kann damit:

  • Die Relais über Touchscreen oder Weboberfläche schalten

  • Alle Relais gleichzeitig an/aus machen

  • WiFi konfigurieren und speichern (im Flash)

  • Uhrzeit per NTP synchronisieren

  • Den Touchscreen kalibrieren

  • Infos wie Datum, Uhrzeit und IP-Adressen anzeigen

  • Einen Factory Reset machen


🖥️ Hauptbestandteile des Codes

1. Hardware

  • Display: TFT_eSPI (320×240 Pixel)

  • Touchscreen: XPT2046 (über SPI)

  • Relais: 6 Stück, Pins 25,26,27,33,14,12

  • ESP32 mit WiFi + NTP


2. Menüsystem

Der Code arbeitet mit einem State-Machine-Prinzip:

enum MenuState { MAIN_MENU, SETTINGS_MENU, WIFI_MENU, PASSWORD_MENU, CALIBRATION_MENU, INFOS_MENU };
MenuState currentMenu = MAIN_MENU;

➡️ Je nach currentMenu zeigt der Bildschirm ein anderes Menü an.

Menüs:

  • Main Menu → 6 Relais-Buttons + „All Relays“ + „Settings“

  • Settings Menu → Auswahl: WiFi, Infos, Kalibrierung, Factory Reset

  • WiFi Menu → Zeigt Netzwerke, Auswahl für Verbindung

  • Password Menu → Virtuelle Tastatur für WiFi-Passwort

  • Calibration Menu → 5-Punkte-Touch-Kalibrierung

  • Infos Menu → Datum, Uhrzeit, IP-Adressen


3. Relaissteuerung

Es gibt eine Button-Klasse und eine abgeleitete RelayButton-Klasse:

RelayButton relays[6] = {
RelayButton(20, 50, 85, 45, "Relay 1", TFT_BLUE, 25),
...
};
  • Jeder Button hat eine Position und eine Farbe

  • Beim Tippen toggelt er den Pin (digitalWrite) → Relais an/aus


4. Touchscreen

  • Touch-Koordinaten werden mit ts.getPoint() gelesen

  • Mithilfe von Kalibrierung (calibrateTouch()) werden sie auf den Bildschirm gemappt

  • Je nach Menü wird geprüft, ob ein Button berührt wurde (isTouched(x,y))


5. WiFi & Speicherung

  • Über Preferences (Flash-Speicher im ESP32) werden SSID und Passwort gespeichert:

prefs.putString("ssid", newSSID);
prefs.putString("password", newPass);
  • Beim Start verbindet sich der ESP32 automatisch wieder mit gespeichertem Netzwerk

  • Gleichzeitig erstellt er ein eigenes Access Point (AP):

    • SSID: ESP32_Relay_Control

    • Passwort: admin123


6. Webserver

Der Webserver läuft auf Port 80 und stellt eine Weboberfläche bereit:

  • / → Hauptseite mit Buttons für die Relais

  • /toggle?relay=0..5 → Schaltet ein Relais um

  • /all?state=on/off → Schaltet alle Relais gleichzeitig

  • /wifi → Formular für SSID & Passwort

  • /reset → Factory Reset (löscht Preferences + Neustart)

Die Webseite ist simpel in HTML, CSS, JavaScript eingebaut und wird direkt vom ESP32 geliefert.


7. Uhrzeit

  • Über configTime(0,0,"pool.ntp.org") wird NTP genutzt

  • Zeitzone: CET/CEST (Mitteleuropa)

  • Wird im Infos-Menü angezeigt (Datum + Uhrzeit)


8. Touchscreen-Kalibrierung

  • Menü zeigt nacheinander:

    • Links-oben, Rechts-oben, Links-unten, Rechts-unten, Mitte

  • Nutzer tippt auf die Punkte

  • Rohwerte (rawX, rawY) werden gespeichert → min/max

  • Damit wird das Mapping verbessert

 

Wichtige Verbindungsliste (Kurzfassung)

  • SPI-Bus (gemeinsam)

    • MOSI → GPIO23 → TFT MOSI + Touch MOSI

    • MISO → GPIO19 → Touch MISO (TFT benötigt meist nur MOSI)

    • SCLK → GPIO18 → TFT + Touch SCLK

    • TFT_CS → GPIO5 (getrenntes CS)

    • TOUCH_CS → GPIO21 (getrenntes CS für XPT2046)

    • TFT_DC → GPIO2 (Data/Command)

    • TFT_RST → GPIO4 (Reset)

  • Relais

    • Relay 1 → GPIO25

    • Relay 2 → GPIO26

    • Relay 3 → GPIO27

    • Relay 4 → GPIO33

    • Relay 5 → GPIO14

    • Relay 6 → GPIO12

    • Relais-Modul VCC → 5V (meist); Relais GND → gemeinsame GND

  • Stromversorgung & Masse

    • ESP32 3V3 Pin → ESP32-Versorgung (nicht für Relais)

    • Relais-VCC → 5V-Netzteil (USB-5V oder externes 5V)

    • Wichtig: Gemeinsame Masse (ESP32 GND + Relais GND + Netzteil GND) verbinden

  • Netz & Web

    • WiFi (2.4 GHz) — keine physische Verbindung (über WLAN), Webserver erreichbar über AP-IP 192.168.4.1 oder im STA-Modus

Wichtige Hinweise / Sicherheit

  1. Relais-Spannung prüfen: Viele Relais-Module benötigen 5V an VCC. Die Eingänge sind nicht immer 3.3V tolerant. Prüfe dein Modul.

    • Falls die Eingänge nicht 3.3V tolerant sind, verwende Treibertransistoren (z. B. NPN + Widerstand), MOSFETs oder ein Pegelwandler/Optokoppler zwischen ESP32 GPIO (3.3V) und Relais-Eingang.

    • Manche Relais-Module haben einen Jumper, um VCC opto-isoliert zu versorgen — lies das Datenblatt.

  2. Gemeinsame GND zwingend: Ohne gemeinsame Masse funktionieren die Signale nicht zuverlässig.

  3. Strombedarf: Relais können beim Schalten kurzzeitig hohe Ströme ziehen. Wähle ein Netzteil mit ausreichender Stromstärke (z. B. 5V, 2A oder mehr, abhängig vom Modul).

  4. TOUCH_IRQ ist im Code auf 255 gesetzt — das heißt, der Interrupt-Pin wird nicht benutzt. Touch wird per Polling gelesen. Wenn dein Touch-Modul einen IRQ-Ausgang hat, kannst du ihn optional anschließen an einen freien GPIO (und Code anpassen).

  5. TFT_eSPI-Pins: In deinem zweiten Sketch benutzt du TFT_eSPI — diese Bibliothek liest die Pinzuordnung aus der User_Setup-Datei oder User_Setup_Select. Die in dieser Erklärung verwendeten TFT-Pins (CS=5, DC=2, RST=4, MOSI=23, SCLK=18) sind basierend auf typischen Setups und dem ersten Sketch aus deiner Konversation. Falls du eine andere Pin-Konfiguration in User_Setup.h verwendest, passe die Verdrahtung entsprechend an.

Code

Mein Warenkorb
Wunschzettel
zuletzt angesehen
Kategorien