7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stack CORE S3とmruby3.4で軽量Rubyフォーラムがやったこと(その1)

7
Last updated at Posted at 2025-12-09

hack-Academia.png

mrubyは2012年4月に公開され気がつくと今年で13年経っています。

こんにちわ、軽量Rubyフォーラムの石井です。
最近はTidal,QobuzといったストリーミングをRoon,Direttaといったツールをさらに活用してIPレス、JumboFrameで聞くネットワークオーディオに深くハマっています。

さて軽量Rubyフォーラムはmrubyの幅広い利用を促す目的で様々な活動をしています。その中で今年行った大学、高専生さんを対象に実施した”モノを動かすプログラム体験”をご紹介します。

この体験会は福岡県商工部が主催する未来ITイニシアティブ特定非営利活動法人AIPのご協力で実現しました。

”モノを動かすプログラム体験” Hack-Academiaとは?

Kanban.png

組み込み開発、これを実際に体験してみましょうというのがこのHack-Acedemiaです。
対象は大学生、大学院生、高専生、高校生。理系に限らず幅広く募集しました。

組み込みというと取っつきにくい、なにそれ?という印象があるのでモノを動かすというふうにしています。経験ないけど興味あるという学生さんを誘い込むために初級コースと本当に組み込み開発を体験してみたいという学生さんのための本格コースの2つに分けました。

初級コースは楽しく参加できる電子工作的な2日間の体験会です。

会場は福岡県未来ITイニシアティブセンター(旧Rubyセンター)をお借りしました。使用したマイコンはM5Stack Core S3, Displayに絵を書いたりLチカなど体験してもらいます。LチカもRGB LEDを用意し距離センサーと連動して色が変わるなどちょっとモノを動かすっぽくしています。mrubyは最新の3.4.0をポーティングしました。
開発環境の準備やmrubyの基本的使い方も含まれるので本格コースの参加者にも参加してもらいます。

本格コースは用意されたマイコン、センサー類を使って自分で考えたシナリオに沿って開発してもらう3日間+発表会1日のハッカソンです。

お題は自由に各学生さんが日頃あったら良いなと思っているものを作ってもらいます。1日といっても午後1時から4時までなのであまり時間はありませんがmrubyの使いやすさとコーチであるベテランの組み込みエンジニアのサポートでなんとかなるんですよね。

       本コース用に用意されたマイコンとセンサー類

スクリーンショット 2025-12-07 14.40.19.png

名称 内容
M5Stack CoreS3 IoT開発キット https://ssci.to/8960
距離センサ SEN0590 http://ssci.to/9217
GROVE 温湿度センサ SHT31 https://ssci.to/2853
GROVE カラーセンサ 現在製造中止
GROVE 水位センサ https:// ssci.to/6282
GROVE I2Cハブ http://ssci.to/796
その他:単色LED, RGB LED, ブレッドボード

つかうのはもちろんmruby

この体験会のためにM5Stack CoreS3 上で mruby3.4.0 を動作させるためのサンプルプロジェクトM5StackCoreS3-mrubyを用意しました。
Github上のmruby forumで公開しています。ビルドにあたってはESP-IDFが必要です。READMEを参考にしてください。
https://github.com/mruby-Forum/M5StackCoreS3-mruby

M5StackCoreS3-mrubyに搭載している体験会用に用意している拡張ライブラリ(mrbgems)は以下の通り。ドキュメントなど不十分なところもありますが(鋭意更新中)サンプルプログラムなど参考にしてください。

mrbgem 概要
mruby-stdio 標準入出力ライブラリ
mruby-m5stack-gpio GPIO(汎用IO)ライブラリ
mruby-m5stack-pwm PWM制御ライブラリ
mruby-stdio-m5stack M5Stack用標準入出力ライブラリ
mruby-sleep-esp32 sleep, delayメソッド
mruby-m5stack-i2c I2C制御ライブラリ
mruby-m5stack-ble-gatt M5Stack BLE GATTライブラリ
mruby-m5stack-lcd M5Stack CoreS3 LCDライブラリ
mruby-i2c-device I2Cデバイスライブラリ
mruby-grove-color-sensor GROVEカラーセンサライブラリ
mruby-grove-temp-humi-sensor GROVE温湿度センサライブラリ
mruby-grove-water-level-sensor GROVE水位センサライブラリ
mruby-laser-ranging-sensor レーザ距離センサライブラリ
mruby-haext-accel 加速度センサ(M5Stack CoreS3内蔵)ライブラリ
mruby-m5stack-savemrb mrubyファイル転送
mruby-m5stack-mrb mrubyアプリメニュー

micro SDカードのルートディレクトリに autorun.mrb のファイル名でmrubyアプリケーションを配置することで、M5StackCore3-mruby起動時にmrubyアプリケーションを自動実行することができるようにしています。
ただその都度アプリを書き込んでM5Stackに差すという行為は開発中にはなかなか面倒なものです。そこでファイル転送機能(savemrb)をつけました。コンパイルしたmrubyバイナリ(mrbファイル)をターミナルソフトCooltermのxmodem機能を使ってM5Stackに転送します。
mrubyアプリメニューを使って保存したアプリを選択し、実行させます。

初級コース ー まずはマイコンに触ってみよう ー

