Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mrubyでマイコンの世界に足を踏み入れる
Search
Y_uuu
March 04, 2023
Programming
2
2k
mrubyでマイコンの世界に足を踏み入れる
鹿児島Ruby会議02
2023.03.04 Sat. 15:40-16:00
https://k-ruby.com/kagoshima-rubykaigi02/
Y_uuu
March 04, 2023
Tweet
Share
More Decks by Y_uuu
See All by Y_uuu
Porting filesystem-fat to Another Microcontroller: ESP32
yuuu
2
32
Porting PicoRuby to Another Microcontroller: ESP32
yuuu
4
780
RubyKaigi 2025でプロポーザルが初めて採択されるまでにやったこと
yuuu
1
510
地方企業の強みを活かす!AWSを活用したIoTシステムの開発事例とその裏側
yuuu
0
100
あの重機は今どこにある?- 重機管理IoTプロダクトのバックエンドをAWSで構築した話 -
yuuu
0
970
mruby-esp32におけるペリフェラルAPIの実装検討
yuuu
1
770
育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り -
yuuu
4
4.7k
committee-railsとOpenAPI Generatorでスキーマ駆動なAPI開発をする
yuuu
0
920
mruby on IoT devices.
yuuu
4
2.6k
Other Decks in Programming
See All in Programming
実践 Dev Containers × Claude Code
touyu
1
120
DataformでPythonする / dataform-de-python
snhryt
0
150
商品比較サービス「マイベスト」における パーソナライズレコメンドの第一歩
ucchiii43
0
270
CIを整備してメンテナンスを生成AIに任せる
hazumirr
0
510
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
5
750
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
430
Claude Code で Astro blog を Pages から Workers へ移行してみた
codehex
0
170
React 使いじゃなくても知っておきたい教養としての React
oukayuka
18
5.3k
バイブコーディングの正体——AIエージェントはソフトウェア開発を変えるか?
stakaya
5
720
テスターからテストエンジニアへ ~新米テストエンジニアが歩んだ9ヶ月振り返り~
non0113
2
250
ZeroETLで始めるDynamoDBとS3の連携
afooooil
0
150
DynamoDBは怖くない!〜テーブル設計の勘所とテスト戦略〜
hyamazaki
0
180
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Site-Speed That Sticks
csswizardry
10
750
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.5k
Agile that works and the tools we love
rasmusluckow
329
21k
Building Adaptive Systems
keathley
43
2.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Transcript
2023-03-04(Sat) 岡嵜雄平 mrubyでマイコンの世界に足を踏み入れる 鹿児島Ruby会議02
自己紹介
岡嵜雄平 @Y_uuu 株式会社Fusic IoTクラウドエンジニア フィヨルドブートキャンプ メンター
本日のお話 • マイコンとは • マイコンでmruby • プログラムが実行されるまで • mruby-esp32の敷居を下げる •
まとめ 4
マイコンとは
マイコンとは • マイクロコントローラ (英: microcontroller) とは、 CPUに加えてRAM、ROM、I/Oポートなどを 1つの集積回路(IC)にまとめた、いわば極小のコンピュータ。
• 主に機器の制御に使われる。 6 https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9
ESP32 • Espressif Systems社によって開発されたマイクロコントローラ(マイコン) • 低消費電力かつWi-Fi・Bluetoothも内蔵しているためIoTとの親和性が高い • M5Stackに搭載されているマイコンもESP32 7 https://ja.wikipedia.org/wiki/ESP32
ESP32-DevKitC • ESP32を搭載した評価基盤 • 1600円で買える(送料・手数料は別) • mrubyを動かすために十分なスペック(RAM: 512KB, ROM: 4MB)
8
マイコンでmruby
mruby • 組込みシステムをターゲットに開発されたRubyの処理系 • 現在もMatzを中心に開発が続けられている • mrubyをさらに軽量化したmruby/cというOSSも存在する 10
mruby-esp32 • ESP32上でmrubyを動かすためのOSSプロジェクト • ESP-IDFというフレームワークを使ってmrubyをコンパイル・リンクしている 11 ESP-IDF Project Component Main
Component mruby Toolchain mruby-esp32.bin コンパイル・リンク
mruby-esp32 • binファイルをROMに書き込むことで起動 • FreeRTOS(組込み向けのリアルタイムOS)上でmrubyが動作 12 ESP-IDF Project Component Main
Component mruby Toolchain mruby-esp32.bin ESP32-DevKitC FreeRTOS アプリケーション mruby MrubyTask コンパイル・リンク アップロード (ROMに書き込み) Library
使い方📝 13
使い方1. ESP-IDFをインストール • インストール手順はESP-IDF Programming Guide > Get Startedを参照 14
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html
使い方2. mruby-esp32をgit clone • mrubyがSubmoduleとなっているので注意 15 https://github.com/mruby-esp32/mruby-esp32
使い方3. ビルド • Idf.py build コマンドでビルドします(初回は1分ほどかかります) 16
使い方4. デバイスとPCを接続 • /dev/tty.usbserial-xxx のようなデバイスファイル(PORT)を確認 17
使い方5. 書き込み・起動 • idf.py -p (PORT) flash monitor コマンドで書き込み・起動します 18
LEDと反対側のボタンを押して、 モードを切り替える 実機での出力を シリアル通信で確認
参考: 福岡Rubyist会議03の登壇スライド • テーマ: mruby on IoT devices. • ESP-IDF
v5.0への対応、mruby-esp32-mqttの開発について話しました • https://speakerdeck.com/yuuu/mruby-on-iot-devices 19
mrubyでプログラムが実行されるまで
プログラムが実行されるまで • mrubyにおいてプログラムは以下のような流れで実行される 1. Rubyのコードを書く 2. mrubyのコンパイラ(mrbc)で1を中間言語(.mrb)にコンパイルする 3. 2をmrubyのVMに渡す 21
main.rb main.mrb mruby VM mrb_load_irep_cxt() コンパイル 入力
mruby-esp32におけるプログラム実行方法(過去) • ちょっと前までこんな手順で実行してました 1. ESP-IDFのコンパイル時にプログラムファイル(.rb)→中間言語(.h) 2. 中間言語(.h)をC言語としてincludeしてバイナリ生成 3. ESP32起動後、mrubyのVMに中間ファイルの内容を入力 22
main.rb main.h mruby_main.c コンパイル include mruby VM mrb_load_irep_cxt() 中間言語を 入力 バイナリ(.bin)
mrubyはコンパイラを内包している • mrbgemsの1つ • 予めコンパイルせずとも、Rubyのプログラムを直接読み込める 23 mruby mrbgems mruby-bin-mrbc mruby-compiler
mruby-esp32におけるプログラム実行方法(現在) • 今はこういった手順に変わっています 1. main/spiffs/main.rbにプログラムを記述 2. main/spiffs配下をファイルシステムとしてイメージ化→ROMに書き込む 3. main.cにてファイルをfopenし、mruby VMに渡す
24 main.rb mruby_main.c mruby VM mrb_load_irep_cxt() fopen .rbを入力 バイナリ(.bin) ROM プログラム(.rb)を 中間言語(.mrb)に コンパイル→実行
CMakefileLists.txtでのファイルシステム定義 • 公式ドキュメントを参考に記述 • ESP-IDFのビルド時にファイルシステムを含んだバイナリが構築される 25 https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/storage/spiffs.html この行を追加
ROMのパーティション定義 • ROM上にstorage領域を設け、ファイルシステムとして利用する 26 ブートローダー パーティションテーブル nvs: 24KB phy_init: 4KB
factory: 1.5MB 空き 0x00000000 0x00001000 0x00009000 0x0000f000 0x00010000 0x00180000 ここをファイルシステムとして使用 main.rbを保存する storage: 200KB 0x001B2000 main.rb ROM
mruby-esp32の敷居を下げる
mruby-esp32は敷居が高い? • ESP-IDFをインストールしないと使えない • 必要に応じてmrbgemsを追加・削除しないといけない • 気づいたらC言語を読み書きする羽目に… 28
MicroPython(on ESP32)は敷居が低い • イメージをダウンロードして書き込むだけで利用できる • mruby-esp32もここを目指すべき 29 https://micropython.org/download/esp32/
GitHub Actionsでmruby-esp32のROMイメージを生成 • ソースコードをビルドして、mruby-esp32.binをリリースする 30 ESP-IDF Project Component Main Component
mruby Toolchain mruby-esp32.bin ESP32-DevKitC FreeRTOS アプリケーション mruby MrubyTask コンパイル・リンク アップロード (ROMに書き込み) Library ここをGitHub Actionsで
GitHub Actionsで実行する処理 • ESP-IDFのbuild, merge binのアクションが公開されているので活用 • https://github.com/espressif/esp-idf-ci-action 31
使い方📝 32
使い方1. esptool.pyをインストール • Macであればhomebrew, もしくはpipコマンドでインストールできる 33 https://docs.espressif.com/projects/esptool/en/latest/esp32/
使い方2. mruby-esp32-flash.binをダウンロード • mruby-esp32のReleasesから最新版をダウンロード 34 https://github.com/mruby-esp32/mruby-esp32/releases ダウンロード
使い方3. 書き込み・起動 • esptool.py --chip esp32 --port $(YOUR_SERIAL_PORT) write_flash -z
0 mruby-esp32-flash.bin • シリアルモニタを接続するとサンプルプログラムが動作 35
簡単 🎉 36
Rubyのプログラムを書き換える • main/spiffs/main.rbに任意のプログラムを記述 37
Rubyのプログラムを書き換える • spiffsgen.py を取得してイメージを生成 • https://github.com/espressif/esp-idf/blob/master/components/spiffs/ spiffsgen.py • python ./spiffsgen.py
204800 ./main/spiffs spiffs.bin 38 spiffs.bin main.rb main.rbが格納された ファイルシステムのイメージ
Rubyのプログラムを書き換える • spiffs.binをROMに書き込み • esptool.py --chip esp32 --port $(YOUR_SERIAL_PORT) write_flash
-z 0x190000 spiffs.bin 39 spiffs.bin main.rb ROM上のstorageの部分だけ 新しいイメージで上書き 39
今後やりたいこと • mrbgemsの充実(UARTとか) • mruby-esp32-mirbの統合 • ドキュメントの整備 40
まとめ
今日のテーマをおさらい 42 ここ!
まとめ • mrubyでマイコンの世界に足を踏み入れましょう 👍 43
ご清聴ありがとうございました