IchigoJam の紹介と OS X で使う方法のまとめ

 **IchigoJam**という小さなコンピュータの紹介をします。
私はMacintoshで利用していますので、内容は OS X 10.10.x (Yosemite) で利用する場合のちょっとしたノウハウを、自分の備忘録としてまとめておきます。
Windows環境で使用する記事は多いのですが、Macで利用している人の役に立てばと思います。

## Ichigojam について
### どんなもの？
 IchigoJamは、NXP社のLPC1114(FN28) というワンチップのARMマイコンに、数個の抵抗とコンデンサを付けただけの、とてもシンプルで廉価（1,500円程度）なコンピュータです。
 →　[Ichigojamのサイト](http://ichigojam.net/)
 →　[fu-sen さんによる IchigoJam 情報サイト](http://15jamrecipe.jimdo.com/)
 
ARMマイコンの他には電源供給用のUSB端子のほか、ビデオ出力（NTSCコンポジット）の端子と、キーボード用（PS/2）コネクタ、3.3V生成用３端子レギュレータ、抵抗、コンデンサ、LEDだけです。
上記のサイトからキット（ハンダ付け不要のブレッドボード版もあり）が販売されているので、そこから購入するのがお勧めです。

自作派の方なら、必要なパーツを集めて組み立て、ファームウェアをマイコンに書き込むことで、できあがります。（ファームウェアの書き込みにはUSB-Sirealアダプタか、ARMライター等が必要です。）
**注：自作のIchigoJamは個人利用限定で、他の人に譲渡などをする場合はライセンスの購入が必要です。**
**【自作のためのリンク集】**
・ピン配置シートとライセンス情報
　http://fukuno.jig.jp/651

・ 回路図（組み立て方）
　http://fukuno.jig.jp/671

・部品表とファームウェア
　https://www.facebook.com/groups/ichigojam/files/

下の写真はプリント基板バージョン（左上）、ブレッドボードバージョン（左下）、ユニバーサル基板バージョン（右下）と、自分で部品を集めて作ったオリジナル（右上）です。
（プリント基盤バージョン以外の3つには、USB-Serialアダプターを付けています。）

![IMG_2524.jpg](https://qiita-image-store.s3.amazonaws.com/0/16491/ec624ec9-05a5-ac42-48a7-c658d5350587.jpeg)

他に必要なのは

- NTSC（コンポジット）入力端子があるテレビかビデオモニター（小型だと2,000円位から）
- PS/2が使えるキーボード（1,000円位から）
- USBケーブル（USBポートからの電源供給）
- USBポートの有る充電アダプタ（ACから直接電源を取る場合）

これだけで**簡易なBASIC言語が動作するコンピュータ**になります。

### IchigoJam BASIC
IchigoJamのBASICは、変数名がアルファベット一文字のみだったり、配列が101個の数値が入る1種類しか使えないなどの制約が有る一方、デジタル（一部アナログ）入力とデジタル出力の拡張がある独特のものです。
 → [IchigoJam BASIC リファレンス](http://ichigojam.net/IchigoJam.html)　（[PDF版](http://ichigojam.net/IchigoJam-BASIC-reference.pdf)）
 → [fu-senさんによる IchigoJam BASIC コマンド一覧](https://github.com/fu-sen/IchigoJam-BASIC)

### 小さいけど凄い
単なるBASICマシンとしてだけでなく、色々な使い方ができるようになっています。

- 4つのデジタル入力（1つはアナログ入力としても使える）が使える
- 4つのデジタル出力が使える
- 画面やキーボードが不要なら 3.3Vのみで動作する
- 内部に3つのプログラムを保存できる（1022Byte x 3）
- 起動時に自動ロード＆実行もできる
（ボタンを押しながら電源オンにすると、起動時に LOAD & RUN が動作します）
- ファームウェアの書き換えでバージョンアップもできる

つまり、Arduinoのように、電池で単独に動作する電子機器のようなものまでできてしまう潜在能力があります。（利用者の発想次第）
> **改造メモ:**
以下に説明するMacと繋いで使うようにすると、PS/2とビデオの端子が不要になって、コンパクトになるほか、5V電源が不要になるので、乾電池2本（3V）程度で動作するようになります。
打ち込んだプログラムを SAVE しておけば、ボタンを押しながら電源を投入することで、自動で LOAD 後実行する機能があるので、LEDを使った光るアクセサリー等を創ることもできます。

## Macと繋いで利用する

### MacとUSBシリアルアダプターで繋いで遊ぶ
IchigoJamには、シリアル接続のピンも有るので、そのピンが使えるように配線を追加することで、USBシリアルアダプタを利用して接続することができます。
USBシリアルアダプタの GND, VCC, TXD, RXD を IchigoJam の該当ピンに（TXD, RXD はクロスして）配線します。

#### 私が動作を確認したUSBシリアルアダプタ：

- AE-UM232R [秋月電子通商](http://akizukidenshi.com/catalog/g/gK-01977/)
- CH340 USBシリアルモジュール [ちっちゃいものくらぶ](http://tiisai.dip.jp/?p=2734)

（注：CH340 は、OS X をYosemiteにアップデートしてから動作しなかったのですが、http://javacolors.blogspot.jp/2014/08/dccduino-usb-drivers-ch340-ch341-chipset.html?m=1 に有った情報で、動作するようになりました。**この方法は Yosemite で新たに導入された KEXT の認証機能を使用しない設定なので、留意してご利用ください**）

### Macのキーボードとディスプレイを利用する
シリアルポートを使えるターミナルアプリを使うと、PS/2キーボードやTVを使わなくても、程度IchigoJamが使えます。
PS/2キーボードの代わりにMacのキーボードを、TVの代わりにMacのディスプレイを利用します。
私は [CoolTerm](http://freeware.the-meiers.org) を使っています。
最初に設定で、シリアルポートをプルダウンから選び、Local Echo をオンにして、Connect をクリックして利用を開始します。
**設定の詳細：**
![CoolTerm1.png](https://qiita-image-store.s3.amazonaws.com/0/16491/84b77620-373b-8132-f891-9e7519b3faf0.png)
![CoolTerm2.png](https://qiita-image-store.s3.amazonaws.com/0/16491/e7af565c-302c-bbef-1642-73571a0708b1.png)

Connectをした後、LIST(return) で画面にOKが帰ってくれば、後はそのまま利用できます。（ResetをGNDに接続して離すと`IchigoJam...` と表示され、初期値になります。）

ただ、BASICのLOCATE等による画面制御は動作しませんので、ゲームアプリなど画面を固定しての利用はできませんが、プログラムの入力などでは便利に利用できます。

### ファームウエアの書き込み
IchigoJam のファームウエアはタマにアップデートされます。
その場合、ワンチップマイコンにファームウェアを書き込む必要がありますが、専用のライターが無くても USBシリアルアダプタがあれば、ファームウェアを書き込むことが出来ます。

#### 書き込みに利用するアプリ

- FlashMagic （GUIで書き込みできる。）
- lpc21isp （コマンドラインの書き込みツール）

#### FlashMagic で書き込む

FlachMagic では、COMポート番号を設定する必要があります。
OS X では、FlashMagicアプリが起動時に、/dev/ を調べてシリアルポートとCOM番号のシンボリックリンクをアプリケーション内のフォルダにセットします。
それを調べるにはターミナルアプリで以下のコマンドを実行すると判ります。
（FlashMagicアプリが「アプリケーション」フォルダ内に有る場合）
` ls -l /Applications/FlashMagic.app/Contents/Resources/dosdevices/COM* `

いちいちターミナルを開いて実行するのが面倒なので、AppleScript を書いて利用しています。
これを利用すると、簡単に割り当てられたCOMポートの番号が判ります。
　→　[OS XでFlashMagicを使う場合のCOMポート番号を見つける方法](http://qiita.com/ynomura/items/9d7ce64585d2e9544f6e)

#### FlashMagicの設定:
![FlashMagicSC.png](https://qiita-image-store.s3.amazonaws.com/0/16491/e268c098-1e8f-5fe3-94e2-f37185baf036.png)

1. Select... は LPC1114/102 を選択
1. COM Port は調べておいたポート番号を選択
1. Step 2のところは `Erase all Flash+Code Rd Port` のチェックを入れる
1. Step 3のところで `Browse...` を押して書き込む HEXファイルを選択
1. LPC1114をISPモードにしておく
**ISPモード**にする方法
> LPC1114のISPとResetピンの両方をGNDに接続し、LEDが点灯したらResetピンを先に外してからISPピンを外す。（LEDが点灯したままになればOK）

1. 後は、`Start`ボタンを押して書き込みを開始して `Finish ` が出るまで待つ。
1. 書き込みが完了したらISPモードをリセットするため、ISPピンをGNDにタッチします。

#### lpc21isp で書き込む

IchigoJamとUSB−Serealアダプターを接続して、FlashMagicのところにあるようにしてISPモードにしてから、ターミナルで次のコマンドのように指定して書き込みます。

` $ lpc21isp -bin ichigojam.bin /dev/tty.usbserial-A400FFKN 115200 1200`

これも面倒なので、AppleScriptでアプリを書きました。

　→　[Macでlpc2lispを簡単に利用するためのアプリケーション](http://qiita.com/ynomura/items/35ed1fcb8da3c914d991)

**Maclpc21isp.app**を起動すると、最初に書き込むファイルを選択する大がログが出ます。（.binでも.hexでもOK）
次に、使用する仮想デバイス名を選択して書き込みを開始させます。
（ISPモードに設定しておく必要があります）
表示されるメッセージ書き込みが成功が成功したか確認します。

## お楽しみはこれから
これまでやってきたことを纏めてみました。
課題は IchigoJam で何を作るかですが、アイデアがまだ浮かびません。
LEDを点灯させたりセンサーを繋いだりして遊んでいるだけで、そこから先に進めませんが、まだまだ楽しめそうです。
ここまで