Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
mrubyでマイコンの世界に足を踏み入れる
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Y_uuu
March 04, 2023
Programming
2.3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
mrubyでマイコンの世界に足を踏み入れる
鹿児島Ruby会議02
2023.03.04 Sat. 15:40-16:00
https://k-ruby.com/kagoshima-rubykaigi02/
Y_uuu
March 04, 2023
Transcript
44 slides
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
ご清聴ありがとうございました
More Decks by Y_uuu
See All by Y_uuu
Growing PicoRuby's Ecosystem on ESP32
yuuu
2
130
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
1k
Porting filesystem-fat to Another Microcontroller: ESP32
yuuu
2
480
Porting PicoRuby to Another Microcontroller: ESP32
yuuu
4
1.2k
RubyKaigi 2025でプロポーザルが初めて採択されるまでにやったこと
yuuu
1
840
地方企業の強みを活かす!AWSを活用したIoTシステムの開発事例とその裏側
yuuu
0
210
あの重機は今どこにある?- 重機管理IoTプロダクトのバックエンドをAWSで構築した話 -
yuuu
0
1.1k
mruby-esp32におけるペリフェラルAPIの実装検討
yuuu
1
950
育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り -
yuuu
4
5.3k
Other Decks in Programming
See All in Programming
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.9k
Secure Your Coding Agent Like It’s Malware (v1.5) 🇬🇧 @Code.talks 2026
richargh
0
150
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
SODA - FACT BOOK(JP)
sodainc
1
40k
From Java 8-11 to Java 21-27 — Benefits, Challenges, and a Practical Migration Path
x5gtrn
PRO
0
100
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
330
はじめてのPLATEAU
nokonoko1203
1
650
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
320
Distance field of Julia set
kinakomoti321
0
320
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.2k
疎結合とは何か?ソフトウェア設計における結合バランスについて考える #phpcon_niigata
kajitack
0
140
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
340
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
800
KATA
mclloyd
PRO
35
16k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
660
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
640
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Facilitating Awesome Meetings
lara
57
7.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
520
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
60k
Agile that works and the tools we love
rasmusluckow
331
22k