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
1.9k
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 PicoRuby to Another Microcontroller: ESP32
yuuu
4
640
RubyKaigi 2025でプロポーザルが初めて採択されるまでにやったこと
yuuu
1
440
地方企業の強みを活かす!AWSを活用したIoTシステムの開発事例とその裏側
yuuu
0
84
あの重機は今どこにある?- 重機管理IoTプロダクトのバックエンドをAWSで構築した話 -
yuuu
0
910
mruby-esp32におけるペリフェラルAPIの実装検討
yuuu
1
720
育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り -
yuuu
4
4.6k
committee-railsとOpenAPI Generatorでスキーマ駆動なAPI開発をする
yuuu
0
890
mruby on IoT devices.
yuuu
4
2.5k
SORACOM ArcでオフィスのIoT化を進行中です⭐
yuuu
1
1.1k
Other Decks in Programming
See All in Programming
Global Azure 2025 @ Kansai / Hyperlight
kosmosebi
0
170
CQRS/ESのクラスとシステムフロー ~ RailsでフルスクラッチでCQRSESを組んで みたことから得た学び~
suzukimar
0
170
データベースの技術選定を突き詰める ~複数事例から考える最適なデータベースの選び方~
nnaka2992
3
3.5k
Boast Code Party / RubyKaigi 2025 After Event
lemonade_37
0
120
Digging into the Matrix: Practicing Code Archaeology
arthurdoler
PRO
0
180
Doma で目指す ORM 最適解
nakamura_to
1
140
ぽちぽち選択するだけでOSSを読めるVSCode拡張機能
ymbigo
14
6.7k
AWS Summit Hong Kong 2025: Reinventing Programming - How AI Transforms Our Enterprise Coding Approach
dwchiang
0
150
TypeScriptのmoduleオプションを改めて整理する
bicstone
4
270
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
550
OpenTelemetryで始めるベンダーフリーなobservability / Vendor-free observability starting with OpenTelemetry
seike460
PRO
0
150
バイラテラルアップサンプリング
fadis
3
660
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Embracing the Ebb and Flow
colly
85
4.7k
Fireside Chat
paigeccino
37
3.5k
Docker and Python
trallard
44
3.4k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
630
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
14
870
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
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
ご清聴ありがとうございました