Lys Entertainment System
C++

Lys Entertainment System

Arduino/ESP8266を使って作られた、ちょっと変わったコンソールシステムのモックアップ

GitHub|
image

Arduino/ESP32を使って作った、ちょっと変わったゲーム機のモックアップです。これは趣味で作ったもので、
実際の製品ではありません。 最終的な構想は、自作の
ゲームを、サウンドとカラーディスプレイで楽しめる小型のハンドヘルド端末です。現時点ではまだその段階には程遠いです。
NESやSNES時代のゲームなら快適に動作するはずです。より高い解像度への対応は、
PSRAMを搭載したボードでの課題となります。

結局のところ、問題はRAMにあります。現在使用しているArduino Mega 2560には、わずか8 KBの
SRAMしか搭載されていません。これではカラーのフレームバッファを保持できないため、このボードではテキスト表示のみに留まっています。
次のプラットフォームはESP32 WROOMで、SRAMは約520 KBに増え、
高速なデュアルコアを搭載しています。これなら240x240のフレームバッファ(約115 KB)を収容でき、その解像度で本格的な
ゲームを動作させることができます。 WROOMにはPSRAMがないため、より高解像度の画面に必要な、はるかに
大きなフレームバッファを保持することはできません。ESP32-WROVERや
ESP32-S3は、数メガバイト級のPSRAMとオンボードストレージを備えており、
240pを超える画面にはこれが必要となります。

現状

開発初期段階であり、未完成です。現時点では、起動し、電源ボタンの入力を検知し、
ノンブロッキングのメロディーエンジンを通じて音楽を再生し、LCDにテキストを表示します。
ゲームはまだ存在しません。

現在は、Arduino Mega上で16x2文字LCDを駆動して動作しており、これが
コードのターゲットとなっています。 次のプラットフォームは決定済みです。ESP32 WROOMがSPI経由で1.54インチ
240x240 IPS ST7789ディスプレイを駆動する構成です。両部品とも3.3 Vで動作し、
現在の5 V LCDとは異なり、レベルシフトなしで組み合わせることができます。 これらの部品は現在発送中で、
到着するまでは移植作業は行われません。

ゲームはlyszt.netでホストされ、Wi-Fi経由でボードにダウンロードされます。
最初のバージョンでは、ゲームデータはESP32のオンボードフラッシュに保存されます。

ハードウェア

  • MCU: 現時点では Arduino Mega 2560 (ATmega2560)
  • ディスプレイ: 16x2 I2C 文字LCD(アドレス 0x27
  • オーディオ: ピン3に接続されたパッシブブザー
  • 入力:
    • ピン2の電源ボタン (INPUT_PULLUP、デバウンス処理済み)
    • 方向キー:上/下/左/右。現時点では単なるボタンであり、
      まだ何にも配線されていません
    • アクションボタン:A / B、こちらも同様で、まだ配線されていません

計画中(次のプラットフォーム)

  • MCU: ESP32 WROOM(3.3 V、デュアルコア、約520 KB SRAM)
  • ディスプレイ: 1.54インチ 240x240 IPS ST7789(SPI経由)
  • ストレージ: ゲームはオンボードフラッシュに保存、Wi-Fi経由でダウンロード
  • 将来: 240pを超えるPSRAMの余裕を確保するため、ESP32-WROVERまたはESP32-S3を採用

ビルド

PlatformIOプロジェクト、Arduinoフレームワーク。実際のプロジェクトは
Lys Entertainment System/ 配下に配置されています。

platform  = atmelavr
board     = megaatmega2560
framework = arduino
lib_deps  = marcoschwartz/LiquidCrystal_I2C

レイアウト

ソースコードは Lys Entertainment System/src/ ディレクトリにあります:

  • main.cpp — エントリポイント:配線、電源ボタン、メインループ。
  • system/System コア。電源状態、LCD、オーディオを管理します。
  • sounds/ — オーディオ。データとロジックに分かれています:
    • notes.h — 音程定数。
    • songs.{h,cpp} — 音楽データ(Song構造体とメロディの定義)。
    • sounds.{h,cpp} — ノンブロッキングのメロディエンジンとサウンドAPI。
    • audio_manager.{h,cpp} — エンジンをラップするオブジェクト指向ラッパー。
  • lcd/ — LCDテキスト用ヘルパー。
  • utils/ — 再利用可能なヘルパー(例:ノンブロッキングな wait)。