このHack-Academiaは初級コース2日間、本格コース4日間と10月11月の2ヶ月間の土日で行われます。参加者が集まるか心配でしたが初級のみ申し込み5名、実際には1名キャンセルで参加は4名(高校生1,大学生3,)、本格4名(高専1,大学2、企業1)の応募がありました。初級コースのみ参加の大学生2名は興味を持ってくれてその後の本格コースにも参加となり(本格コースの1名、直前キャンセルあり)本格コースは5名参加となりました。
大まかな内容はこんな感じです。

スクリーンショット 2025-12-08 10.08.14.png

このHack-Academiaは”モノを動かすプログラム体験”の他に”Webアプリ開発”と”モバイルアプリ開発”があり10/13は初日ということで全参加者が集まっています。

IMG_3454.jpg

まずはまつもとさんの講演で始まります。AIに関する講演でまつもとさんが普段使っているAIの話やどう使うかという話でした。なかなか言うことを聞いてくれないとか意地を張るAIなど面白い話満載でした。まつもとさんから参加者には”AIは辛抱強くサポートしてくれる相棒としてプログラムの勉強に使ってほしいというアドバイスがありました。個人的には”AIはソフトなので間違っても下げる頭がない”というのが受けました。

Matz講演後場所を移して”モノを動かすプログラミング体験”の開始です。
M5StackCoreS3-mrubyは起動するとmirbが立ち上がります。Cooltermなどのターミナルから接続してrubyコマンドを実行できます。

↓ M5Stack初期化して起動 MDカードに書き込まれたmrubyアプリ実行の様子

スクリーンショット 2025-12-08 10.38.31.png

↓ 初級コース実施中
↓ テキストより CooltermでのmirbでRuby実行の様子

スクリーンショット 2025-12-08 10.44.46.png

日本の国旗をLCDに書いてみます

スクリーンショット 2025-12-08 12.22.34.png

コードはこんな感じです。

Japn.rb
LCD.clear
LCD.fill_rect(50, 40, 219, 159, LCD::WHITE)
LCD.fill_circle(160, 120, 50, LCD::RED)
gets

国旗を書いたり動かしてみたり徐々に慣れてもらっています。
はじめて触るマイコン、mruby、ターミナルなどなかなか進みません。
単色のLチカまで行きたいところですがここで時間切れ。
ただ次回はオンライン開催、ブレッドボードなど初めての人も多いので一旦配線だけしてもらいます。やはりむずかしそう、それでもなんとか組み上げれました。

スクリーンショット 2025-12-08 12.32.46.png

2日目はオンラインで行います。対面でないとやはり色々不安です。
早速単色LEDを使ったLチカです。接触不良など数々の障害発生しますが、点きました!という嬉しい声が画面の向こうから上がります。

m5stackcores3-mruby-Lchika-sample.rb
# L-chika sample
led = GPIO.new(0)

loop {
  led.write(1)
  delay(500)
  led.write(0)
  delay(500)
}

そしてRGB LEDを配線してLチカです。
スクリーンショット 2025-12-08 13.14.57.png

その後、mrubyやGPIOなどハードウェア制御の簡単な説明。この後、いよいよセンサーとの連携。
距離センサーを使いRGB LEDを制御します。センサーからの距離によってRGB発光を切り替えるというものです。

これが距離センサーです。まず距離センサーをM5Stackにつないで動作することを確かめます。
スクリーンショット 2025-12-08 13.19.41.png

ここでM5StackにはGROVEコネクタがいくつかつあるので違うところに繋いでしまいそれが原因で繋がらないなどトラブル発生。なんとか原因究明してついに距離センサーとRGB LEDの連携に行きます。

m5stackcores3-mruby-distance-led-sample.rb
# RGB L Chika
# RGB LEDクラス
class RGBLED
  # コンストラクタ
  def initialize
    @ledr = GPIO.new(0)
    @ledg = GPIO.new(1)
    @ledb = GPIO.new(2)
  end
  # RGB LED点灯
  # r:赤, g:緑, b:青 (0:消灯, 1:点灯)
  def write(r, g, b)
    @ledr.write(r)
    @ledg.write(g)
    @ledb.write(b)
  end
end

# RGB LED/距離センサ初期化
rgbled = RGBLED.new
sensor = LaserRangingSensor.new

LCD.text_size = 2
loop {
  # 距離計測
  dist = sensor.read
  LCD.clear
  LCD.setCursor(2, 2)
  LCD.puts dist
  if dist >= 1000
    colors = [1, 1, 1]  # 1m以上 白色
  elsif dist >= 500
    colors = [0, 1, 0]  # 50cm以上 緑色
  elsif dist >= 200
    colors = [1, 1, 0]  # 20cm以上 黄色
  else
    colors = [1, 0, 0]  # 20cm未満 赤色
  end
  rgbled.write(colors[0], colors[1], colors[2])
  delay(dist / 2)
  rgbled.write(0, 0, 0)
  delay(dist / 2)
}

このプログラムは以下のように動作します。
ー 測定距離に応じてLED表示色を変更
• 1m以上: 白
• 50cm以上: 緑
• 20cm以上: ⻩
• 20cm未満: 赤

ー 距離が近づくにつれてLEDの点滅速度を速くする。

実際の動作はこんな感じです。

ということで初級コースの2日間が終わりました。先に書いた通りこれに興味を持ってくれた大学生2名がさらに本格コースに参加してくれることになりました。
モノを動かすプログラミング体験という形で組み込み開発に興味を持ってもらおうと試みはうまくいきそうです。

長くなりました。お付き合いいただきありがとうございます。
本格コースがどうなったかはその2で公開(12/16予定)します。5名参加されていますがそれぞれかなりユニークな発想で挑戦されています。またご覧ください。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?