GITHUB :https://github.com/vova641/SImracing
# 🚗 Projekt: Simracing Armaturenbrett (Dash) auf ESP32-S3 und Display GC9A01
## 📌 Allgemeine Beschreibung des Projekts
Eine vollwertige Instrumententafel für Rennsimulationen (Assetto Corsa und andere, von SimHub unterstützte) wurde auf der Basis eines Mikrocontrollers entwickelt.ESP32-S3und eines runden TFT-Displays.GC9A01(Auflösung 240×240 Pixel). Das Gerät erhält Telemetrie (Geschwindigkeit, Drehzahl, Kraftstoffstand) über den USB-Port von der Software.SimHub, zeigt sie auf dem Bildschirm in Form einer LED-Drehzahlanzeige (10 Segmente), großer Geschwindigkeitszahlen und eines Kraftstoffanteils an. Zusätzlich wurde dies implementiert.Button-Box– 6 unabhängige Tasten und 2 Encoder (mit Tasten), deren Zustände an SimHub zurückgesendet werden, um Spielfunktionen zu steuern (z. B. Scheibenwischer, Moduswechsel, Einstellung von TC/ABS usw.).
---
## 🧩 Verwendete Komponenten
| Komponente | Modell / Eigenschaften | Anzahl |
|-----------|------------------------|-------------|
| Mikrocontroller | ESP32-S3 (8 MB Flash, 2 MB PSRAM) | 1 |
| Display | GC9A01 240×240, SPI | 1 |
| Knöpfe | Taktische (6 Stück) | 6 |
| Encoder | EC11 (mit Taste) | 2 |
| Widerstände | 10 kOhm –Nicht erforderlich.(interne Befestigungen werden verwendet) | – |
| Stromversorgung | über USB-Computer oder externes 5V-Netzteil | – |
---
## 📚 Verwendete Bibliotheken (Arduino IDE)
| Bibliothek | Version | Zweck |
|------------|--------|-------------|
| TFT_eSPI | 2.5.2 | Display-Treiber GC9A01 |
| LVGL | 8.3.11 | Grafische Bibliothek für die Benutzeroberfläche |
| ArduinoJson| 6.x | Parsing von JSON-Daten von SimHub |
| ESP32Encoder | 0.8.1 | Arbeit mit Encodern (Hardware-PCNT) |
Achtung:Die Bibliothek ESP32Encoder erfordert die Verfügbarkeit von PCNT, das nur bei ESP32 und ESP32-S3 vorhanden ist (es funktioniert nicht bei ESP32-C3).
---
## 🖥 Einrichtung von SimHub (PC)
### 1. Installation des Plugins "Custom Serial Device"
- In SimHub: Einstellungen → Plugins → Aktiviere Benutzerdefinierte serielle Geräte.
### 2. Erstellung eines neuen Geräts
- Arduino & Boards → Meine Hardware → Neues serielles Gerät hinzufügen.
- Wählen Sie den COM-Port des ESP32, Geschwindigkeit115200,RTS und DTR deaktivieren.
- Aktivieren Sie "Neue Zeile hinzufügen" (\n).
### 3. Einstellung des ausgehenden Protokolls (von SimHub zu ESP32)
Typ auswählenJavaScriptUnd im Feld "Update-Nachrichten" einfügen:
js
var speed = $prop('DataCorePlugin.GameData.NewData.SpeedKmh') ||
$prop('DataCorePlugin.GameData.NewData.Speed') || 0;
var rpm = $prop('DataCorePlugin.GameData.NewData.Rpms') || 0;
var fuel = $prop('DataCorePlugin.GameData.NewData.Fuel') || 0;
var maxRpm = $prop('DataCorePlugin.GameData.NewData.MaxRpm') || 10000;
Rückgabe von JSON.stringify({ Geschwindigkeit: Geschwindigkeit, Drehzahl: Drehzahl, Kraftstoff: Kraftstoff, Maximaldrehzahl: Maximaldrehzahl }) + "\n";
### 4. Einstellung der eingehenden Anzeigen (für Tasten und Encoder)
Erstellt in der Registerkarte "Eingehende" Regeln (Zuordnungen):
| Trigger (kommt vom ESP32) | Aktion |
|-----------------------------|-------------------|
| btn1 … btn6 | Tastatur emulieren → Taste zuweisen oder Simulator-Aktion → Spielkommando |
| Enc1Clk, Enc2Clk | Simulator-Aktion → zum Beispiel, Wipers Toggle |
| Enc1Value mit dem Wert 1 (oder >0) | Wert erhöhen (zum Beispiel TC+) |
| Enc1Value mit dem Wert -1 (oder <0) | Wert verringern (TC-) |
Für Encoder ist es praktisch, *ActionA / ActionB** oder *Adjust Value** zu verwenden.
---
🎨 Das Aussehen des Interfaces
-Hintergrund:Schwarz.
-10 orangefarbene LEDsAuf der Umfangsskala leuchten sie nacheinander auf, wenn die Drehzahl steigt (alle 1000 U/min).
-Digitale Geschwindigkeit:Schriftart 48, weiße Farbe, in der Mitte (etwas höher).
-Maßeinheiten:"km/h" in kleiner Schrift unter der Geschwindigkeit.
-Kraftstoff:Blauer Schriftgrad 20, Tankzeichen, Prozent, befindet sich unterhalb der Geschwindigkeit.
-Bei der Inbetriebnahme:Der orangefarbene "SIM RACING"-Logo wird für 2 Sekunden in großer Schrift angezeigt.
---
## 🔧 Mögliche Nachbesserungen
- Steuerung der Helligkeit der Beleuchtung über PWM (Pin BL an einen beliebigen GPIO anschließen, z. B. 4, und ledcWrite verwenden).
- Hinzufügen einer roten Zone auf dem Tachometer (bei 7000+ U/min sollte die LED-Farbe geändert werden).
- Übertragung der Übertragungsnummer, der Temperatur, der Rundenzeit (Felder in JSON hinzufügen und auf dem Bildschirm anzeigen).
- Verwendung von Encodern zur Navigation durch das Menü auf der Leiste (Seitenwechsel).
---
## ⚠ Hinweise
- Für ESP32-S3 wählen Sie in den Board-Einstellungen in Arduino IDE USB CDC On Boot: Enabled, andernfalls könnte Serial nicht funktionieren.
- Es wird nicht empfohlen, Pins 35–40 für Tasten zu verwenden - sie sind nur Eingangspins und haben keine interne Ziehvorrichtung.
- Wenn die Encoder nicht stabil funktionieren, schließen Sie Widerstände von 10 kOhm zwischen CLK/Dt und 3,3 V an oder verwenden Sie die Methode setFilter(1023).
- Die Bildfrequenz des GC9A01 ist ausreichend für eine flüssige Aktualisierung der Geschwindigkeit und der Drehzahl (dank des Hardware-SPI und LVGL).
---
## ✅ Schlussfolgerung
Das Projekt ist eine vollwertige Automobil-Armaturenbrett für Simracing, die eine schöne grafische Benutzeroberfläche (LVGL) und physische Bedienelemente (Tasten + Encoder) kombiniert. Es ist leicht skalierbar, unterstützt alle mit SimHub kompatiblen Spiele und kann als DIY-Gerät für Rennbegeisterte verwendet werden.
Fuente del modelo
