2023年8月25日金曜日

DIYレトロゲーム機「Nibble」の開発環境構築 その1

「Nibble(ニブル)」の開発環境

クラウドファンディングサイト「Makuake」でオーダーした、DIYレトロゲーム機「Nibble(ニブル)」。

Nibble


以前このブログで、キットの内容組立てて電源を入れるまでを紹介させていただきました。

執筆時点では、まだコチラで購入できますよ~。

最初から入っているゲームは一通り遊んでみたので、次は自分でプログラミングです!

とりあえず、簡単なサンプルプログラムをビルド、転送して、その後、工場出荷状態に戻すまでを確認してみようと思いました。

工場出荷状態に戻せないと、せっかく最初から入っていたゲームが遊べなくなってしまうので、この確認は重要です。

この「Nibble」は、知育玩具という扱いなので、子供向けには「CircuitBlocks」(ブロックを組み合わせるビジュアル言語)という開発環境を使用することが推奨されています。

この「CircuitBlocks」については付属のドキュメント - コーディング最初のステップ - Nibble_JP coding-first steps.pdf - を参照してください。

ここでは、C++での開発環境構築に挑戦します!

その場合の開発環境としては「Arduino IDE」と「VisualStudio Code」の2種類が使えるようです。

両方とも見ていきましょう。


Arduino IDEでの開発

付属のドキュメント - セットアップガイド - Nibble_JP Setup Guide.pdf - の通りに開発環境を構築してみました。

特に問題は無さそうですが、このドキュメント、サンプルのソースコードが文字欠け、文字化けしてますね!

正しくは、以下の通りです(だと思います)。

  1. #include <Nibble.h>
  2. Display* display;
  3. Sprite* sprite;
  4. void setup() {
  5.   // put your setup code here, to run once:
  6.   Nibble.begin();
  7.   display = Nibble.getDisplay();
  8.   sprite = display->getBaseSprite();
  9.   sprite->clear(TFT_BLACK);
  10.   sprite->setTextColor(TFT_WHITE);
  11.   sprite->setTextFont(2);
  12.   sprite->setCursor(0, 0);
  13.   sprite->print("Hello World!");
  14.   display->commit();
  15. }
  16. void loop() {
  17.   // put your main code here, to run repeatedly:
  18.   delay(1000);
  19. }


このスケッチは、そのままビルドが通りました!

こんな感じ。

Arduino IDE - 1


ドキュメントと異なるのは、今回はまだパソコンと「Nibble」を接続して、このスケッチを転送していないことです。

今の段階では工場出荷状態に戻す方法が分からないので、このプログラムを「Nibble」に書き込んでしまったら、元に戻せなくなってしまうからです!

なので今回は、ビルド&転送の「→」ではなく、ビルドの「V」をクリックするだけ!

Arduino IDE - 2


VisualStudio Codeでの開発

付属のドキュメント - プログラミングガイド - Nibble_JP Programming Guide.pdf - の通りに開発環境を構築してみました。


が…。


これが難題!

「VisualStudio Code」と、その拡張「PlatformIO」をインストールするまでは良かったんです。

これらの作業が終わって「VisualStudio Code」を再起動します。

そして、画面左側の「アリの顔面」マークをクリックします。

VisualStudio Code - 1


コイツね。

アリの顔面


次は、切り替わった画面左側の階層構造のリストから「QUICK ACCESS」→「PIO Home」→「Open」をクリックです。

VisualStudio Code - 2


以下のような表示に切り替わりますので「New Project」をクリック。

VisualStudio Code - 3


続けて、ドキュメント通りにプロジェクトを作成していきます。

必要な項目を埋めて「Finish」ボタンをクリック!

VisualStudio Code - 4


途中の以下のような表示も「Yes, I trust the authers」ボタンをクリックします。

VisualStudio Code - 5


さて、ここでドキュメントに不穏な表記が!

「簡単なプログラムの作成」の章です。

それによると…


ここで、必要なライブラリや設定ファイルをGitHubのリポジトリからダウンロードし、プロジェクトディレクトリに配置する必要があります。


…???

なんのこっちゃ!?

じゃあ、その必要なライブラリとか設定ファイルとか、GitHubのリポジトリの場所は?

リンクも何の表記もありません!


