mruby/c で動くマイコンボード RBoardにUbuntuから書き込む
こんにちは。
Rubyが好きな人として、mrubyにも少し触れてみなければと思ってRBoardを買いました。
このページではUbuntuでRBoardに書き込みを行う方法を説明します。(Ubuntu以外のLinuxもだいたい同じだと思います)
RBoardとは
公式サイト:https://www.sjc-inc.co.jp/service/rboard
公式ドキュメント:https://yoshihiroogura.github.io/RBoardDocument/
「RBoard(アールボード)」はRuby(mruby/c)をマイコンで使ってみたい!という人のための入門ボードです。できる限り低レイヤー的実装をしており様々なセンサーに対応できます。
GROVEポートを搭載しているためはんだ付け不要で様々なセンサ・アクチュエータを使用できます。
スキッチサイエンスというサイトで販売しています。
(↑画像はスキッチサイエンスのサイトより)
mruby と mruby/c
mrubyは、Rubyの開発者であるまつもとゆきひろ氏が開発されている組み込み用のRuby実装です。
mruby/cは、mrubyよりもさらに小さなマイコンや小型端末でも動作するRuby実装です。しまねソフト研究開発センターと九州工業大学が開発しています。
RBoardにUbuntuから書き込みたい
RBoardの公式ドキュメントは、mruby/c IDEを用いてWindowsとMacからRBoardに書き込む方法が説明されています。
しかしUbuntuから書き込む方法がなくて困っていました。RBoardの開発者の方にmrbwrite
を紹介されました。これを試したらUbuntuからRBoardに書き込むことができたのでやり方を記録します。
準備
mrubyのインストール
mruby/cでRubyのスクリプトを動作させるためには、mrbc
コマンドを用いて、Rubyのスクリプトをバイトコードに変換する必要があります。そのためmrubyのインストールが必要になります。ここで注意が必要なのは、mrubyのバージョンです。2021年2月24日現在、mruby/c IDEでは、mruby-2.0.1を利用しています。最新のmrubyの生成するバイトコードはRBoard動作しない場合があります。mrubyのバージョンを2.0.1にします。(RBoardもアップデートされていく可能性がありますので、都度mrubyのバージョンをご確認ください)
git clone https://github.com/mruby/mruby
cd mruby
git checkout -b v2.0.1 refs/tags/2.0.1
さて、mrubyのコンパイルはrakeを使うのですが、最新のRuby3.0.0のRakeでは実行時にエラーが出るようです。(あまり見ていませんが、たぶんキーワード引数とか、そういう問題だろうと思います。)rbenvなどで切り替えてruby2.7.2を利用するとよさそうです。
rake all
バージョンを確認しましょう。
bin/mruby --version
mruby 2.0.1 (2019-4-4)
と表示されればOKです。
テストを実行することもできます
rake test
問題なく実行できたでしょうか?
必要に応じてmrbc
のエイリアスを追加すると、その後の作業が楽になります。新しいmrbcと衝突しないように、mrbc201
としました。
alias mrbc201='your/path/to/bin/mrbc'
シェルを再起動、もしくはsource ~/.bashrc
して、エイリアスの動作を確認します。
mrbc201 --version
your/path/to/bin/mrbc: no program file given
と表示されます。
mrbwriteのインストール
IDEを利用しない場合、RBoardの書き込みはmrbwriteという公式ツールを使います。
Github: https://github.com/mrubyc/mrbwrite
公式READMEによると、POP3プロトコルに準じたプロトコルになっているそうです。
ダウンロードします。
git clone https://github.com/mrubyc/mrbwrite
このままbuildした場合、Rboardではうまく動作しない部分がありましたので2箇所変更します。
まず、こちらの130行目のclear_bytocode();
をコメントアウトします。
/*
connect target
*/
if( connect_target() != 0 ) goto DONE;
// clear_bytecode(); ← コメントアウトする
ここは、コメントアウトしなくても動作自体に支障ないそうです。しかし、消した方が不要なエラーメッセージが表示されなくなり精神衛生上よろしいと思います。
次に、151行目のshow_prog();
をコメントアウトします。
/*
display program list
*/
// show_prog(); ← コメントアウトする
ここは、コメントアウトしないと動作が詰まりますので、Rboardで利用する場合はコメントアウトが必要だと思います(少なくとも作者が試したバージョンでは)。以上でmrbwrite.cpp
の修正は終了です。
ビルドします。mrbwriteはQtのライブラリを利用しています。どうしたか忘れてしまいましたが、ビルドに必要なQt関連のパッケージがいくつかあったかもしれません。もしも何かライブラリが足りなそうな感じになったら、apt search qt hogehoge
あたりのコマンドで探して、都度インストールしてください。
qmake
make
ビルドはすぐに終わります。必要に応じてmrbwriteのaliasを設定しておきましょう。
mrbrwiteは sudo
で実行しないと動作しないようです。なのでエイリアスにも sudo
をつけています。
alias mrbwrite='sudo your/path/to/bin/mrbwrite'
シェル再起動、またはsource ~/.bashrc
後に
mrbwrite
とタイプして、must specify line (-l option)
と表示されていれば完了です。
実際にRBoardに書き込みを行う
さて、それでは実際にmrubyに書き込んでみましょう。
LEDをつけたり消したりする簡単なコード test.rb
を作成します。
while true
leds_write(1)
sleep(0.1)
leds_write(0)
sleep(0.1)
end
まずはRubyのコードを mruby でバイトコードに変換します。test.mrb
がバイトコードです。
mrbc201 test.rb
つぎにRBoardをMicro USBで接続します。
mrbwrite --showline
を打つと、USBの一覧?が表示されます。手元の環境では下のように表示されました。
ttyACM0 MCP2221 USB-I2C UART Combo Microchip Technology Inc.
この先頭の ttyACM0
がDevice nameとして使用できます。ttyACM0
もしくは '/dev/ttyACM0'
などとして指定します。
mrbwrite -l ttyACM0 -s 19200 test.mrb
ハマりやすいのは、このコマンドはroot権限でないと実行できない場合があるという点です。ここでは先程sudoを指定したaliasを利用しているので問題なく実行できると思います。そうでない場合は sudo mrbwrite
としてみるとうまく書き込めるかも知れません。
-s 19200
オプションは、公式に合わせました。sはスピード(speed)を意味し、ボーレートというもののようです。
ボーレートは、デジタルデータをアナログデータに変換し、モデムなどのアナログ回線でシリアル転送する際の単位として用いられる。ボーレートの値が大きければ大きいほど、同じ時間内により多くの情報を転送することが可能なことを意味する。位相変調方式によって一度により多くのデータを変調できる場合には、ボーレートの値も大きくなる。
コマンドを打ち込んでエンターキーを押して実行したあとで、時間切れに鳴る前にRBoardのリセットスイッチを押したり、ケーブルをつなぎ直したりすると、コードが書き込まれます。(大抵の場合リセットスイッチが動作しますが、場合によってコードをつなぎ直さないと認識されない場合があります。)以下のようなメッセージがターミナルに表示されれば完了です。
Start connection.
OK.
Writing mml.mrb
OK.
Start mruby/c program.
OK.
のように表示されれば、うまく書き込めています。
うまく書き込めていれば下図のようにLEDが点滅すると思います。
この記事は以上です。
Author And Source
この問題について(mruby/c で動くマイコンボード RBoardにUbuntuから書き込む), 我々は、より多くの情報をここで見つけました https://qiita.com/kojix2/items/bc8b307e3904c0ab46ed著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .