【イ】ORANGE pico と IchigoJam の比較
#クリエイターフェス 5日目、テーマは「イ」である。
今回は、ORANGE pico と https://ichigojam.net/ を比較してみたいと思う。
※IchigoJamはjig.jpの登録商標です。
共通点
数千円で購入できる
ORANGE pico や IchigoJam は、はんだ付けを行って組み立てるキットが数千円程度で販売されている。
また、キットよりは高めであるが、完成品も販売されている。
執筆時点では、以下のページから購入できる。(値段は執筆時点のもの、税込、送料別)
ORANGE pico
IchigoJam
モニター、キーボード、USB電源を接続して使用するのが基本
ORANGE pico および IchigoJam のいずれも、コンポジット信号 (NTSC) の出力に対応しており、これを入力してデコードできるモニター (テレビなど) を接続して使用する。
さらに、USB端子でキーボードを接続して使用する。
ORANGE pico および IchigoJam はPS/2信号に対応したキーボードを用い、IchigoJam R はUSB信号に対応したキーボードを用いる。
また、ORANGE pico においても、外付けのユニットを用いてUSB信号でキーボードを用いることができる。
また、USB端子経由で5Vの電源を入力して使用する。
BASIC言語でプログラミングができる
ORANGE pico も IchigoJam も、BASIC言語によるプログラミングができる。
コマンドを直接実行することも、行番号を用いたプログラムをメモリに格納して実行することもできる。
115200bpsのシリアル通信で制御できる
ORANGE pico も IchigoJam も、デフォルトで 115200bps のシリアル通信 (UART) を用いて文字を入力し、プログラムの入力や実行中のプログラムの操作などを行うことができる。
また、画面への出力内容をシリアル通信でも出力し、端末ソフトウェアなどで確認できる。
液晶モジュールへの出力ができる
ORANGE pico は、コントローラが ILI9341、画面サイズが 320×240 ピクセルの液晶モジュールを接続し、映像の出力先を液晶モジュールに切り替えることができる。
IchigoJam は、コントローラが ST7567、画面サイズが 128×64 ピクセルの液晶モジュールを接続し、映像の出力先を液晶モジュールに切り替えることができる。
また、別のファームウエアを用いることで、IchigoJam でも 320×240 ピクセルの ILI9341 液晶への出力が可能である。
ORANGE pico の方が優れている点
プログラムの実行が速い
例として、以前自分が書いた記事
IchigoJam速度比較 ~IchigoJam Rが10倍速いってマジ?~ #ベンチマーク - Qiita
に掲載した「素数の和の計算」のプログラムで速度を比較してみる。
以下がそのプログラムである。これは ORANGE pico でも IchigoJam でも動作する。
10 ' 5000 マデ ノ ソスウ ノ ワ
20 CLT
30 S=0:T=0
40 FOR I=2 TO 5000
50 J=2
60 IF J*J>I GOTO 90
70 IF I%J=0 GOTO 110
80 J=J+1:GOTO 60
90 S=S+I
100 IF S>9999 S=S-10000:T=T+1
110 NEXT
120 E=TICK():?"SUM=";T;
130 IF S<1000 ?"0";
140 IF S<100 ?"0";
150 IF S<10 ?"0";
160 ?S;",TIME=";E
それぞれ1回実行を行った結果、以下の実行時間 (1/60秒を「1」とする) となった。
ビデオ出力ありのとき、ORANGE pico は、IchigoJam Q の約21.0倍、IchigoJam R の約2.5倍となった。
ビデオ出力なしのときは、ORANGE pico は、IchigoJam Q の約19.4倍、IchigoJam R の約3.1倍となった。
いずれの場合も、高速な新型である IchigoJam R と比べても数倍とかなり速い実行速度になった。
なお、今回用いたファームウェアのバージョンは、以下の通りである。
IchigoJam Q : 1.4.3
IchigoJam R : 1.5b
ORANGE pico : 1.06
送信遅延ゼロでもプログラムが欠けない
IchigoJam で Tera Term からシリアルポートの送信遅延がゼロの状態でプログラムを流し込むと、プログラムが欠けてしまうことがある。
たとえば、上記の「素数の和の計算」のプログラムを流し込むと、以下の状態になった。
さらに、IchigoJam R だと、以下の状態になった。
そのため、自分は、IchigoJam では文字ごとに5ms、行ごとに100ms程度の送信遅延を設定して使用している。
一方、ORANGE pico では、デフォルトの115200bpsで、文字ごと・行ごとの送信遅延がともに0msという設定でも、プログラムを欠けずに転送することができた。
さらに長いプログラムでも、同様に送信遅延ゼロで欠けずに流し込めるようである。
送信遅延が不要なため、プログラムを効率よく流し込み、開発を効率よく行うことができる。
UART通信で一般的なエスケープシーケンスが使える
ORANGE pico のUART通信は一般的なエスケープシーケンスに対応しているようで、Tera Term などの普通の端末ソフトウェアでテキスト画面の再現や矢印キーの入力などが可能である。
IchigoJam では独自の制御コードを用いているので、UART通信でテキスト画面の再現や矢印キーの入力を行うには IJUtilities などの対応ソフトウェアを用いることが求められう。
長いプログラムが書ける
ORANGE pico では、8,170バイトまでのプログラムをメモリに格納できる。
そのため、比較的大規模なプログラムを、区切りを意識せずに書くことができる。
IchigoJam では、1,024バイトまでしかプログラムをメモリに格納できない。
上位版の IchigoCake でも、4,096バイトまでしか格納できない。
テキスト画面とは別のグラフィック画面を標準搭載
ORANGE pico では、標準でテキスト画面とは別に320×200ピクセルのグラフィック画面があり、線や円などを描くコマンドが用意されている。
IchigoJam にも線を描くコマンドはあるが、これはテキスト画面に対し特殊な文字を用いて図形を描画するものである。
別売りの PanCake を用いることで、IchigoJam でも独立したグラフィック画面 (80×45ピクセル) に対する描画を行うことができる。
PanCake の操作は仕様が公開されたUART通信で行うことができるため、ORANGE pico からでも操作できるはずである。
扱えるデータの幅が広い
ORANGE pico では、以下のデータを扱うことができる。
32ビット符号付き整数
浮動小数点数
文字列
文字列はメモリー配列とは関係なく格納され、関数を用いて検索や部分文字列の取得などを行うことができる。
一方、IchigoJam のBASICでは16ビット符号付き整数のみを扱うことができる。
文法上は文字列も使えるが、これは仮想メモリ上のデータの開始位置を整数で格納するものであり、変数に格納するデータは同じく16ビット符号付き整数である。
扱える変数の幅が広い
ORANGE pico では、複数の文字からなる変数名を扱うことができ、配列も変数名と要素数を指定して扱うことができる。
IchigoJam では、変数は A~Z の1文字の変数26個だけであり、さらに名前がついていない配列が1個存在する。
データスタックが使える
ORANGE pico では、BASICでデータスタックを扱うコマンドや関数が用意されており、サブルーチンの関数的な使い方がやりやすくなっている。
IchigoJam ではそのようなコマンドは無いため、スタックを使うには変数と配列などを用いて自分で実装することになるだろう。
I2C通信のリピーテッドスタートが使える
ORANGE pico では、I2C通信のリピーテッドスタート (通信後、ストップコンディションを送信せずに再びスタートコンディションを送信して通信を続行する) に対応している。
例えば、以下のプログラムで加速度センサー MMA8452Q のデバイスID「2a」を読み出すことができる。
ただし、MMA8452QのSA0端子の入力は秋月電子通商で販売されているモジュール (K-12069) の初期値であるHIGHとする。
10 x=i2cw(2,&H1D,"\x0D",0)
20 y=i2cr(2,&H1D,1,1)
30 print hex$(mpeek(0))
IchigoJam BASIC のI2C操作関数では、書き込みと読み込みが1回の関数呼び出しでできるが、書き込みと読み込みの間にストップコンディションが挟まってしまう。
そのため、ストップコンディションによってアドレスがリセットされる MMA8452Q のデバイスIDを以下のプログラムで読み出すことはできない。
10 POKE #700,#0D
20 X=I2CR(#1D,#700,1,#701,1)
30 PRINT HEX$(PEEK(#701))
ただし、マシン語を用いてハードウェアを直接操作することで、IchigoJam でもリピーテッドスタートを用いることができる可能性はある。
ミリ秒単位の時刻を扱える
ORANGE pico では、IchigoJam にもある1/60秒単位の時刻を扱う tick() 関数に加えて、ミリ秒単位の時刻を扱う tickms() 関数がある。
そのため、なじみのある単位で時間を計測することが用意である。
IchigoJam では、1/60秒単位および1/(60×261)秒単位の時刻を扱うことができる。
後者は、なじみがない単位である上、整数が16ビットしかないためすぐにオーバーフローしてしまう。
音を出さずに使用しやすい
最近の IchigoJam の基板には圧電ブザーが搭載されており、スイッチやジャンパーピンなどの無効化する手段は無い。
そのため、起動時やエラー時などに必ず音が鳴ってしまい、音を出さずに使用するのは難しい。
ORANGE pico では、基板に圧電ブザーは搭載されず、音声出力端子がある。
そのため、音を出さずに使用しやすい。
I2C接続のゲームコントローラに対応している
ORANGE pico には、I2C接続のゲームコントローラから入力を読み取る関数がある。
IchigoJam にはそのような標準関数やコマンドは無い。ソフトウェアで同様の入力を読み取れるかは未検証である。
IchigoJam の方が優れている点
UART通信が5Vトレラントである
IchigoJam で用いられるマイコンの LPC1114FN28 / LPC1114FDH28 は、UART通信に割り当てられたピンを含めたほとんどのピンが5Vトレラントである。
IchigoJam R で用いられるマイコンの GD32VF103CBT6 では5VトレラントでないピンもI/Oに使用されているものの、UART通信に割り当てられたピンは5Vトレラントである。
一方、ORANGE pico では PIC32MX170F256B が用いられている。
I/Oに用いられるピンを含めた一部のピンは5Vトレラントであるが、UART通信に割り当てられたRA4・RB4は5Vトレラントではなく、5Vの入力は絶対最大定格を超える。
フルカラーLED WS2812Bの操作に対応している
IchigoJam では、フルカラーLED WS2812Bの操作を行うコマンドが存在し、配列に書き込んだ値をもとに同LEDの色を操作できる。
ORANGE pico ではそのようなコマンドは存在しない。
同LEDの操作には数百ns~1μs程度のパルスを用いるため、BASICからソフトウェアで操作するのも難しい。
マシン語に対応している
IchigoJam では、USR 関数によって使用しているマイコンのマシン語 (機械語) を直接実行することが可能である。
ORANGE pico にはそのような関数やコマンドは見当たらず、機械語の直接実行は難しいと考えられる。
FOR文を1行で書いて実行できる
IchigoJam では、FORコマンド、繰り返すコマンド、NEXTコマンドを : で繋いで1行で書き、繰り返し処理を行うことができる。
ORANGE pico でもコマンドを : で繋いで1行に複数のコマンドを書くことは可能であるはずであるが、FORコマンドによる繰り返しは動かなかった。
非同期で音を出せる
IchigoJam では、BEEP コマンドや PLAY コマンドは非同期で音を出す。(実行直後に実行が完了し、続きのプログラムを実行しながら音を再生できる)
再生が完了するまで待ちたい場合は、指示した長さ分 WAIT で待機したり、SOUND() で再生状況を確認しながらループしたりすればよい。
ORANGE pico では、beep コマンドや文字列を指定する play コマンドを実行すると、再生が終わるまでプログラムの実行が進まない。
文字列を指定しない play コマンドはバックグラウンド再生を行うことができるが、再生するMMLはメモリー配列の先頭からに限られ、汎用性に欠ける。
実行の待ちをEscでキャンセルできる
IchigoJam では、WAIT コマンドによる実行停止中でも、Escキーを押したりUARTでEscを送信したりすることですぐに実行を止めることができる。
ORANGE pico では、pause コマンドによる実行停止中や、beep コマンドおよび文字列を指定する play コマンドによる音声の再生中は、Escキーを押したり、UARTでEscやCtrl+Cを送信したりしても実行が止まらない。
標準関数で絶対値を求められる
IchigoJam では、ABS() 関数を用いることで渡した数の絶対値を求めることができる。
ORANGE pico には、絶対値を求める関数は存在しないようである。
公式の標準コマンド一覧には無い abs 関数を用いることはできたが、その返り値は絶対値とは関係ないようであった。
さらに、ORANGE pico の abs 関数に浮動小数点数を渡すと Type mismatch エラーになった。
また、ORANGE pico ではこれまた公式のコマンド一覧には無い fabs 関数も使えるようであったが、その挙動は abs 関数と同様 (絶対値とは関係ない返り値、浮動小数点数を渡すと Type mismatch エラー) のようであった。
MMLの再生を無限ループできる
IchigoJam では、MML内に $ を書くことで、それ以降を無限ループで再生できる。
ORANGE pico では、[] を用いて指定の範囲を2回繰り返すことはできるが、無限ループでの再生を指示できる仕様は無いようである。
ファームウェアのライセンスが明確
IchigoJam のファームウェアはライセンスが明示されており、互換機を作ってファームウェアを書き込むことができる。
別途有料で契約することで、ファームウェアを書き込んだ互換機を配布・販売することもできる。
ORANGE pico のファームウェアについては、ライセンスが見当たらなかった。
その他の相違点
テキスト画面サイズの違い
ORANGE pico の画面サイズは40×25文字である。
IchigoJam の画面サイズは32×24文字である。
電源用USB端子の違い
ORANGE pico の電源用USB端子は Type-B である。(type A では Micro-B にも対応)
IchigoJam R や IchigoJam S の電源用USB端子は Micro-B である。
IchigoJam Q の電源用USB端子は Type-C (プルダウンなし) である。
入出力端子の違い
ORANGE pico では、I/O端子としてピンヘッダが付属している。
IchigoJam では、I/O端子としてピンソケットが付属している。
まとめ
基本的には ORANGE pico の方が幅広い表現を用いた大規模なプログラムを高速に実行できるが、フルカラーLED WS2812B の操作など IchigoJam でしかできない表現も存在する。
ORANGE pico で制約の少ないプログラミングをのびのびと楽しむか、IchigoJam で強めの制約の中工夫してプログラミングを楽しむか、好みによって選ぶのがよいだろう。
気軽にクリエイターの支援と、記事のオススメができます!