RP2040(Raspberry pi pico)のパワフルさを改めて感じたという話【GP2040-CE】

マイコンをいじっている方にとってはおなじみになりつつある(と個人的には感じている)Raspberry pi picoですが、最近知ったオープンソースプロジェクトで「GP2040-CE」という、Raspberry pi pico(またはRP2040チップを搭載しているマイコンボード)を使ったオープンソースのゲームパッドファームウェアがすごいと思ったので紹介したいと思います。

 

GP2040-CE

GP2040-CEとはRP2040チップをベースにしたRaspberry Pi Picoなどのマイコンボード用ゲームパッドファームウェアです。

GP2040-CEについてのドキュメント: https://gp2040-ce.info

github : GitHub – OpenStickCommunity/GP2040-CE

簡単に言うと、RP2040を搭載したボードでアーケードコントローラ(いわゆるアケコン)やゲームパッドを実現できる、というRP2040用ファームウェアですね。

このファームウェアを利用して最近流行りのレバーレスコントローラを自作している方々も結構いるようです。

 

機能

個人的にすごいと感じたのはRP2040チップだけでかなり多彩な機能を実装しています。

・WS2812系のフルカラーLEDをサポートしており、ボタンごとにLEDを設定することができる

・128×64モノクロI2Cディスプレイをサポートしており、ボタン状態を表示したり、設定により表示内容をカスタマイズすることも可能

・LWIPを使用したウェブサーバーが実装されており、ウェブページで各種の設定などを行うことができる

また、ボードをUSBケーブルでPCに接続するだけで、ネットワーク機器(ウェブサーバ)として振舞うようになっている

・ウェブでの設定はかなり多彩な設定が可能

  ・ボタン割り当て変更や入力モード変更設定

  ・ボードに搭載しているLEDの光らせ方などについての設定

  ・ボードに搭載しているLCDについての設定

  ・アドオン(追加機能)についての有効・無効設定

  ・設定内容のバックアップ機能(設定内容をバックアップファイルとして書き出し & バックアップファイルの読み込み)

などなど、、多彩すぎて挙げ切らないくらい色々な機能が実装されております。

 

特に面白いなと思ったのは、

Ethernet周りの回路やEEPROMなどの回路を必要とせず、ウェブサーバや各種設定変更の機能を実現できていることです。

・ウェブサーバ動作については、RP2040にはUSBコントローラが内蔵されているので、USB経由でのネットワーク機器として動作するようになっているようです。(ソースコードが複雑すぎて詳細な動作はほとんど理解できていませんが。。)

・また、ボード上のFlashメモリの一部の領域を各種の設定用に確保して、EEPROMのように設定を保存したり読み込んだりしているようです。

 

これによって、追加の周辺回路無しのRaspberry pi pico単体だけというシンプルな構成で、ウェブでの設定機能が実装できており、「こんな方法でこれほどのものが実現できるのかぁ、なるほどなぁ」と感心してしまいました。

ソースコードを眺めるだけでも勉強になりそうです。

 

RP2040は小規模なマイコンにしてはパワフルなほうだと思っていましたが、1チップでここまでできるんだと改めて思ったりしました。

 

 

●ウェブでの設定画面の一例(実際にRaspberry pi picoにGP2040-CEのファームウェアを書き込んで動作させています)

設定のトップページでは、ファームウェアバージョンやメモリの使用状況などが確認できます。

 

・ゲームパッドとしての動作設定画面

 

・各ボタンごとにLEDの色も設定可能

 

上記のようにウェブ設定画面は小規模マイコン上のウェブサーバで動作しているとは思えないくらいかなりしっかり作りこまれています。すごい。

 

左手デバイス(ショートカット用デバイス)として使える?

基本的にゲームで使用するコントローラ用として作られたファームウェアではあるのですが、設定で入力モードを「キーボード」にすることでキーボードとして動作させることもできるので(ボタンは最大18個までとなってしまいますが)、左手デバイスのようなショートカット用のデバイスとして使うこともできそうな気がします。

キーの割り当てもウェブ設定で変更可能なので、結構便利かもしれませんね。

なかなか面白そうなので、GP2040-CE用基板を作ってみようかな~、と思い始めています。