軽量 Ruby (mruby/c) でマイコンプログラミング

松江工業高等専門学校 情報工学科
杉山 耕一朗2023年03月20日

杉山の関わり• mruby/c に着目したきっかけ– コミュニティからの声掛け– マイコンを用いた IoT システム・IoT 演習の模索 (2018年末)• Raspberry Pi (超小型PC) での長期観測には AC 電源が必要

置換

ESP32マイコン + センサ
電池で長期観測可能
Wi-Fi 機能も標準搭載した
IoT向きのマイコン

Raspberry Pi (超小型PC) + センサ
AC電源に接続の必要ありmruby/c チュートリアルの衝撃 (2018年度末)

2019/03/16

C から書くの？！

https://www.s-itoc.jp/support/technical-support/mrubyc/mrubyc-tutorial/ESP32/

自分でライブラリを書いてみるか• Rubyだけ書けば良い状態にしたい→ mruby/c コミュニティへ参加
C 言語 (現在の主流)

MicroPython#include <stdio.h>#include "freertos/FreeRTOS.h"#include "freertos/task.h"#include "driver/gpio.h"mruby/cfrom machine import Pinfrom time import sleep
led = Pin(13, Pin.OUT)

led = Pin.new(13, GPIO::OUT)

while true:
led.on()sleep(1)
led.off()
sleep(1)while true
led.onsleep 1
led.off
sleep 1end

