GITHUB : https://github.com/vova641/SImracing
# 🚗 Проект: Симрейсинг приборная панель (Dash) на ESP32-S3 и дисплее GC9A01
## 📌 Общее описание проекта
Разработана полноценная приборная панель для гоночных симуляторов (Assetto Corsa и других, поддерживаемых SimHub) на базе микроконтроллера ESP32-S3 и круглого TFT-дисплея GC9A01 (разрешение 240×240 пикселей). Устройство получает телеметрию (скорость, обороты, уровень топлива) через USB-порт от программы SimHub, отображает их на экране в виде светодиодной шкалы оборотов (10 сегментов), крупных цифр скорости и процента топлива. Дополнительно реализован Button Box – 6 независимых кнопок и 2 энкодера (с кнопками), состояния которых отправляются обратно в SimHub для управления игровыми функциями (например, дворники, переключение режимов, регулировка TC/ABS и пр.).
---
## 🧩 Используемые компоненты
| Компонент | Модель / характеристики | Количество |
|-----------|------------------------|-------------|
| Микроконтроллер | ESP32-S3 (8 MB Flash, 2 MB PSRAM) | 1 |
| Дисплей | GC9A01 240×240, SPI | 1 |
| Кнопки | тактовые (6 шт) | 6 |
| Энкодеры | EC11 (с кнопкой) | 2 |
| Резисторы | 10 кОм – не требуются (используются внутренние подтяжки) | – |
| Питание | от USB компьютера или внешнего 5V | – |
---
## 📚 Используемые библиотеки (Arduino IDE)
| Библиотека | Версия | Назначение |
|------------|--------|-------------|
| TFT_eSPI | 2.5.2 | Драйвер дисплея GC9A01 |
| LVGL | 8.3.11 | Графическая библиотека для интерфейса |
| ArduinoJson| 6.x | Парсинг JSON-данных от SimHub |
| ESP32Encoder| 0.8.1 | Работа с энкодерами (аппаратный PCNT) |
Внимание: библиотека ESP32Encoder требует наличие PCNT, который есть только у ESP32 и ESP32-S3 (на ESP32-C3 не работает).
---
## 🖥 Настройка SimHub (ПК)
### 1. Установка плагина Custom Serial Device
- В SimHub: Settings → Plugins → включить Custom Serial Devices.
### 2. Создание нового устройства
- Arduino & Boards → My Hardware → Add new serial device.
- Выбрать COM-порт ESP32, скорость 115200, отключить RTS и DTR.
- Включить Append newline character (\n).
### 3. Настройка исходящего протокола (от SimHub к ESP32)
Выбрать тип Javascript и в поле Update messages вставить:
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;
return JSON.stringify({ Speed: speed, Rpms: rpm, Fuel: fuel, MaxRpm: maxRpm }) + "\n";
### 4. Настройка входящих отображений (для кнопок и энкодеров)
Во вкладке Incoming создайте правила (mappings):
| Триггер (приходит от ESP32) | Действие (Action) |
|-----------------------------|-------------------|
| btn1 … btn6 | Emulate Keyboard → назначить клавишу или Simulator Action → команда игры |
| Enc1Clk, Enc2Clk | Simulator Action → например, Wipers Toggle |
| Enc1Value со значением 1 (или >0) | Increase Value (например, TC+) |
| Enc1Value со значением -1 (или <0) | Decrease Value (TC-) |
Для энкодеров удобно использовать *ActionA / ActionB** или *Adjust Value**.
---
## 🎨 Внешний вид интерфейса
- Фон: чёрный.
- 10 оранжевых светодиодов по окружности – загораются последовательно при росте оборотов (каждые 1000 об/мин).
- Цифровая скорость: шрифт 48, белый цвет, по центру (немного выше).
- Единицы измерения: "km/h" мелким шрифтом под скоростью.
- Топливо: синий шрифт 20, знак заправки, процент, расположен ниже скорости.
- При запуске: на 2 секунды показывается оранжевый логотип "SIM RACING" крупным шрифтом.
---
## 🔧 Возможные доработки
- Управление яркостью подсветки через ШИМ (пин BL подключить к любому GPIO, например 4, и использовать ledcWrite).
- Добавление красной зоны на тахометре (при 7000+ об/мин менять цвет LED).
- Передача номера передачи, температуры, времени круга (добавить поля в JSON и отобразить на экране).
- Использование энкодеров для навигации по меню на панели (переключение страниц).
---
## ⚠ Примечания
- Для ESP32-S3 в настройках платы в Arduino IDE выберите USB CDC On Boot: Enabled, иначе Serial может не работать.
- Пины 35–40 не рекомендуется использовать для кнопок – они только входные и не имеют внутренней подтяжки.
- Если энкодеры работают нестабильно, подключите резисторы 10 кОм между CLK/Dt и 3.3V или используйте метод setFilter(1023).
- Частота кадров на GC9A01 достаточная для плавного обновления скорости и оборотов (благодаря аппаратному SPI и LVGL).
---
## ✅ Заключение
Проект представляет собой полноценную автомобильную приборную панель для симрейсинга, сочетающую красивый графический интерфейс (LVGL) и физические органы управления (кнопки + энкодеры). Он легко масштабируется, поддерживает любые игры, совместимые с SimHub, и может быть использован как DIY-девайс для гоночных увлечений.
Source du modèle