なんでソコの説明を端折っちゃうかな~?


まあいいや、と作成されたプロジェクトの「main.cpp」を開いて…

VisualStudio Code - 6


ここに「Arduino IDE」で書いたスケッチと同じソースをコピペしてビルドすれば動くやろ!

ビルドコマンドのボタンは、画面下部にある小さなチェックマークです。

VisualStudio Code - 7


これをクリック!

VisualStudio Code - 8


結果…


エラー発生でビルド通らず!

撃沈!!

VisualStudio Code - 9


…うん。

まあ。

人生そんなもんだよ。


...しかし、諦めずにそれから色々調べました!

その甲斐あって、以下の手順を踏めばビルドが通るようにはなりました。


まず、先程のビルドのエラーメッセージから、何らかのファイルが不足していると推察。

今の時点で、この「Hello World」プロジェクトは以下のディレクトリに生成されているハズです。


C:\Users\<ユーザー名>\Documents\PlatformIO\Projects\Hello World


このディレクトリの中の「lib」というディレクトリにご注目を。

「Hello World」プロジェクトのディレクトリ


この「lib」ディレクトリの中には「README」ファイル以外は何も入っていません。

「lib」ディレクトリ - 1


ここに不足しているファイルを配置すれば良いのでは?

足りないファイル(ていうかライブラリ)は「Arduino IDE」で使っているものを持ってきましょう!

その場所は、普通にインストール作業を進めて頂いた場合は、以下のディレクトリに入っています。


C:\Users\<ユーザー名>\AppData\Local\Arduino15\packages\cm\hardware\esp8266\1.2.1\libraries


…トライ&エラーを繰り返しながら、少なくともこの中にある以下の3つのディレクトリを「Hello World」プロジェクトの「lib」ディレクトリにコピーすればよいことが分かりました。


・TFT_eSPI

・CircuitOS

・Nibble

「lib」ディレクトリ - 2


その後「Hello World」プロジェクトのディレクトリ直下にある「platformio.ini」というファイル…。

VisualStudio Code - 10


これを以下のように編集します。

  1. ; PlatformIO Project Configuration File
  2. ;
  3. ; Build options: build flags, source filter
  4. ; Upload options: custom upload port, speed and extra flags
  5. ; Library options: dependencies, extra library storages
  6. ; Advanced options: extra scripting
  7. ;
  8. ; Please visit documentation for the other options and examples
  9. ; https://docs.platformio.org/page/projectconf.html
  10. [env:esp12e]
  11. platform = espressif8266
  12. board = esp12e
  13. framework = arduino
  14. ; 以下追記!
  15. build_flags =   -Os
  16.                 -g
  17.                 -DCIRCUITOS_LITTLEFS
  18.                 -DCIRCUITOS_TONE
  19.                 -DCIRCUITOS_LOWRAM
  20.                 -DST7735_DRIVER
  21.                 -DTFT_WIDTH=128
  22.                 -DTFT_HEIGHT=128
  23.                 -DST7735_GREENTAB128
  24.                 -DTFT_RGB_ORDER=TFT_BGR
  25.                 -DTFT_MOSI=13
  26.                 -DTFT_SCLK=14
  27.                 -DTFT_MISO=-1
  28.                 -DTFT_CS=-1
  29.                 -DTFT_DC=2
  30.                 -DTFT_RST=-1
  31.                 -DSPI_FREQUENCY=27000000
  32.                 -DLOAD_GFXFF
  33. build_unflags = -Werror=return-type


この状態で、再ビルドです!


うぉし!

ビルドが通りました~!!

VisualStudio Code - 11


この「VisualStudio Code」でビルドして生成された「Hello World」プログラムのバイナリと、冒頭の「Arduino IDE」で生成したスケッチのバイナリは、全く同じではないにしろ、似たようなファイルサイズです。

なので、このまま転送して「Nibble」で動作させれば同様の動きをするものと思われます。

多分「Nibble」の画面に黒をバックに白地で「Hello World!」と表示されるのかな?


さて、思いのほか情報が少なくて「VisualStudio Code」の方は、いきなりドツボにハマってしまいました。

以降は、そのソースコードの入手法も含め、工場出荷状態に戻す方法を探っていきたいと思います。

そうしないと、オリジナルのプログラムを動かすこともできませんからねぇ...。

