Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f9f686d81 | ||
|
|
e0c6784ecf | ||
|
|
72b47f6dd6 | ||
|
|
69d35e9a28 | ||
|
|
a3034f7c42 | ||
|
|
93bb0deba1 | ||
|
|
27a3ee840e |
@@ -11,17 +11,17 @@ für zwei Mikrocontroller, die per UART (230400 8N1, JSON-Zeilen) verbunden sind
|
||||
Änderungshistorie: `Changelog.txt` (Root), Version steht in `String version = "…"`.
|
||||
|
||||
- **ESP32-P4 – UART-Touch-Display (spiegelt den S3-Zustand).**
|
||||
Ordner: `JC_Display_Firmware/` (Hauptsketch `JC_Display_Firmware.ino`,
|
||||
Ordner: `P4_Display_Firmware/` (Hauptsketch `P4_Display_Firmware.ino`,
|
||||
UI in `ui.cpp`/`ui.h`, UART-Protokoll in `protocol_client.*`, LVGL 9.x).
|
||||
Hat **kein eigenes WLAN** (der ESP32-C6-Co-Prozessor ist ungenutzt); alle Daten
|
||||
kommen über UART vom S3. Eigene Version `DISPLAY_FW_VERSION` +
|
||||
`JC_Display_Firmware/Changelog.txt`.
|
||||
`P4_Display_Firmware/Changelog.txt`.
|
||||
|
||||
Wenn ich „S3/Controller/Maschine" sage, ist `Dual_PID_FastHeatUp.ino` gemeint;
|
||||
„P4/Display" ist der Ordner `JC_Display_Firmware/`.
|
||||
„P4/Display" ist der Ordner `P4_Display_Firmware/`.
|
||||
|
||||
**Nicht anfassen:** Der Ordner `Sicherungen/` enthält nur datierte Versions-Backups
|
||||
(`.ino`) — niemals dort editieren. Unter `JC_Display_Firmware/JC4880P443C_I_W/` liegen
|
||||
(`.ino`) — niemals dort editieren. Unter `P4_Display_Firmware/JC4880P443C_I_W/` liegen
|
||||
reine Hersteller-Demos/Beispiele (Board-Support), ebenfalls nicht als Projektcode behandeln.
|
||||
|
||||
# Agent Instructions
|
||||
@@ -33,8 +33,8 @@ reine Hersteller-Demos/Beispiele (Board-Support), ebenfalls nicht als Projektcod
|
||||
## Git-Workflow
|
||||
|
||||
- Host: Gitea `git.mueller.black`, Repo `thomas/Dual-PID`, User `thomas`, CLI `tea`.
|
||||
- Aenderungen immer ueber Feature-Branch + Merge-Request (`tea pr create`), nie direkt auf `main` committen oder pushen.
|
||||
- Pull/Merge-Requests dürfen immer selbstständig gemergt werden (Auto-Merge, kein grünes CI erforderlich, via `tea pr merge` oder Gitea-API); danach den Merge kurz melden.
|
||||
- Aenderungen immer ueber Feature-Branch + Merge-Request, nie direkt auf `main` committen oder pushen.
|
||||
- PR anlegen **und** mergen bevorzugt über die **Gitea-REST-API** (PowerShell `Invoke-RestMethod` auf `https://git.mueller.black/api/v1/repos/thomas/Dual-PID/pulls[/<nr>/merge]`, Token aus `C:\Users\Thomas\AppData\Local\tea\config.yml`, nur in Variable, nie ausgeben), da die `tea`-CLI gegen `git.mueller.black` oft hängt und nie zurückkehrt. `tea pr create`/`tea pr merge` nur als Ausweichweg. PRs dürfen selbstständig gemergt werden (Auto-Merge, kein grünes CI erforderlich); danach den Merge kurz melden.
|
||||
- Kein Force-Push, kein History-Rewrite auf geteilten Branches.
|
||||
- Commit-Identitaet bleibt `raw-designs` / `Thomas@raw-designs.de` (globale Git-Config, nicht aendern).
|
||||
- Commit-Messages im Conventional-Commits-Format (feat/fix/docs/refactor/...).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# JC4880P443C-I-W Touch-Display — UART-Protokoll & Architektur
|
||||
# P4-Touch-Display — UART-Protokoll & Architektur
|
||||
|
||||
Status: Entwurf v1.0 der Doku · Firmware-Protokollversion: **1** (vorhanden, abgeschaltet) ·
|
||||
Ziel-Protokollversion: **2** (geplante Erweiterungen)
|
||||
@@ -16,11 +16,11 @@ Bewusste Designentscheidung (siehe Projektbesprechung):
|
||||
|
||||
- Das **Webinterface bleibt auf der Hauptplatine** (ESP32-S3). Es bleibt unverändert
|
||||
die zentrale Steuerungs- und Konnektivitätsinstanz.
|
||||
- Das **JC-Display ist ein vollwertiges Touch-Bediengerät**, das über UART angebunden
|
||||
- Das **P4-Display ist ein vollwertiges Touch-Bediengerät**, das über UART angebunden
|
||||
ist und denselben Funktionsumfang bietet wie das Webinterface — aber **kein** eigenes
|
||||
WLAN/Webserver betreibt.
|
||||
- Das **OLED (SH1106G) bleibt optional** und wird wie bisher über ein **Compile-Flag**
|
||||
gewählt (`ENABLE_DISPLAY`). Es ist unabhängig vom JC-Display.
|
||||
gewählt (`ENABLE_DISPLAY`). Es ist unabhängig vom P4-Display.
|
||||
|
||||
```
|
||||
+----------------------------+ UART (GPIO43/44) +---------------------------+
|
||||
@@ -34,13 +34,13 @@ Bewusste Designentscheidung (siehe Projektbesprechung):
|
||||
| - OLED (optional) | | ST7701 / GT911 / ES8311 |
|
||||
+----------------------------+ +---------------------------+
|
||||
|
||||
* Der ESP32-C6 auf dem JC-Display (WLAN/BT) wird in diesem Projekt NICHT für die
|
||||
* Der ESP32-C6 auf dem P4-Display (WLAN/BT) wird in diesem Projekt NICHT für die
|
||||
Maschinensteuerung benötigt. WLAN/Webinterface laufen weiterhin auf der S3.
|
||||
```
|
||||
|
||||
### Rollenverteilung
|
||||
|
||||
| Aufgabe | S3 (Hauptplatine) | P4 (JC-Display) |
|
||||
| Aufgabe | S3 (Hauptplatine) | P4 (P4-Display) |
|
||||
|---|---|---|
|
||||
| Echtzeit-Regelung (PID, SSR, Sicherheit) | **ja** | nein |
|
||||
| Sensoren (NTC, MAX6675, Waage) | **ja** | nein |
|
||||
@@ -76,7 +76,7 @@ schickt Bedienwünsche als Kommandos. So bleiben Web-UI, OLED und Touch-Display
|
||||
```
|
||||
|
||||
> **Hinweis (bewusst akzeptiert):** GPIO43/44 sind beim ESP32-S3 zugleich die Standard-
|
||||
> Pins der seriellen Debug-Konsole (UART0). Solange das JC-Display dort angeschlossen ist,
|
||||
> Pins der seriellen Debug-Konsole (UART0). Solange das P4-Display dort angeschlossen ist,
|
||||
> steht die klassische serielle Debug-Ausgabe an diesen Pins nicht parallel zur Verfügung.
|
||||
> Debug/Logging erfolgt dann über USB-CDC bzw. das Webinterface. Diese Pins wurden
|
||||
> ausdrücklich beibehalten, weil sie auf der Platine herausgeführt sind.
|
||||
@@ -519,7 +519,7 @@ Für ein vollwertiges 480×800-Touch-UI fehlen v1 noch einige Daten/Funktionen.
|
||||
## 9. OLED-Koexistenz (Compile-Flag)
|
||||
|
||||
- OLED bleibt über `ENABLE_DISPLAY` (Compile-Flag) wählbar — unverändert.
|
||||
- Das JC-Display wird über `TOUCH_UART_ENABLED` (Compile-Flag) aktiviert.
|
||||
- Das P4-Display wird über `TOUCH_UART_ENABLED` (Compile-Flag) aktiviert.
|
||||
- **Geplante Änderung:** beide Flags strikt **unabhängig** halten, damit alle Kombinationen
|
||||
baubar sind:
|
||||
|
||||
@@ -562,7 +562,7 @@ Puffergrößen/Chunking, optionaler CRC + Handshake, `action`-Stringliste dokume
|
||||
**Löschen:** Nichts.
|
||||
|
||||
**Fully-Kiosk bleibt erhalten** (Entscheidung) — als eigenständige, optionale Funktion
|
||||
neben dem JC-Display. Lastbewertung der S3:
|
||||
neben dem P4-Display. Lastbewertung der S3:
|
||||
- Einziger Aufruf `sendFullyKioskLoadUrl()` wird **nur bei Standby-Zustandswechsel**
|
||||
getriggert (`if (standbyModeActive != lastStandbyModeActive)`), **nicht periodisch**
|
||||
(wenige Male pro Tag).
|
||||
@@ -586,10 +586,10 @@ neben dem JC-Display. Lastbewertung der S3:
|
||||
6. **[offen, optional]** CRC + ggf. Puffer-Feinjustage (§8.3) — bewusst nicht als toter,
|
||||
ungetesteter Code eingebaut; bei Bedarf später.
|
||||
7. **[offen, durch dich]** `TOUCH_UART_ENABLED` auf 1 setzen + Build verifizieren, **sobald**
|
||||
das JC-Display physisch an Serial1 (GPIO43/44) hängt. Bewusst noch **0**, damit die
|
||||
das P4-Display physisch an Serial1 (GPIO43/44) hängt. Bewusst noch **0**, damit die
|
||||
serielle Debug-Konsole (GPIO43/44) im aktuellen Betrieb erhalten bleibt.
|
||||
|
||||
### Phase B — P4-Seite (JC-Display, Projekt `JC_Display_Firmware/`)
|
||||
### Phase B — P4-Seite (P4-Display, Projekt `P4_Display_Firmware/`)
|
||||
Grundgerüst angelegt (Arduino-ESP32 P4 + LVGL 9 + ArduinoJson 7). Aufteilung:
|
||||
`config.h`, `machine_state.h`, `protocol_client.*`, `ui.*`, `display_hal.*`, `.ino`, `README.md`.
|
||||
|
||||
@@ -603,7 +603,7 @@ Grundgerüst angelegt (Arduino-ESP32 P4 + LVGL 9 + ArduinoJson 7). Aufteilung:
|
||||
(`display_hal.cpp`, Schalter `JC_USE_REAL_PANEL`): MIPI-DSI/ST7701, GT911 (I²C SDA=7/SCL=8),
|
||||
Backlight GPIO23, LCD-Reset GPIO5; LVGL-Port mit eigenem Task + Lock. Stub-Modus bleibt für
|
||||
Schreibtisch-Tests. Vendor-BSP-Dateien sind in den Sketch zu kopieren (siehe Projekt-README).
|
||||
5. **[festgelegt]** UART-Pins am JC-Display: **P4 GPIO50 (TX) / GPIO51 (RX)** vom Expand-IO-Header
|
||||
5. **[festgelegt]** UART-Pins am P4-Display: **P4 GPIO50 (TX) / GPIO51 (RX)** vom Expand-IO-Header
|
||||
JP1 (Schaltplan `4_USB&IO.png`). Gegenseite S3 unverändert GPIO43/44.
|
||||
6. **[offen]** Weitere Screens: Einstellungen (Brew/Service/Sensor), Profil-Auswahl/-Editor,
|
||||
PID/AutoTune-Bedienung; Ausrichtung Hochformat (Rotation 0 in `pins_config.h`).
|
||||
@@ -1,55 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "config.h" // liefert JC_PANEL_TYPE (C-sicher, keine Rueckabhaengigkeit)
|
||||
|
||||
#define EXAMPLE_LVGL_PORT_TASK_MAX_DELAY_MS 500 //range 2 to 2000
|
||||
#define EXAMPLE_LVGL_PORT_TASK_MIN_DELAY_MS 5 //range 1 to 100
|
||||
#define EXAMPLE_LVGL_PORT_TASK_PRIORITY 4
|
||||
#define EXAMPLE_LVGL_PORT_TASK_STACK_SIZE_KB 32 //KB (erhoeht: komplexe UI, Listen-Rendering, JSON in Callbacks)
|
||||
#define EXAMPLE_LVGL_PORT_TASK_CORE -1 //range -1 to 1
|
||||
#define EXAMPLE_LVGL_PORT_TICK 2 //ragne 1 to 100
|
||||
|
||||
#define EXAMPLE_LVGL_PORT_AVOID_TEAR_ENABLE 1
|
||||
|
||||
#ifdef EXAMPLE_LVGL_PORT_AVOID_TEAR_ENABLE
|
||||
// 2 = Triple-Buffer + LVGL Full-Refresh: zeichnet bei jeder Aenderung das komplette
|
||||
// Bild, daher zeigen statische Flaechen (z.B. Tab-Leiste) nie alten Bufferinhalt.
|
||||
// (Mode 3 = Direct-Mode flackert bei nie neu gezeichneten Bereichen.)
|
||||
// Bei Rotation 90 nutzen beide Modi ohnehin 3 Framebuffer -> kein Mehrverbrauch.
|
||||
#define EXAMPLE_LVGL_PORT_AVOID_TEAR_MODE 2 //range 1 to 3
|
||||
|
||||
#if JC_PANEL_TYPE == JC_PANEL_70
|
||||
// 7,0" JD9165: Panel ist nativ 1024x600 Querformat -> keine Rotation, kein PPA noetig.
|
||||
#define EXAMPLE_LVGL_PORT_ROTATION_DEGREE_ 0 // 0,90,180,270
|
||||
#define EXAMPLE_LVGL_PORT_PPA_ROTATION_ENABLE 0
|
||||
#else
|
||||
// 4,3" ST7701: Panel ist physisch 480x800 Hochformat.
|
||||
#define EXAMPLE_LVGL_PORT_ROTATION_DEGREE_ 270 // 0,90,180,270 (270 = Querformat 800x480, um 180 Grad gedreht vs. 90)
|
||||
#define EXAMPLE_LVGL_PORT_PPA_ROTATION_ENABLE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// LCD_H_RES/LCD_V_RES = NATIVE Panel-Aufloesung (vor der LVGL-Rotation).
|
||||
#if JC_PANEL_TYPE == JC_PANEL_70
|
||||
|
||||
#define LCD_H_RES 1024
|
||||
#define LCD_V_RES 600
|
||||
|
||||
#define LCD_RST 27
|
||||
#define LCD_LED 23
|
||||
|
||||
#else
|
||||
|
||||
#define LCD_H_RES 480
|
||||
#define LCD_V_RES 800
|
||||
|
||||
#define LCD_RST 5
|
||||
#define LCD_LED 23
|
||||
|
||||
#endif
|
||||
|
||||
#define TP_I2C_SDA 7
|
||||
#define TP_I2C_SCL 8
|
||||
#define TP_RST -1
|
||||
#define TP_INT -1
|
||||
@@ -1,3 +1,40 @@
|
||||
Version 1.6.1:
|
||||
- Waveshare 7" (H): Bild und Touch lassen sich um 180 Grad drehen, wenn das Panel auf dem
|
||||
Kopf eingebaut ist. Schalter WS7_ROTATE_180 in pins_config.h, Vorgabe ist gedreht.
|
||||
Die Drehung übernimmt der PPA-Grafikbeschleuniger des ESP32-P4 - die Software-Rotation
|
||||
des LVGL-Ports rechnet nur in RGB565 und wäre für dieses Panel unbrauchbar.
|
||||
- Der Touch dreht mit, sonst läge die Bedienung spiegelbildlich zum Bild.
|
||||
|
||||
Version 1.6.0:
|
||||
- Neu: Dieselbe Firmware läuft jetzt auch auf einem Waveshare ESP32-P4-Pico mit dem
|
||||
Waveshare 7inch DSI LCD (H) (1280x720). Umgeschaltet wird über „JC_PANEL_TYPE" in
|
||||
config.h; WS_PANEL_7H ist ab dieser Version die Vorgabe, JC_PANEL_43 und JC_PANEL_70
|
||||
bleiben unverändert verfügbar.
|
||||
- Das Waveshare-Panel hängt hinter einer Bridge, die ausschließlich RGB888 annimmt. LVGL
|
||||
rechnet für dieses Panel deshalb mit 24 statt 16 Bit Farbtiefe. lv_conf.h liest dazu
|
||||
JC_PANEL_TYPE aus config.h, damit Sketch und LVGL-Bibliothek garantiert dieselbe
|
||||
Farbtiefe benutzen; display_hal.cpp bricht den Build ab, falls sie auseinanderlaufen.
|
||||
Der Panelwechsel muss aus diesem Grund in config.h erfolgen und nicht per Compiler-Flag.
|
||||
- Bringup ohne Hersteller-Panel-Treiber: DSI-Bus, Kommandokanal und DPI-Panel werden direkt
|
||||
angelegt. Entscheidend ist die Legacy-Referenztaktquelle PLL_F20M - mit der Standardquelle
|
||||
bleibt der Bildschirm auf ESP32-P4 Rev. 1.3 / ECO2 schwarz. Die Zeitbasis (2 Lanes zu
|
||||
1250 Mbit/s, 80 MHz DPI-Takt, Austastlücken 64/64/64, rund 60 Hz) steht als WS7_*-Werte
|
||||
in pins_config.h und ist dort anpassbar, falls das Bild reißt.
|
||||
- Panel-Freigabe und Helligkeit laufen beim Waveshare nicht über einen PWM-Pin, sondern über
|
||||
Register der Bridge auf I2C-Adresse 0x45. Die Hintergrundbeleuchtung wird bewusst erst
|
||||
eingeschaltet, wenn die DSI-Ausgabe steht - sonst blitzt beim Start Bildrauschen auf.
|
||||
Standby-Abdunklung und „Uhrzeit im Standby" funktionieren wie bei den JC-Panels.
|
||||
- Touch: Der GT9271 des Waveshare-Panels benutzt dieselbe Registerbelegung wie der GT911,
|
||||
liegt aber auf I2C-Adresse 0x14 und meldet im Hochformat. X und Y werden deshalb getauscht
|
||||
und auf die Bildfläche begrenzt; Ausreißer des Controllers landen nicht mehr als Klick am
|
||||
Bildrand. Sollte die Bedienung spiegelverkehrt reagieren, lässt sich das mit
|
||||
WS7_TOUCH_MIRROR_RAW_X / _Y in pins_config.h umdrehen.
|
||||
- Der Framebuffer wächst auf 3 x 2,8 MB (rund 8,3 MB PSRAM). Auf dem P4-Pico mit 32 MB
|
||||
PSRAM ist das unkritisch.
|
||||
- Die UART-Pins zur Hauptplatine sind für das Waveshare-Board getrennt eingestellt, weil
|
||||
dessen 40-poliger Header eine andere Belegung hat als die JC-Panels: TX = GPIO17,
|
||||
RX = GPIO18 (JC-Panels unverändert TX = GPIO33, RX = GPIO31).
|
||||
|
||||
Version 1.5.0:
|
||||
- Neu: Dieselbe Firmware unterstützt jetzt auch das 7-Zoll-Display Guition JC1060P470C-I-W
|
||||
(JD9165, 1024x600) zusätzlich zum bisherigen 4,3-Zöller JC4880P443C-I-W (ST7701, 480x800).
|
||||
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |