Help us understand the problem. What is going on with this article?

mrubyがIchigoJamで動くらしい 第2回戦

あらすじ

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

一応アジェンダ

結果

result.png

PC環境構築

micro mruby for lpc1114を取得

taisukef/micro_mruby_for_lpc1114からコードを取得し、ローカルに展開する

image.png

こんな感じ

Make for Windowsをインストール

Make for Windowsからバイナリを落としてインストールする。
パスにbinディレクトリを追加し、makeコマンドが使える事を確認する。

image.png

こんな感じ

GNU Arm Embedded Toolchainをインストール

ARM用コンパイラ。arm Developperのサイトを参考にバイナリを取得する。
2019.05.03現在だとGNU Tools for ARM Embedded Processors 7-2018q2-update Releaseが最新っぽいのでここからダウンロードして展開する。

image.png

こんな感じ

さらに、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から環境にあったものをダウンロードしてパスを通す。

image.png

こんな感じ

GCCをインストールする

MSys2経由で設定を行う。MSYS2 installerからMinGWをインストールしてパッケージを同期させる。

image.png

続けてGCCインストール
image.png

gccのパスを見つけてパスに追加する。

IchigoJamをシリアル接続する

さて、PCの環境が整ったら今度はIchigoJamとPCを接続する準備に入る。
まずは何となくどんな作業が必要になるか。

  • PCにターミナルソフト入れる
  • シリアル接続用の回路を組む
  • ターミナルでIchigoJamにアクセスする

PCにターミナルソフト入れる

TeratermでもCoolTermでも好きなものを入れる。今回はCoolTermにした。

無事に入ったら起動してみる。
最初にシリアルがどうたらこうたら行ってくるけど、レートを115200にしておくだけでいい。
起動出来たらこんな感じの画面が出るはず

image.png

こんな感じのやつ

シリアル接続用の回路を組む

本家サイトにUSB-シリアルと言うジャストな記事があるのでその通りできる方はその通りしていただいたほうがいい。
自分は手持ちにシリアル変換基盤があるのでそれを利用する。

ちなみに自分の手元になったのはコレ。

超小型USBシリアル変換モジュール

image.png
超小型って処に惹かれて買った奴

とりあえず足(*1)を付ける

image.png

尚、電子工作一切やったことない方は下記の様なよく分からないトラップが盛りだくさんなので、
知っている人に力を借りたほうがいい。

  • 太ピンかったら細ピン用の穴ではんだ付けすらムズイ問題
  • ブレッドボードに挿したけどぐらついてて不安がすごい問題
  • シリアル変換とかでググったら大量に候補が出てくる問題
  • etc

足がついたらブレッドボードで回路を組んでゆく。
回路って言ってもジャンパーでつないでゆくだけ。

image.png

光りまくってて全然わからん

接続する足の対応

USBシリアル変換モジュール IchigoJam
VCC 無視
GND GND
TXD RXD
RXD TXD

ターミナルでIchigoJamにアクセスする

USBシリアル変換モジュールを利用する場合、PC側にデバイスドライバをインストールする必要がある。
MacとかLinuxとかならいらないこともあるだろうか、今回はWindowsなのでしっかり入れる。

FTDI Chipからダウンロードして好きな所に展開する。

image.png

こんな感じ

USBシリアル変換モジュールをPCに接続して、デバイスドライバをインストールするだけ。

image.png

こんな感じになってればOK

ついでにプロパティを開いてレートを115200に変更しておく。

image.png

ここまでくれば、PC,USBシリアル変換モジュール,IchigoJamが全部つながった状態になる。
早速IchigoJamを起動(*2)して、CoolTermからアクセスする。

image.png

なぜか打った文字が見えないけど、''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を叩く。

image.png

もちろん失敗

どうやらlpc21ispなるものが必要らしい。

lpc21ispをインストールする

Ladvien/LPC21ISP_Winからダウンロードして好きな場所に配置する。
Ladvienさんに一礼したらパスを通す。

image.png

micro mruby for lpc1114をビルドする(2回目)

lpc21ispを入れたので、Makefileを修正する

  • LPC21ISPをlpc21ispへ変更

変更したら''make all write''

image.png

Synchronizingが終わらない。。。

これはあれだな制御信号的なアレだな。
と言うわけで、ISPをGNDに接続してみてもう一回やる。

接続する足の対応

USBシリアル変換モジュール IchigoJam
VCC 無視
GND GND
GND ISP <- New!!
TXD RXD
RXD TXD

さらに手順変更。

  • 今まで
    • 全部繋げる
    • IchigoJamの電源入れる
    • make all write
  • これから
    • 全部繋げる
    • make all write
    • IchigoJamの電源入れる

レッツトライ

image.png

でき...た...?

書き込むプログラムを作る

とりあえず本家サイトを見る限り、下記手順で進っぽい。

  • Rubyのコードを書く
  • mrbcコマンドでコンパイルする
  • transcodeコマンドでコードをIchigoJam用に変える(srcディレクトリ配下にコード出力される)
  • makeする
  • make writeする

rubyのコードはとりあえずOUT1,2,3をチカチカするだけにする。

code.rb
while true
  led 1
  wait 10
  led 0
  wait 10
end

コードの配置場所はここ。

image.png

mrbcで早速コンパイルする前にmruby 1.4.1 releasedからmrbcを取得する。
mruby2.0はサポート外っぽいので1.4.1を使う。ダウンロードしたらビルドしてパス通す。

後述となりますが、2.0でも(実行まで行けてないので)問題ないです。

image.png

Ruby要るってさ...

と言うわけでRuby InstallerからRubyいれる。
よく分からんけどdevelopperだからdevelopper的なの入れる。

image.png

なんかよく分からんけどもう一回聞かれるので、developperだからdevelopper的なの入れる。

image.png

何も行う事ないらしい。

image.png

どうすりゃいいんだコレ

とりあえずctrl+cで強制的に終了させる。

image.png

コマンドプロンプトで叩いてみたら無事入ってるみたいなのでよしとする。

image.png

いざ、mrubyをビルド

image.png

bison要るってさ...

と言うわけでbison入れる。
Bison for WindowsからBinariesをダウンロードして展開 -> coreutilsに上書き。

image.png

よし入った

いざ、mrubyをビルド

image.png

regex2要るってさ...

と言うわけでregex入れる。
Regex for WindowsからBinariesをダウンロードして展開 -> coreutilsに上書きして、いざmrubyビルド

image.png

しゃおらぁ!

後はパスを通す。

image.png

ようやっと本命のビルド''mrbc code.rb''

image.png

続けて上位ディレクトリにsrcディレクトリを作って''.\tool\TransCoder.exe code.mrb''

image.png

お、

image.png

できた!

ここまで来たら下記手順でOK

  • ''..\src*''を''.\src\''へコピー
  • makeコマンド
  • IchigoJam,USBシリアル変換モジュール,PCをつなぐ(IchigoJamの電源はまだ入れない)
  • make writeコマンド
  • IchigoJamの電源を入れる

image.png

makeが通って

image.png

Now lanching the brand new codeですって!

いざ、実行。あぁ、長い戦いがもうすぐ終わる...。

image.png

終わらなかったよね

mruby2.0への対応

できないなぁーってツイッターでつぶやいていたら、
本家の方からmruby2.0に対応したのでそちらで試してみるとよいとのこと。

と言うわけで、

  • mrubyを2.0へバージョンアップ
  • mrby-L1VMをビルドする
  • mrbcを作った後にmrby-L1VMを実施する

をやって動かしてみる。

mrubyを2.0へバージョンアップ

mruby - downloadsからcurrentの2.0.1をダウンロードする。
ダウンロードしたら展開してビルドする。

image.png

mrubyをビルドするの慣れたよね

無事ビルドできたのでパスを通す。mruby-1.4.1は消す。

image.png

はい。無事に2.0.1が入りました。

mrby-L1VMをビルドする

taisukef/mruby-L1VMをダウンロードしてビルドする。
Visual Studio Codeで開いてターミナルでgcc *.cを実行。a.exeができる。

image.png

a.exeをmruby-l1vm.exeとして、coreutils\bin配下に移動。

image.png

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の電源を入れる

となる。

では早速

image.png

mrbc!

からの、

image.png

失敗!

それを無視してのTransCoder!

image.png

ふりかえり

この手順をこなすまでに様々なエラーと立ち向かった。とにかく色んな所でエラーが出た。
Makefile、パス、配線、etc。
結局動いてないが、他の誰かが環境を構築する際に、全く情報入れずにやるよりかは楽になると信じたい。

注釈

1: 足って勝手に言ってるだけで多分正式名称は別にあると思う。虫っぽいからいいかなと思ってる。
2: IchigoJamには別途電源が必要

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした