GITHUB :https://github.com/vova641/SImracing
# 🚗 Проект: приборная панель (Dash) для симулятора гонок на ESP32-S3 и дисплее GC9A01.
📌 Общее описание проекта
Разработана полноценная приборная панель для гоночных симуляторов (Assetto Corsa и других, поддерживаемых SimHub) на базе микроконтроллера.ESP32-S3и круглого TFT-дисплея.GC9A01(разрешение 240×240 пикселей). Устройство получает телеметрию (скорость, обороты, уровень топлива) через USB-порт от программы.СимХаб., отображает их на экране в виде светодиодной шкалы оборотов (10 сегментов), крупных цифр скорости и процента топлива. Дополнительно реализованоКоробка с кнопками.– 6 независимых кнопок и 2 энкодера (с кнопками), состояние которых передается обратно в SimHub для управления игровыми функциями (например, дворники, переключение режимов, регулировка TC/ABS и пр.).
---
🧩 Используемые компоненты.
| Компонент | Модель/характеристики | Количество |
|-----------|------------------------|-------------|
| Микроконтроллер | ESP32-S3 (8 МБ флэш-памяти, 2 МБ 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: Настройки → Плагины → включить Пользовательские последовательные устройства.
### 2. Создание нового устройства.
- Arduino и платы → Мое оборудование → Добавить новое последовательное устройство.
- Выбрать COM-порт ESP32, скорость.115200,Отключить RTS и DTR..
- Включить добавление символа новой строки (\n).
### 3. Настройка исходящего протокола (от SimHub к ESP32)
Выбрать тип.JavaScript.И в поле "Обновление сообщений" вставить:
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;
Возвращаем JSON.stringify({ Скорость: скорость, обороты: обороты, топливо: топливо, максимальные обороты: максимальные обороты }) + "\n";
### 4. Настройка входящих отображений (для кнопок и энкодеров)
На вкладке "Входящие" создайте правила (сопоставления):
| Триггер (исходит от ESP32) | Действие (Action) |
|-----------------------------|-------------------|
| btn1 … btn6 | Имитировать клавиатуру → назначить клавишу или Действие симулятора → команда игры |
| Enc1Clk, Enc2Clk | Действие симулятора → например, переключение стеклоочистителей |
| Enc1Value со значением 1 (или >0) | Увеличить значение (например, TC+) |
| Значение Enc1Value равное -1 (или <0) | Уменьшить значение (TC-) |
Для энкодеров удобно использовать *ActionA / ActionB** или *Adjust Value**.
---
🎨 Внешний вид интерфейса.
-Фон:Черный.
-10 оранжевых светодиодов.По окружности - они загораются последовательно при увеличении оборотов (каждые 1000 об/мин).
-Цифровая скорость:Шрифт 48, белый цвет, по центру (немного выше).
-Единицы измерения:"км/ч" мелким шрифтом под показанием скорости.
-Топливо:Синий шрифт 20, знак заправки, процент, расположен ниже скорости.
-При запуске:В течение 2 секунд отображается оранжевый логотип "SIM RACING" крупным шрифтом.
---
## 🔧 Возможные доработки.
- Управление яркостью подсветки через ШИМ (вывод BL подключить к любому GPIO, например 4, и использовать ledcWrite).
- Добавление красной зоны на тахометре (при 7000+ оборотах в минуту менять цвет светодиода).
- Передача номера передачи, температуры, времени круга (добавить поля в JSON и отобразить на экране).
- Использование энкодеров для навигации по меню на панели (переключение страниц).
---
⚠ Примечания
- Для ESP32-S3 в настройках платы в Arduino IDE выберите USB CDC On Boot: Enabled, иначе последовательный порт может не работать.
- Пины 35–40 не рекомендуется использовать для кнопок - они являются только входными и не имеют внутренней подтяжки.
- Если энкодеры работают нестабильно, подключите резисторы 10 кОм между CLK/Dt и 3.3V или используйте метод setFilter(1023).
- Частота кадров на GC9A01 достаточна для плавного обновления скорости и оборотов (благодаря аппаратному SPI и LVGL).
---
✅ Заключение
Проект представляет собой полноценную автомобильную приборную панель для симрейсинга, сочетающую красивый графический интерфейс (LVGL) и физические органы управления (кнопки + энкодеры). Он легко масштабируется, поддерживает любые игры, совместимые с SimHub, и может быть использован в качестве DIY-устройства для гоночных увлечений
Источник модели
