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
PCとPicoRuby-ESP32間でシリアルファイル転送
Search
Katsuhiko Kageyama
December 04, 2025
Technology
65
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PCとPicoRuby-ESP32間でシリアルファイル転送
Katsuhiko Kageyama
December 04, 2025
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
同人誌とVMづくり
kishima
1
66
Tab5をRubyで動くパソコンにする
kishima
2
450
Family mrubyの進捗
kishima
1
160
PicoRuby as a Multi-VM Operating System
kishima
1
570
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
660
Rubyでmicro-ROS!
kishima
0
230
mruby(PicoRuby)で ファミコン音楽を奏でる2
kishima
1
290
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
870
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
850
Other Decks in Technology
See All in Technology
プロダクションコードにおける encoding/json から encoding/json/v2 へのスムーズな移行
sansantech
PRO
1
230
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.8k
大江戸Ruby会議でデータベース クライアントの話をするのは 間違っているだろうか
yahonda
1
110
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
5
320
慶應義塾大学 AI実践05 論文執筆の仕組み化
keio_smilab
PRO
7
3.8k
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
120
TSKaigi Sendai 2026 - tsgo時代のTypeScript Playgroundはどう動くか
teamlab
PRO
0
110
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
3.2k
現場を動かすAIエージェント#2_製造業現場でのAI活用から見た、ハマる罠と実践知
kintotechdev
2
210
DBTS2026 盛り上がってますか!?Databricksが実現するAI時代のデータ基盤
akuwano
1
200
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
350
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
140
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
380
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Designing Experiences People Love
moore
143
24k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
750
Optimising Largest Contentful Paint
csswizardry
37
4k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.7k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
570
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
560
Practical Orchestrator
shlominoach
192
12k
Transcript
PCとPicoRuby-ESP32間で シリアルファイル転送 @kishima
自己紹介 @kishima 組み込み系エンジニア マネージャ業 mruby好き 電子工作好き 最近はFamily mruby OSと いう趣味プロジェクトにご熱
心
ふつうのマイコンソフト開発 1. 実行したいアプリケーションをビルドする a. マイコンのOSも含めた一つのバイナリが生成される 2. ビルドした実行バイナリをシリアル通信やデバッガを使ってマイコンの FROM へ転送 a.
ファイルシステムがないので、マイコンの OSも含めてまるごと転送 3. マイコンをリセットして、アプリを起動 4. 動作確認 5. 1に戻る
PicoRubyのすごいところ FilesystemとMSC実装あり USBでつなぐと、USBスト レージとして見える Raspi Pico
ESP32版だとMSCできない USBストレージとして見せ ることができない ESP32 device
MSCが使えないなら CDCを使えばいいじゃない ESP32 device
独自のプロトコル 以下のポリシー • PCからのコマンドに対して、ESP32側が応答する • パケットは、CRC32でエラーチェック ◦ USBシリアル通信は簡単に化けるので必須 • パケット区切りはCOBSを使う
• 長いデータはチャンクで送る • チャンク単位で再送する(未実装) • ファイル操作系コマンドはJSONで表現
パケット形式 LENGTHはJSONかBinaryDataの長さを示しています では、パケットの全長はどうやって判定するのか?
COBS(Consistent Overhead Byte Stuffing) 0x00 を区切りバイトとして、扱えるようになる仕組み 0x00 が本文中に現れたら、その位置までのバイト長を OverheadByteとして挿入する 読み出すとき、0x00が来るまで読み続ければ良いので、実装が楽になる
オーバヘッドも少ない 0x00がロストしても、0x00を待ち続ければ復帰できる (パケット長を読んでから、 Bodyを読む形にした場合、パケット長が化けると大変) https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing
CMD
“PUT” command JSONの後に実際のバイナリデータが続く offで、チャンクが書き込まれるべきファイル位置を指定 0バイトデータ送信で、チャンク終わりを表現
“LS” command: Response
実際にデモ
ファイル転送(ローカルの test.rbを転送)
結果
制約 USBシリアル通信を占有するので、PC側のターミナルとのシリアル通信と競合する 片方しか使えないので、モードを切り替える仕組みが必要 たとえば・・・ 起動時に所定のボタンが押されていればファイル転送モードに入る
今後の課題 デスクトップのファイルエクスプローラーからも見えるようにしたい FUSEを使えばいけそう Filesystem on Userspace https://ja.wikipedia.org/wiki/Filesystem_in_Userspace