レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

ゲームボーイにDigispark(ATtiny85)をつないでPCとシリアル通信する

2019年03月08日 | ゲーム機

前回ゲームボーイとArduino Pro Miniとの間でシリアル通信を行いました。今度はもう少しゲームボーイ活用の可能性の幅を広げる為にPCとシリアル通信を行えるようにしてみたいと思います。

Arduino LeonardoやPro Microを使えば簡単に実現できそうですが、ここは勉強も兼ねて以前に使用したATtiny85搭載のDigisparkを使ってみることにしました。

DigisparkはPCとつないでもLeonardoやPro Microのようにcomポートは作ってくれません。シリアル通信を行うには、PC側でlibusbというライブラリを使ってプログラムを作る必要があるのです。この辺の詳しいことはネットに記事がたくさん投稿されているので確認して見て下さい。

とにかくまずDigisparkとPC間でシリアル通信できることを確認します。ありがたいことにDigisparkのシリアル通信のサンプルプログラムがGitHubで公開されているとのことなので、まずは入手してみました。gitをインストールしてあれば以下のコマンド一発で取得できるので簡単ですね。

git clone https://github.com/digistump/DigisparkExamplePrograms.git

Digisparkのシリアル通信についてネットではWindows環境での解説が多いのですが、いつもUbuntuでArduino開発を行っている都合上、今回はUbuntu上で動作確認を行いました。

サンプルにはC++とPythonの例があります。まずはC++を試してみました。
サンプルの入っているフォルダーDigisparkExampleProgramsの下のC++/monitorに移動してmakeコマンドを入力すれば、digiusbという実行ファイルが作成されます。ただしmakeコマンドでコンパイルする前に、libusbとlibncurses5のパッケージをインストールしておく必要があります。以下のようにaptコマンドでインストールしてしまいましょう。

sudo apt install libusb-dev libncurses5-dev

次にDigisparkのスケッチですが、これもArduino IDEから呼び出せるサンプルスケッチを使用します。
メニューのツール→ボードでDigispark(Default - 16.5mhz)を選んだら、ファイル→スケッチ例→DigisparkUSB→Echoを選択します。このスケッチをDigisparkに書き込んだら準備完了です。
DigisparkをUSB端子に差し込んで、Ubuntu側でコンパイルしたサンプルプログラムを以下のようにコマンドラインから実行します。

sudo ./digiusb

するとプロンプトが表示されるので、何か入力してリターンキーを押すとDigiaparkから入力したのと同じ文字列が返されてきます。
これでPCとDigisparkのシリアル通信について確認できました。あとはEchoスケッチを参考にしてゲームボーイと通信するためのスケッチを作成してみます。

作成したスケッチは前回のものと殆ど同じで、DigiUSBライブラリでPCからのデータを受信する部分を付け加えただけです。それとゲームボーイ側のプログラムは前回のものをそのまま利用します。

ゲームボーイとDigisparkの接続は以下のようにしました。

ゲームボーイ端子 → Digisparkピン
2 TXD → 0
3 RXD → 1
5 CLK → 2
6 GND → GND

Digisparkスケッチはこちら。

DigisparkGBsender.ino

念の為コンパイル済みのゲームボーイプログラムもアップしておきます。

receive.gb

使い方ですが、上記receive.gbを書き込んだゲームボーイを起動するとreceiving...と表示されますので、Ubuntuでコンパイルしたdigiusbを起動してプロンプトから何か入力すると、その文字がゲームボーイの画面に表示されます。



sudo ./digiusb < テキストファイル名

とすることでテキストファイルの内容を送信することも出来ます。また、DigisparkのサンプルプログラムのC++/sendのプログラムをコンパイルすれば、

sudo ./send "文字列"

と入力して任意の文字列を送信することも出来ます。

ところでゲームボーイに文字列を送信し続けて、画面がスクロールし始めると文字化けが発生します。たぶんゲームボーイ開発キット(GBDK)の問題だとは思うのですが詳しくは調べていません。ゲームボーイの画面表示はビットマップ表示ではなく、描画パターンの登録してあるタイルを画面に敷き詰めていくような表示方法なので、全画面表示に320個必要なところ白黒ゲームボーイは最大256タイルしか使えないのが影響しているのかもしれません。

ともかくこれでゲームボーイとPCの連携も可能になりました。こうなるとゲームボーイに色々接続して遊んでみたくなります。いくつか思いついた物もあるので、また後で試してみましょう。



最新の画像もっと見る

コメントを投稿