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
PCとPicoRuby-ESP32間でシリアルファイル転送
Search
Katsuhiko Kageyama
December 04, 2025
Technology
1
37
PCとPicoRuby-ESP32間でシリアルファイル転送
Katsuhiko Kageyama
December 04, 2025
Tweet
Share
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
370
Rubyでmicro-ROS!
kishima
0
98
mruby(PicoRuby)で ファミコン音楽を奏でる2
kishima
1
130
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
680
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
310
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
920
わたしのRubyKaigi Effect
kishima
2
200
思い出の技術書 F-BASICの世界
kishima
0
36
リハビリmruby
kishima
1
300
Other Decks in Technology
See All in Technology
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
260
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
250
生成AIと余白 〜開発スピードが向上した今、何に向き合う?〜
kakehashi
PRO
1
240
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
270
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
3
310
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
440
なぜ令和の今ゲームボーイを触るのか
kimkim0106
0
110
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
320
意外と知ってそうでしらない、Reserved Instances の世界
mappie_kochi
0
110
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
640
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
1k
OpenShiftでllm-dを動かそう!
jpishikawa
0
210
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Prompt Engineering for Job Search
mfonobong
0
170
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Building the Perfect Custom Keyboard
takai
2
690
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
200
The Spectacular Lies of Maps
axbom
PRO
1
540
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
Site-Speed That Sticks
csswizardry
13
1.1k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
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