頑張ります!


<続く>

2023年8月15日火曜日

TOPPERS/ASP - PIC32MX版 その5

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


MPLAB Harmonyとは?

MPLAB Harmony」とは、ドライバ、プロトコル、スタック、コーディングユーティリティ、ビルドシステムなどを開発者に提供するソースコードのライブラリです。

いわゆる純正のライブラリパッケージであり、これを使用するとCPUに内蔵されているペリフェラル(周辺機器)を簡単に利用することができるというものです。

今回の「TOPPERS/ASP PIC32MX版」のカーネル内でも、割り込み、タイマーやシリアル通信ドライバなどは、この「MPLAB Harmony」のドライバを使用しています。

ところが、この「MPLAB Harmony」のソースコードのライセンスの条項が不明瞭なために再配布できません。

そのため「TOPPERS/ASP PIC32MX版」のソースコードが不完全なものとなり、そのままではビルドが通らず、通すためには手動で不足分のソースコードをコピーしていただくという手間を強いることになってしまいました。

申し訳ありません…。

では、その「MPLAB Harmony」のソースコードを何処から入手すれば良いのか?

そのためには、インストールした「MPLAB X IDE」上で雛形となるプロジェクトを作って、そこで生成された「MPLAB Harmony」のソースコードを「TOPPERS/ASP PIC32MX版」のソースツリーにコピーするという方法を採ります。

ちなみに、この「MPLAB Harmony」は、すでにインストール済の「MPLAB X IDE」には付随しておらず、別途ダウンロードとインストールが必要になります。

今回はやたらとダウンロード/インストールするものが多いですね。

こらえてつかぁさい…。


MPLAB Harmonyのインストール

「MPLAB Harmony」は、以下のページでダウンロードします。


https://www.microchip.com/en-us/tools-resources/configure/mplab-harmony/version-2

このページの下の方に行ってもらって…。

Harmonyダウンロードページ - 1


「MPLAB Harmony Integrated Software Framework v2.06 Windows」という表記の右側の「Download」という表示をクリックします。

Harmonyダウンロードページ - 2


ダウンロードが完了すると「harmony_v2_06_windows_installer.exe」というファイルが生成されますので、これをダブルクリック!

以下のようにインストーラが起動します。

ここでは「Next>」ボタンをクリックです。

Harmonyインストーラ - 1


同意せざるを得んでしょう…。

ラジオボタンを「I accept the agreement」に選択してから「Next>」ボタンをクリックしましょう。

Harmonyインストーラ - 2


しばらくは「Next>」ボタンを連打です。

Harmonyインストーラ - 3


Harmonyインストーラ - 4


Harmonyインストーラ - 5


ようやくインストール作業が開始されたようです。

これも、そこそこ時間がかかります。

終わるまでTVでも観ていてください。

Harmonyインストーラ - 6


終了すると以下のような表示となります。

Finish」ボタンをクリックしてインストーラを終了させましょう。

Harmonyインストーラ - 7


これで「MPLAB Harmony」のインストールは終了です。

しかし、これを使うにはまだまだ作業が必要です!


MPLAB HarmonyのIDEへの登録

すでにインストール済みの「MPLAB X IDE」は、先程インストールしたばかりの「MPLAB Harmony」の存在を知りません。

(大体、この時点で「MPLAB X IDE」は一回も起動させていませんしねぇ。)

ですので「MPLAB X IDE」に「MPLAB Harmony」の存在を知らせて、それを使えるようにする作業が必要です。

そこで、まずは「MPLAB X IDE」を起動します。

普通にインストールした場合、PCのデスクトップに「MPLAB X IDE」のショートカットがあるはずですので、それをダブルクリックします。

すると、以下のようなスプラッシュスクリーンが表示されます。

「MPLAB X IDE」スプラッシュスクリーン


しばらくすると、まっさらな状態のIDEが立ち上がります。

キレイでシッカリ作られていそうなIDEですね!

「MPLAB X IDE」 - 1


次に「MPLAB X IDE」上部の「Tools」メニューから「Plugins」をクリックします。

「MPLAB X IDE」 - 2


以下のようなダイアログが現れます。

このダイアログの「Download」タグをクリックしましょう。

「Plugins」ダイアログ - 1


