GITHUB :https://github.com/vova641/SImracing
# 🚗 プロジェクト: ESP32-S3とGC9A01ディスプレイに搭載されたシムレーシング用ダッシュボード
## プロジェクトの全般的な説明
マイクロコントローラをベースにした、レースシミュレータ(Assetto Corsaやその他のSimHub対応ゲーム)用のフル機能ダッシュボードが開発されました。ESP32-S3そして丸形のTFTディスプレイGC9A01(解像度240×240ピクセル)。このデバイスは、USBポートを通じてプログラムからテレメトリ(速度、回転数、燃料レベル)を受信します。シムハブそれらは、LEDの回転数ゲージ(10セグメント)、大きな速度数字、燃料残量として画面に表示されます。さらに、その他の機能も実装されています。ボタンボックス・6つの独立したボタンと2つのエンコーダ(ボタン付き)があり、それらの状態はSimHubに送信され、ゲーム機能(例えば、ワイパー、モード切り替え、TC/ABS調整など)を制御するために使用されます。
---
## 使用されているコンポーネント
コンポーネント | モデル/仕様 | 数量 |
|-----------|------------------------|-------------|
マイクロコントローラ | ESP32-S3 (8 MBフラッシュ、2 MB PSRAM) | 1 |
ディスプレイ | GC9A01 240×240, SPI | 1 |
ボタン | タクトスイッチ(6個) | 6個 |
エンコーダー | EC11 (ボタン付き) | 2 |
抵抗器 | 10 kΩ –必要ないです(内部の引き止めが使用されています) | – |
電源 | USBコンピュータまたは外部5Vから | – |
---
📚 使用されているライブラリ(Arduino IDE)
ライブラリ | バージョン | 目的 |
|------------|--------|-------------|
| TFT_eSPI | 2.5.2 | ディスプレイドライバー GC9A01 |
| LVGL | 8.3.11 | インターフェイス用のグラフィックライブラリ |
| ArduinoJson | 6.x | SimHubからのJSONデータのパース |
| ESP32Encoder | 0.8.1 | エンコーダーの操作(ハードウェアPCNT) |
注意:ESP32Encoderライブラリでは、PCNTが必要ですが、ESP32とESP32-S3のみに搭載されており、ESP32-C3では動作しません。
---
## 🖥 SimHubの設定(PC)
### 1. カスタムシリアルデバイスプラグインのインストール
- SimHubで:設定→プラグイン→カスタムシリアルデバイスを有効にする。
### 2. 新しいデバイスの作成
- Arduinoとボード→私のハードウェア→新しいシリアルデバイスを追加する。
- ESP32のCOMポートと速度を選択する115200、RTSとDTRを無効にする。
- 新しい行末文字 (\n) を有効にする。
### 3. 送信プロトコルの設定(SimHubからESP32へ)
タイプを選択してくださいジャバスクリプトそして、Update messagesのフィールドにこれを入力してください:
ジャバスクリプト
速度 = $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;
変数maxRpmは、$prop('DataCorePlugin.GameData.NewData.MaxRpm') または10000です。
返す値はJSON.stringify({ Speed: speed, Rpms: rpm, Fuel: fuel, MaxRpm: maxRpm }) + "\n"; です。
### 4. 入力表示の設定(ボタンやエンコーダー用)
イングリングタブで、ルール(マッピング)を作成してください。
トリガー(ESP32から来る) | アクション(Action) |
|-----------------------------|-------------------|
ボタン1 … ボタン6 | キーボードのエミュレート → キーの割り当てまたはシミュレーターアクション → ゲームのコマンド |
| Enc1Clk, Enc2Clk | シミュレーターアクション → 例えば、ワイパーの切り替え |
値が1(または0以上)のEnc1Value | 値を増やす(例:TC+) |
値が-1(または<0)のEnc1Value | 値を減らす(TC-) |
エンコーダーにとっては、*ActionA / ActionB* や *Adjust Value* を利用する方が便利です。
---
## 🎨 インターフェイスの外観
- 。背景:黒。
- 。10個のオレンジ色のLED周囲にあるランプは、回転数が上がるごとに順次点灯します(1000回転/分ごと)。
- 。デジタル速度:フォント48、白、中央に(少し上に)。
- 。測定単位:速度の下に小さな字で「km/h」が表示されています。
- 。燃料:青いフォント20、燃料残量の記号、パーセントで、速度の下に配置されています。
- 。起動時:2秒間、オレンジの「SIM RACING」ロゴが大きなフォントで表示されます。
---
## 🔧 改良の可能性
- シリアルパラレルインタフェース(BLピンを任意のGPIOに接続する例:4、ledcWriteを使用)を介してバックライトの明るさを制御する。
- タコメーターに赤いゾーンを追加する(7000回転以上でLEDの色を変更する)。
- 番号、温度、周回時間の送信(JSONにフィールドを追加して画面に表示する)。
- パネルのメニューナビゲーション(ページ切り替え)にエンコーダーを使用する。
---
⚠ 注意事項
- ESP32-S3の場合、Arduino IDEのボード設定でUSB CDC On Bootを有効にしてください。そうしないと、シリアル通信が正常にできない場合があります。
- 35~40番のピンはボタンに使用することをお勧めできません。これらのピンは入力専用であり、内部的なプルアップ機能はありません。
- エンコーダーが不安定に動作する場合は、CLK/Dtと3.3Vの間に10kΩの抵抗器を接続するか、setFilter(1023)メソッドを使用してください。
- GC9A01のフレームレートは、ハードウェアのSPIとLVGLのおかげで、スムーズな速度と回転数の更新に十分です。
---
✅ 結論
このプロジェクトは、美しいグラフィカルインターフェイス(LVGL)と物理的な操作部(ボタンとエンコーダー)を組み合わせた、シムレーシング用の完全な車載ダッシュボードです。これは簡単に拡張でき、SimHubと互換性のあるあらゆるゲームに対応し、レースに興味を持つ人々のためのDIYデバイスとして使用できます。
Modellquelle
