あらすじ
mrubyがIchigoJamで動くと聞いて試したらできなかった。を
出来なかったなりに公開したら、本家の方から''armコンパイラ使うといい''との情報をいただいた。
本家の方のページがコチラ
Ruby on Jam! IchigoJamで動くROM8KBのミニ Ruby VM と、mruby ver2.0対応はじめのいっぽ - mmruby for LPC1114
また、別の有識者の方から下記ページも教えていただいた。
早速やってみる。
以下が前提の環境
- IchigoJam: くまモン型IchigoJamを持っているのでそれを利用
- 電子工作用具
- はんだごて
- はんだ
- USBシリアル変換モジュール(後述)
- ジャンパーピン
- ブレッドボード
- USBケーブル
- Windows 10 PC
- Visual Studio Code
- GnuMake
一応アジェンダ
結果
PC環境構築
micro mruby for lpc1114を取得
taisukef/micro_mruby_for_lpc1114からコードを取得し、ローカルに展開する
こんな感じ
Make for Windowsをインストール
Make for Windowsからバイナリを落としてインストールする。
パスにbinディレクトリを追加し、makeコマンドが使える事を確認する。
こんな感じ
GNU Arm Embedded Toolchainをインストール
ARM用コンパイラ。arm Developperのサイトを参考にバイナリを取得する。
2019.05.03現在だとGNU Tools for ARM Embedded Processors 7-2018q2-update Releaseが最新っぽいのでここからダウンロードして展開する。
こんな感じ
さらに、arm-none-eabi-objcopy,objcopyのみ昔のバージョンから更新する。ちょろっと問題があって、
It's definitely a problem with the latest toolchain. If you want something more recent:
On Windows, the toolchain 6-2017-q1-update (6.3.1) doesn't have this problem (and I'm
pretty sure 7.3.1 doesn't either). Otherwise I'm hitting the same problem on Windows with
gcc-arm-none-eabi-8-2018-q4-major (8.2.1), but it works on my Linux system. Using the
6.3.1 release of objcopy on the 8.2.1 output seems to work too.
とのこと。興味のある方は自分で調べるだろうから詳細は差し控える。
パスを通して完了。
CoreUtilsをインストールする
CoreUtils for Windowsから環境にあったものをダウンロードしてパスを通す。
こんな感じ
GCCをインストールする
MSys2経由で設定を行う。MSYS2 installerからMinGWをインストールしてパッケージを同期させる。
gccのパスを見つけてパスに追加する。
IchigoJamをシリアル接続する
さて、PCの環境が整ったら今度はIchigoJamとPCを接続する準備に入る。
まずは何となくどんな作業が必要になるか。
- PCにターミナルソフト入れる
- シリアル接続用の回路を組む
- ターミナルでIchigoJamにアクセスする
PCにターミナルソフト入れる
TeratermでもCoolTermでも好きなものを入れる。今回はCoolTermにした。
無事に入ったら起動してみる。
最初にシリアルがどうたらこうたら行ってくるけど、レートを115200にしておくだけでいい。
起動出来たらこんな感じの画面が出るはず
こんな感じのやつ
シリアル接続用の回路を組む
本家サイトにUSB-シリアルと言うジャストな記事があるのでその通りできる方はその通りしていただいたほうがいい。
自分は手持ちにシリアル変換基盤があるのでそれを利用する。
ちなみに自分の手元になったのはコレ。
とりあえず足(*1)を付ける
尚、電子工作一切やったことない方は下記の様なよく分からないトラップが盛りだくさんなので、
知っている人に力を借りたほうがいい。
- 太ピンかったら細ピン用の穴ではんだ付けすらムズイ問題
- ブレッドボードに挿したけどぐらついてて不安がすごい問題
- シリアル変換とかでググったら大量に候補が出てくる問題
- etc
足がついたらブレッドボードで回路を組んでゆく。
回路って言ってもジャンパーでつないでゆくだけ。
光りまくってて全然わからん
接続する足の対応
USBシリアル変換モジュール | IchigoJam |
---|---|
VCC | 無視 |
GND | GND |
TXD | RXD |
RXD | TXD |
ターミナルでIchigoJamにアクセスする
USBシリアル変換モジュールを利用する場合、PC側にデバイスドライバをインストールする必要がある。
MacとかLinuxとかならいらないこともあるだろうか、今回はWindowsなのでしっかり入れる。
FTDI Chipからダウンロードして好きな所に展開する。
こんな感じ
USBシリアル変換モジュールをPCに接続して、デバイスドライバをインストールするだけ。
こんな感じになってればOK
ついでにプロパティを開いてレートを115200に変更しておく。
ここまでくれば、PC,USBシリアル変換モジュール,IchigoJamが全部つながった状態になる。
早速IchigoJamを起動(*2)して、CoolTermからアクセスする。
なぜか打った文字が見えないけど、''LED 1''とか''LED 0''とか打ち込んでIchigoJamのLEDが光ったりすればOK。
IchigoJamでmrubyを動かす
さぁ、いよいよ最終局面。
これ以降は、PC,USBシリアル変換モジュール,IchigoJamが全部つながった状態にして、IchigoJamを起動しておく。
micro mruby for lpc1114をビルドする
Visual Studio Codeでmicro mruby for lpc1114を開く。
まずはMakefileがlinuxっぽくなっているので、Windowsっぽくする。
- ''/''を''\''へ変更
- USBSERIALをCOM4へ変更
objディレクトリを作成したら、ターミナルからmake all writeを叩く。
もちろん失敗
どうやらlpc21ispなるものが必要らしい。
lpc21ispをインストールする
Ladvien/LPC21ISP_Winからダウンロードして好きな場所に配置する。
Ladvienさんに一礼したらパスを通す。
micro mruby for lpc1114をビルドする(2回目)
lpc21ispを入れたので、Makefileを修正する
- LPC21ISPをlpc21ispへ変更
変更したら''make all write''
Synchronizingが終わらない。。。
これはあれだな制御信号的なアレだな。
と言うわけで、ISPをGNDに接続してみてもう一回やる。
接続する足の対応
USBシリアル変換モジュール | IchigoJam |
---|---|
VCC | 無視 |
GND | GND |
GND | ISP <- New!! |
TXD | RXD |
RXD | TXD |
さらに手順変更。
- 今まで
- 全部繋げる
- IchigoJamの電源入れる
- make all write
- これから
- 全部繋げる
- make all write
- IchigoJamの電源入れる
レッツトライ
でき...た...?
書き込むプログラムを作る
とりあえず本家サイトを見る限り、下記手順で進っぽい。
- Rubyのコードを書く
- mrbcコマンドでコンパイルする
- transcodeコマンドでコードをIchigoJam用に変える(srcディレクトリ配下にコード出力される)
- makeする
- make writeする
rubyのコードはとりあえずOUT1,2,3をチカチカするだけにする。
while true
led 1
wait 10
led 0
wait 10
end
コードの配置場所はここ。
mrbcで早速コンパイルする前にmruby 1.4.1 releasedからmrbcを取得する。
mruby2.0はサポート外っぽいので1.4.1を使う。ダウンロードしたらビルドしてパス通す。
後述となりますが、2.0でも(実行まで行けてないので)問題ないです。
Ruby要るってさ...
と言うわけでRuby InstallerからRubyいれる。
よく分からんけどdevelopperだからdevelopper的なの入れる。
なんかよく分からんけどもう一回聞かれるので、developperだからdevelopper的なの入れる。
何も行う事ないらしい。
どうすりゃいいんだコレ
とりあえずctrl+cで強制的に終了させる。
コマンドプロンプトで叩いてみたら無事入ってるみたいなのでよしとする。
いざ、mrubyをビルド
bison要るってさ...
と言うわけでbison入れる。
Bison for WindowsからBinariesをダウンロードして展開 -> coreutilsに上書き。
よし入った
いざ、mrubyをビルド
regex2要るってさ...
と言うわけでregex入れる。
Regex for WindowsからBinariesをダウンロードして展開 -> coreutilsに上書きして、いざmrubyビルド
しゃおらぁ!
後はパスを通す。
ようやっと本命のビルド''mrbc code.rb''
続けて上位ディレクトリにsrcディレクトリを作って''.\tool\TransCoder.exe code.mrb''
お、
できた!
ここまで来たら下記手順でOK
- ''..\src*''を''.\src''へコピー
- makeコマンド
- IchigoJam,USBシリアル変換モジュール,PCをつなぐ(IchigoJamの電源はまだ入れない)
- make writeコマンド
- IchigoJamの電源を入れる
makeが通って
Now lanching the brand new codeですって!
いざ、実行。あぁ、長い戦いがもうすぐ終わる...。
終わらなかったよね
mruby2.0への対応
できないなぁーってツイッターでつぶやいていたら、
本家の方からmruby2.0に対応したのでそちらで試してみるとよい
とのこと。
と言うわけで、
- mrubyを2.0へバージョンアップ
- mrby-L1VMをビルドする
- mrbcを作った後にmrby-L1VMを実施する
をやって動かしてみる。
mrubyを2.0へバージョンアップ
mruby - downloadsからcurrentの2.0.1をダウンロードする。
ダウンロードしたら展開してビルドする。
mrubyをビルドするの慣れたよね
無事ビルドできたのでパスを通す。mruby-1.4.1は消す。
はい。無事に2.0.1が入りました。
mrby-L1VMをビルドする
taisukef/mruby-L1VMをダウンロードしてビルドする。
Visual Studio Codeで開いてターミナルでgcc *.c
を実行。a.exeができる。
a.exeをmruby-l1vm.exeとして、coreutils\bin配下に移動。
mrbcを作った後にmrby-L1VMを実施する
さて、今までの手順は
- code.rb書く
- mrbcでビルド(code.rb -> code.mrb)
- TransCoderで変換(code.mrb -> code.h,symbol_ids.h)
-
..\src\*
を.\src\
へコピー - makeコマンド
- IchigoJam,USBシリアル変換モジュール,PCをつなぐ(IchigoJamの電源はまだ入れない)
- make writeコマンド
- IchigoJamの電源を入れる
でも、これからは
- code.rb書く
- mrbcでビルド(code.rb -> code.mrb)
- mruby-l1vmでいい感じにする(code.mrb -> code.mrb) <- New
- TransCoderで変換(code.mrb -> code.h,symbol_ids.h)
-
..\src\*
を.\src\
へコピー - makeコマンド
- IchigoJam,USBシリアル変換モジュール,PCをつなぐ(IchigoJamの電源はまだ入れない)
- make writeコマンド
- IchigoJamの電源を入れる
となる。
では早速
mrbc!
からの、
失敗!
それを無視してのTransCoder!
ふりかえり
この手順をこなすまでに様々なエラーと立ち向かった。とにかく色んな所でエラーが出た。
Makefile、パス、配線、etc。
結局動いてないが、他の誰かが環境を構築する際に、全く情報入れずにやるよりかは楽になると信じたい。
注釈
*1: 足って勝手に言ってるだけで多分正式名称は別にあると思う。虫っぽいからいいかなと思ってる。
*2: IchigoJamには別途電源が必要