以下のように表示が切り替わりましたか?

次は、ダイアログの左上の「Add Plugins...」ボタンをクリックです。

「Plugins」ダイアログ - 2


新たに開いたダイアログで「MPLAB Harmony」のプラグイン・ファイル(.nbm)を選択します。

つまり、このプラグインをインストールすることで「MPLAB X IDE」が「MPLAB Harmony」を認識し、協調して働くことができるようになるという寸法です。

では、そのプラグイン・ファイルが何処にあるかっていうと、以下のパスです。


C:\microchip\harmony\v2_06\utilities\mhc


「MPLAB Harmony」は、ここにインストールされていたのですね。

そこで、以下のダイアログで上記のパスまで移動し「com-microchip-mplab-modules-mhc.nbm」という長ったらしい名前のファイルを選択し、右下の「開く」ボタンをクリック!

「Add Plugin」ダイアログ


以下のような表示になったでしょうか?

それでは満を持してダイアログ左下の「Install」ボタンをクリックです!

「Plugins」ダイアログ - 3


すると、以下のように「Plugin Installer」なるものが立ち上がります。

Next>」ボタンをクリックしましょう。

「Plugin Installer」 - 1


ああ、いつものアレだ…。

同意のチェックボタン、「Install」ボタンの順にクリックです。

「Plugin Installer」 - 2


プラグインのインストールが終わると、以下の表示となります。

Finish」ボタンをクリックしてください。

「Plugin Installer」 - 3


その後「MPLAB X IDE」は自動的に終了しますが、ビックリしないでください。

しばらく待っていると再起動します。

これで無事「MPLAB Harmony」のIDEへの登録は完了です!


このマイコンは、開発を始めるまでの作業が多いですね!

この辺り、もうちょっとスマートになると良いのですが…。

次回からは「TOPPERS/ASP PIC32MX版」をビルドするのに必要なソースコードを回収する作業を始めましょう。


<続く>

2023年8月8日火曜日

DIYレトロゲーム機「Nibble」がやってきた! その2

前回からの続きです。


さて、ようやく届いたクラウドファンディングサイト「Makuake」でオーダーした、DIYレトロゲーム機「Nibble(ニブル)」。

この「Nibble」執筆時点では、まだコチラで購入できますよ~。

Nibble


ゲームをプログラミングして遊ぶことを目的で購入したのですが、キット(半完成品)なので、まずは組み立てないといけません。

対象年齢9歳以上の知育玩具という位置付けなので、半田付けの難易度も低いはず。

不器用なプログラマーの私でも無事組み立てることができるでしょうか?


なにはともあれ、作業前にシッカリとドキュメントを読みましょう。

「Nibble」の箱を開封すると最初に目につく一枚の紙、ドキュメント類をダウンロードするためのURLが表記されています。


https://circuitmess-japan.tokyo/nibble-guide/

ドキュメントのダウンロードURL


このページでは、以下の4つのドキュメントがダウンロードできます。

ちゃんと日本語なのでご安心を。


1.組み立てガイド - Nibble_JP_Build Guide.pdf

2.コーディング最初のステップ - Nibble_JP coding-first steps.pdf

3.プログラミングガイド - Nibble_JP Programming Guide.pdf

4.セットアップガイド - Nibble_JP Setup Guide.pdf


最初の「組み立てガイド」以外は、プログラミングに関するドキュメントのようですね。

それらが非常に気になりますが、今注目すべきは「組み立てガイド」。


熟読中…。


ふむふむ…。

全80ページにも及ぶ、相当に丁寧なドキュメント!

子供でも失敗しないように…という配慮が感じられて好感が持てます。

これなら、流石の私でも大丈夫か!?

では、このドキュメントに沿って「Nibble」の組み立て開始!!


まずはメイン基板を用意。

メイン基板


ドキュメントに沿うと、最初に実装するのはボタン類です。

これらは、細かい部品がパッケージされたビニール袋の中に入っています。

ボタン以外にも細かい部品が沢山!

無くさないように注意です。

ビニール袋の中の部品


これらの中からボタンを拾っていきましょう。

すると、ボタンとボタンキャップが8組出てきました。

実際は7組しか使わないので、1組は予備ですね、親切ぅ~!!

ボタンとボタンキャップ