#define BLINK_GPIO 13
void app_main(void) {gpio_pad_select_gpio(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
while(1) {gpio_set_level(BLINK_GPIO, 0);vTaskDelay(1000 / portTICK_PERIOD_MS);
gpio_set_level(BLINK_GPIO, 1);
vTaskDelay(1000 / portTICK_PERIOD_MS);}}

こう書きたい自分で Pin クラスを作るかmruby/c ライブラリの作成• 公式開発環境 (C 言語) を mruby/c でラップ
メインプログラム(mruby/c)mruby/c のクラス

C言語のプログラム～ESP32マイコン用の公式
開発環境の関数を利用～

関数化

Ruby のクラス・メソッドを呼ぶC 言語の関数を呼ぶ

Ruby のファイル名を教える

Cの関数を Rubyから呼ぶための設定

ここをライブラリとして自製する2019 年 3 月 ITOC セミナー「ESP32 × mruby/c IoTハンズオン」 を改変
https://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/ESP32/869

閑話休題：MicroPython• 公開されているツールの完成度：MicroPython >>>> mruby/c• センサメーカは，Arduino や MicroPython のサンプルコードを提供するのが一般的．
• MicroPython を使えばよい？
– 目標達成のために必要な機能は，どんな言語を使う場合であれ，自分で作らねばならない– 開発しやすい・好みな言語を使う方が効率的．

• mruby/c で教材開発する利点・意義– 地域に開発者がいる．日本語で相談できる– 地域の人が応援してくれる・勝手に宣伝してくれる• 学生の卒業論文テーマとして扱いやすい

共同研究の例(2019年度~)• mruby/c を活用した授業実践– 杉山ほか：高専の授業にmruby/cを取り入れたプロジェクトの始動と将来展望(RubyWorldConference 2019)
共同研究の内容

研究体制• mruby/c を高専の新規開講授業(2020年度)への組み込み• 松江市 まつえ産業支援センター✓ ESP32 マイコンの利用を想定• 島根県 しまねソフト研究開発センター (ITOC)✓ 松江高専情報工学科 5 年生「組込システム演習」(2コマ 180 分 × 16 回)•

株式会社 モンスターラボ (2019年度)•Rubyプログラミング少年団 (2021年度〜)•

株式会社 CMCソリューションズ (2021年度〜)• ESP32マイコン用mruby/c ライブラリ開発

← 卒業生
← 卒業生

取組実績
教科書の整備学習ボード•

サンプルコードも「教科書」

高専の授業「組込システム演習」•✓ 教科書作りとしてのライブラリ開発

Arduino, C 言語(ESP-IDF), micropython, mruby/c の各種言語を用いたプログラミング技法の修得•

センサ利用のためのライブラリを mruby/c で書く✓ C 言語のラッパー作製，Ruby のクラス定義✓ センサのデータシートを読めるようになる•

演習において学生の書いたコードを取り込むことで，年々充実してきているLinux でテキストベースのプログラミング

特別講演(地元企業さんによる事例紹介)

演習風景

7

https://www.gfd-dennou.org/arch/iotex/es/mrubyc_2021/

共同研究の例(2019年度~)• スモウルビー + mruby/c → 初等教育用教材– 青笹ほか：loTデバイス用ビジュアルプログラミングツール「SmT」の開発～地域コミュニティと連携した人材育成の成果報告～ (RubyWorldConference 2020)
研究体制• 松江市まつえ産業支援センター

共同研究の内容• プログラミング学習で利用可能なIoT教材の開発• 島根県 しまねソフト研究開発センター (ITOC)• ブロックから mruby/c のコード生成• クリック一つでマイコンボードにプログラムの書き込み• 小中学生が IoT を学ぶためのツールとして活用できるかの有効性を検証• Rubyプログラミング少年団← 卒業生• 株式会社 島根情報処理センター (2020年度〜)• 株式会社 CMCソリューションズ (2020年度〜)• サーバートラスト 株式会社 (2021年度〜)

← 卒業生

← 卒業生

取組実績
小中学生向け IoT 講座

SmT : スモウルビー + 高専製の拡張機能•

ブロックとmruby/cのソースコードとの相互変換

高専ボード機能およびソースコードのコンパイルとRBoardへの書き込み機能を実装•換気センサ (CO2センサ)，宝探しセンサ (GPS)，などのテーマ作成•

IoT教材の有用性の検証
LED , スイ ッ チを 使
う こ と の宣⾔

お宝ま での距離を
モ ニタ に表⽰

M5stackGPS使う

衛星が3 台以上⾒えないと 位置が決ま ら ないのでお宝1 ~ 8 ま での距離を計算する ブ ロ ッ ク ．
スイ ッ チでお宝番号を指定する ．
設定さ れたお宝番号をLED で表⽰する「 も し 〜」 を 使っ て，お宝に近いか判断．
近ければ⾳を 鳴ら す

RBoard
時間調整( 5 秒)
LED 消す電波の受信が不⼗分で位置が決ま ら ないと きは X X X X と 表⽰

宝探しの移動の軌跡
8Matz葉がにロボコン
軽量 Ruby 言語 mruby/c を用いた IoT プログラミングツールの実証実験フィールドとしての位置づけ．
→ 多くの方の協力を得て「ご当地ロボコン」へ．2023/01/15 のプレ大会には 23 チーム参加
2023/01/16

山陰中央新報NHK•主•共•後•協

朝日新聞

催：松江工業高等専門学校
催：しまねOSS協議会、松江市
援：島根県
力：福井県こどもプログラミング協議会
JAXA 宇宙科学研究所 Planet-C プロジェクト

かにロボ連盟：越前がにロボコン

開発している教科書・ライブラリ• 電脳倶楽部の Web, GitHub にたくさん置いてます

https://www.gfd-dennou.org/arch/iotex/

https://github.com/gfd-dennou-club/

ブラウザツールの開発もRubyエディタ

SmT

書き込みページ

ブロックでプログラムを書く

http://kanicon.epi.it.matsue-ct.jp/

ブラウザ上でRuby を直接書く

https://www.epi.it.matsue-ct.jp/j1819/convert/u

ボタンをクリックするだけでマイコンにプログラムが書き込まれる
https://www.epi.it.matsue-ct.jp/j1819/convert/upload.php

ブラウザツールの開発も• ビジュアルプログラミングツールは 2 種類

Node-RED
データの流れを図化

Scratch (Smalruby3)
論理構造を図化まとめ• mruby/c ライブラリ開発・ツール開発を進めている– よければ使ってみてください– 一緒に開発しませんか？

• 地球惑星科学的な展開を模索したい→ アイデア・コメントを頂けると喜びます