せっかくのご厚意ですが…今回これらは使わないことにしました。

理由は、仕事で同様のボタンとボタンキャップを使ったことがあるのですが、これが結構脆い。

ボタンにはボタンキャップを嵌めるためのクビれがあるのですが、ここからモゲることが良くありました。

ボタンのクビれ


なので、手持ちのクビれの無いボタンを使うことにしました。

です。

クビれの無いボタン


懐かしいSFCのコントローラーのイメージですね!

こういう、ちょっとした改善やカスタマイズができるのも、DIYキットの良いところです。

SFCのコントローラー


その他は、基本的にドキュメント通りにスイッチ、LCD、電池ボックスの順に半田付けを行っていきます。

作業中 - 1


強いて言うならば、LCDの取り付けが最難関でした。

ピンのショートに注意することと、半田ごての熱が分散して半田のノリが悪いピンがあること(接触不良の原因になります)。

更に、LCDをメイン基板と水平に取り付けようとすると、すでに基板に実装されているマイコンと干渉するので、ちょっと浮いた感じで実装する必要があります。

作業中 - 2


他は特に問題無しで、サクサク実装できます。

作業中 - 2


すべての部品を実装後、電池を入れて、スイッチをオンにする前にチップヒューズを挿入する必要があります。

チップヒューズ


これも、子供が作業して間違った配線で回路を壊さないように…という配慮でしょう。

しかも、チップヒューズは1つしか使わないのに3つも付属しています。

ここまで気を配っているクロアチア共和国のメーカー「CircuitMess」社の理念は素晴らしい!

さて、緊張の一瞬。


スイッチON!!



お、なんか写った!!

Bonk


スイッチをONにすると、まずメニューが立ち上がり、ここから設定画面や最初から入っているゲームを立ち上げることができるようです。

最初から入っているゲームは、かなりレトロなテニスゲーム「Bonk」、そしてヘビを操ってひたすらエサを食べていく「Snake」…。

Snake


そして、隕石を次々と破壊するシューティングゲームの「SpaceRocks」の計3本です。

SpaceRocks - 1


特に「SpaceRocks」は、グラフィックが良く描き込まれています。

フルカラーとはいえ、128x128の低解像度の可能性を感じさせるものです。

SpaceRocks - 2


SpaceRocks - 3


さて、動作チェックも終わったので次の作業です。

ケーシング(アクリル製)の装着です。

ケーシング(アクリル製)


…なのですが!

今回は、この作業は行わないことにします。

今後、色々とこの「Nibble」で遊ぶ上で、多分ハードウェアの改造やら線の引き出しやらをやるでしょう。

ケーシングをしてしまうと、その都度にバラして組み立てるのを繰り返すのも億劫です。

ちなみに、ケーシングを行うと、以下のような外観になるようです。

ケーシング後の外観


アクリル板は結構分厚いので、実物を見てみると全く安っぽい感じはなく、シッカリとした印象です。

知育玩具として本当に良く出来たキットです。

ただし、特に半田付けなど対象年齢の9歳児が一発で成功するほど簡単な作業とは言い難いでしょう。

半田ごてなど、危険な道具も扱いますから、12歳位までは大人同伴での作業が前提となるでしょうね。

これで遊んだ子供たちが一人でも多く「モノ作り」に興味を持ち、組み込みエンジニアへの道に進んでくれると嬉しいですね!


…ウソです。

海外ではいざ知らず日本では、組み込みエンジニアなんてキツい割に低収…


というリアルな話は置いといて~。


さて、無事に「Nibble」を組み立てることが出来ました!

最初から入っているゲームを遊び倒したら、いよいよプログラミングに挑戦したいと思います。

これらのゲームはオープンソースとして公開されていますので、プログラミングの際にも貴重なサンプルになるでしょう。

何か作ったら、このブログでその過程からレポートしましょうかね…。

皆さんも夏休みの工作として、この「Nibble」いかがですか?


<終わり>

TOPPERS/ASP - Arduino UNO R4版 その7

前回からの続き です。 このテーマを最初からご覧になる場合は こちら からどうぞ。 プログラムの転送とデバッグ ターゲットの「Arduino UNO R4」とデバッガの「E2 emulator Lite」を 前々回 作成したケーブルで接続します。 こんな感じ。 これからTOPPE...