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
Porting PicoRuby to Another Microcontroller: ESP32
Search
Y_uuu
April 18, 2025
Technology
3
170
Porting PicoRuby to Another Microcontroller: ESP32
RubyKaigi 2025 Day.3
https://rubykaigi.org/2025/presentations/Y_uuu.html#day3
Y_uuu
April 18, 2025
Tweet
Share
More Decks by Y_uuu
See All by Y_uuu
RubyKaigi 2025でプロポーザルが初めて採択されるまでにやったこと
yuuu
1
380
地方企業の強みを活かす!AWSを活用したIoTシステムの開発事例とその裏側
yuuu
0
73
あの重機は今どこにある?- 重機管理IoTプロダクトのバックエンドをAWSで構築した話 -
yuuu
0
820
mruby-esp32におけるペリフェラルAPIの実装検討
yuuu
1
690
育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り -
yuuu
4
4.6k
committee-railsとOpenAPI Generatorでスキーマ駆動なAPI開発をする
yuuu
0
860
mrubyでマイコンの世界に足を踏み入れる
yuuu
2
1.9k
mruby on IoT devices.
yuuu
4
2.4k
SORACOM ArcでオフィスのIoT化を進行中です⭐
yuuu
1
1.1k
Other Decks in Technology
See All in Technology
AI Agentを「期待通り」に動かすために:設計アプローチの模索と現在地
kworkdev
PRO
2
390
Lightdashの利活用状況 ー導入から2年経った現在地_20250409
hirokiigeta
2
270
CBになったのでEKSのこともっと知ってもらいたい!
daitak
1
160
プロダクト開発におけるAI時代の開発生産性
shnjtk
2
210
いつも初心者向けの記事に助けられているので得意分野では初心者向けの記事を書きます
toru_kubota
2
270
AI AgentOps LT大会(2025/04/16) Algomatic伊藤発表資料
kosukeito
0
130
Startups On Rails 2025 @ Tropical on Rails
irinanazarova
0
250
はてなの開発20年史と DevOpsの歩み / DevOpsDays Tokyo 2025 Keynote
daiksy
6
1.4k
クォータ監視、AWS Organizations環境でも楽勝です✌️
iwamot
PRO
1
240
はじめてのSDET / My first challenge as a SDET
bun913
1
210
ソフトウェア開発現代史: "LeanとDevOpsの科学"の「科学」とは何か? - DORA Report 10年の変遷を追って - #DevOpsDaysTokyo
takabow
0
200
フロントエンドも盛り上げたい!フロントエンドCBとAmplifyの軌跡
mkdev10
2
250
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.7k
Navigating Team Friction
lara
184
15k
Typedesign – Prime Four
hannesfritz
41
2.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
GitHub's CSS Performance
jonrohan
1030
460k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
660
Building Flexible Design Systems
yeseniaperezcruz
329
38k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
"QSJM 3VCZ,BJHJ :VIFJ0LB[BLJ !:@VVV Porting PicoRuby to Another Microcontroller: ESP32
self.inspect w :VIFJ0LB[BLJ w !:@VVV 9 !ZVVVOFU #MVF4LZ w
!ZVVV (JU)VC w *P5$MPVE&OHJOFFSBU'VTJD$P -UE w .FOUFSBU'KPSE#PPU$BNQ 2
PicoRuby 3
PicoRuby w 5IFTNBMMFTU3VCZJNQMFNFOUBUJPOEFTJHOFEUPSVOPO NJDSPDPOUSPMMFST w &OBCMFTSVOOJOH3VCZPONJDSPDPOUSPMMFSCPBSETTVDIBTUIF 3BTQCFSSZ1J1JDP 4
Raspberry Pi Pico w "NJDSPDPOUSPMMFSCPBSE EFWFMPQFECZUIF3BTQCFSSZ 1J'PVOEBUJPO w $BOCFQSPHSBNNFEVTJOH 1ZUIPO
.JDSP1ZUIPO BOE$ $ 5
R2P2 (Ruby Rapid Portable Platform) w "TIFMMTZTUFNXJUI1JDP3VCZFNCFEEFEUIBUSVOTPO NJDSPDPOUSPMMFST w 8PSLTPOUIF3BTQCFSSZ1J1JDP
6
Question: Do we need a Raspberry Pi Pico to try
PicoRuby? 7
Question: Do we need a Raspberry Pi Pico to try
PicoRuby? w /PUOFDFTTBSJMZ 8
PicoRuby is portable w *UJTCVJMUUPTVQQPSUPQFSBUJPOPOEJ ff FSFOUNJDSPDPOUSPMMFST w 'JMFTBOEEJSFDUPSJFTBSFFYQMJDJUMZTFQBSBUFEUPIBOEMF NJDSPDPOUSPMMFSTQFDJ
fi DEJ ff FSFODFT w &BTZQPSUJOHBMMPXTUIFFYJTUJOHFDPTZTUFNUPCFMFWFSBHFEBDSPTT EJ ff FSFOUNJDSPDPOUSPMMFST 9
Porting PicoRuby is still a work in progress w 5IFSFBSFOPUNBOZ
NJDSPDPOUSPMMFSTUIBUDBO FBTJMZSVO1JDP3VCZ w 5IFDSFBUPSPG1JDP3VCZJT BMTPFBHFSUPTFFNPSFQPSUT 10 IUUQTQJDPSVCZHJUIVCJPDPOUSJCVUJPOIUNM
Porting PicoRuby is still a work in progress w 5IFSFBSFOPUNBOZ
NJDSPDPOUSPMMFSTUIBUDBO FBTJMZSVO1JDP3VCZ w 5IFDSFBUPSPG1JDP3VCZJT BMTPFBHFSUPTFFNPSFQPSUT 11 1PSUJOH "TPG 1JDP3VCZTVQQPSUTPOMZUIF31 3BTQCFSSZ1J1JDP *U XPVMECFBTJHOJ fi DBOUVOEFSUBLJOHUPQPSUJUUPPUIFS.$6TMJLFUIF O3' 45. BOE&41*GZPVBSFJOUFSFTUFEJODPOUSJCVUJOHUPB QPSUJOH QMFBTFWJTJUUIFSFQPTJUPSZ IUUQTQJDPSVCZHJUIVCJPDPOUSJCVUJPOIUNM
ESP32 12
ESP32 w "MPXDPTU MPXQPXFS NJDSPDPOUSPMMFSNPEVMF EFWFMPQFECZ&TQSFTTJG 4ZTUFNT w 8JEFMZVTFEJOWBSJPVT EFWJDFT
JODMVEJOH.4UBDL w 4VQQPSUTXJSFMFTT DPNNVOJDBUJPOTVDIBT8J'J BOE#MVFUPPUI 13
My device1: M5Stamp C3 Mate w &RVJQQFEXJUI&41$ POFPGUIF&41TFSJFT NJDSPDPOUSPMMFSNPEVMFT
w #BTFEPO3*4$7 BSDIJUFDUVSF w &YUSFNFMZTNBMMBOE B ff PSEBCMF 14
My device2: ESP32-DevKitC w &41EFWFMPQNFOUCPBSE EFWFMPQFEBOENBSLFUFECZ &TQSFTTJG4ZTUFNT w #BTFEPO9UFOTB BSDIJUFDUVSF
15
Let's start porting!
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 17
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 18 /FYU6Q
Introduction to Compilation, Linking, and Archiving 19
Introduction to Compilation, Linking, and Archiving 20 $PNQJMF
Introduction to Compilation, Linking, and Archiving 21 -JOL
Introduction to Compilation, Linking, and Archiving 22 "SDIJWF
Introduction to Cross-Compilation 23 'PSY 'PSY 'PSY 'PSY 'PSY 'PSY
Introduction to Cross-Compilation 24 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7
File Structure of PicoRuby/R2P2 25
File Structure of PicoRuby/R2P2 26
File Structure of PicoRuby/R2P2 27
File Structure of PicoRuby/R2P2 28
File Structure of PicoRuby/R2P2 29
File Structure of PicoRuby/R2P2 30
File Structure of PicoRuby/R2P2 31 -FU`TDSFBUFUIJT fi MF
ESP-IDF w &41*%'JTBEFWFMPQNFOU GSBNFXPSLGPS&41 QVCMJTIFECZ&TQSFTTJG 4ZTUFNT w #ZGPMMPXJOHUIFP ff
i DJBM EPDVNFOUBUJPOGPSTFUVQ ZPV DBOVTFDPNQJMFST MJOLFST BOEBSDIJWFSTGPSCPUI3*4$ 7BOE9UFOTB 32 IUUQTEPDTFTQSFTTJGDPNQSPKFDUTFTQJEGFOW FTQHFUTUBSUFEMJOVYNBDPTTFUVQIUNM
Writing build_config w 5IFCVJME@DPO fi HEJSFDUPSZJO 1JDP3VCZDPOUBJOT fi MFTGPS CVJMEJOHPOWBSJPVT
NJDSPDPOUSPMMFSTBOE FOWJSPONFOUT w 5IFTF fi MFTBSFBMTPXSJUUFOJO 3VCZ 33 TLJQQFEʜ
Writing build_config 34 .3VCZ$SPTT#VJMEOFX FTQ EPcDPOGc DPOGUPPMDIBJO HDD DPOGDDDPNNBOEYUFOTBFTQFMGHDD
DPOGMJOLFSDPNNBOEYUFOTBFTQFMGME DPOGBSDIJWFSDPNNBOEYUFOTBFTQFMGBS DPOGDDIPTU@DPNNBOEHDD DPOGQJDPSVCZ BMMPD@MJCDGBMTF FOE QJDPSVCZCVJME@DPO fi HYUFOTBFTQSC 4FUUJOH6Q$PNQJMFS -JOLFS BOE "SDIJWFS$PNNBOETGPS9UFOTB "EE$POTUBOUTBOE0UIFS0QUJPOT BT/FFEFE
Writing build_config 35 .3VCZ$SPTT#VJMEOFX FTQ EPcDPOGc DPOGUPPMDIBJO HDD DPOGDDDPNNBOESJTDWFTQFMGHDD
DPOGMJOLFSDPNNBOESJTDWFTQFMGME DPOGBSDIJWFSDPNNBOESJTDWFTQFMGBS DPOGDDIPTU@DPNNBOEHDD DPOGQJDPSVCZ BMMPD@MJCDGBMTF FOE QJDPSVCZCVJME@DPO fi HSJTDWFTQSC
rake w 4QFDJGZUIFCVJME@DPO fi HOBNFVTJOHUIF.36#:@$0/'*( FOWJSPONFOUWBSJBCMF w #VJMEVTJOHUIFSBLFDPNNBOE 36 GPS9UFOTB
.36#:@$0/'*(YUFOTBFTQSBLF GPS3*4$7 .36#:@$0/'*(SJTDWFTQSBLF
rake w 8FDBOTFFUIBUMJCNSVCZBIBTCFFOHFOFSBUFE 37 MTCVJMEFTQMJC MJCNSVCZBMJCNSVCZ@DPSFB
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 38 +VTU5BMLFE
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 39 /FYU6Q
File Structure of PicoRuby/R2P2 40 $SFBUFE
File Structure of PicoRuby/R2P2 41 "OEDSFBUFUIJT fi MF -FU`TDSFBUFUIJTQSPKFDU
Creating an ESP-IDF Project w 'PMMPXTUIFTBNFQSPDFEVSF BTEFWFMPQJOHXJUI$ w *OBNFEUIJTQSPKFDU31 &41
42 IUUQTEPDTFTQSFTTJGDPNQSPKFDUTFTQJEGFOWFTQ HFUTUBSUFEMJOVYNBDPTTFUVQIUNMTUBSUBQSPKFDU
Writing main.c 43 JODMVEFNSCNBJO@UBTLD ʜ 5IJTGVODUJPOJTUIFFOUSZQPJOU WPJEBQQ@NBJO WPJE \
NSCD@JOJU IFBQ@QPPM )&"1@4*;& NSCD@UDC NBJO@UDCNSCD@DSFBUF@UBTL NBJO@UBTL NSCD@TFU@UBTL@OBNF NBJO@UDC NBJO@UBTL NSCD@SVO ^ 31&41NBJONBJOD *OJUJBMJ[BUJPO 1BTTJOHUIF)FBQ .FNPSZ"SFB 3VOUIF7. $SFBUFBOFYFDVUJPODPOUFYU DBMMFEBUBTL
Writing main.c 44 JODMVEFNSCNBJO@UBTLD ʜ 5IJTGVODUJPOJTUIFFOUSZQPJOU WPJEBQQ@NBJO WPJE \
NSCD@JOJU IFBQ@QPPM )&"1@4*;& NSCD@UDC NBJO@UDCNSCD@DSFBUF@UBTL NBJO@UBTL NSCD@TFU@UBTL@OBNF NBJO@UDC NBJO@UBTL NSCD@SVO ^ 31&41NBJONBJOD 8IBUEPUIFTFDPEFTEP
Binary for the PicoRuby VM 45 QVUT)FMMPXPSME NSCMJCNBJO@UBTLSC JODMVEFTUEJOUI JGEFG@@DQMVTQMVT
FYUFSO FOEJG DPOTUVJOU@UNBJO@UBTL<>\ Y Y Y Y Y Y Y Y Y Y Y YE Y Y YE YC ʜ ^ NSCNBJO@UBTLD QJDPSCD#NBJO@UBTLPNSCNBJO@UBTLDMJCNBJO@UBTLSC *OQVU 0VUQVU
Writing CMakeLists.txt 46 TFU 1*$036#:@%*3\$0.10/&/5@%*3^QJDPSVCZ TFU -*#.36#:@'*-&\1*$036#:@%*3^CVJMEFTQMJCMJCNSVCZB BEE@QSFCVJMU@MJCSBSZ
MJCNSVCZ\-*#.36#:@'*-&^3&26*3&4\$0.10/&/5@/".&^ UBSHFU@MJOL@MJCSBSJFT \$0.10/&/5@-*#^13*7"5&MJCNSVCZ UBSHFU@JODMVEF@EJSFDUPSJFT \$0.10/&/5@-*#^ 13*7"5& \$0.10/&/5@%*3^QJDPSVCZCVJMESFQPTFTQNSVCZDPNQJMFSJODMVEF \$0.10/&/5@%*3^QJDPSVCZCVJMESFQPTFTQNSVCZDPNQJMFSMJCQSJTNJODMVEF \$0.10/&/5@%*3^QJDPSVCZCVJMEFTQNSCHFNT 31&41DPNQPOFOUTQJDPSVCZFTQ$.BLF-JTUTUYU 3FGFSFODJOHMJCNSVCZB "EEMJCSBSJFTUPMJOL
Build with idf.py 47 JEGQZCVJME 1SPKFDUCVJMEDPNQMFUF5P fl BTI SVO JEGQZ
fl BTI PS JEGQZQ1035 fl BTI PS QZUIPONFTQUPPMDIJQFTQCCFGPSFEFGBVMU@SFTFUBGUFSIBSE@SFTFUXSJUF@ fl BTI fl BTI@NPEFEJP fl BTI@TJ[F.# fl BTI@GSFRNYCVJMECPPUMPBEFSCPPUMPBEFSCJOYCVJMEQBSUJUJPO@UBCMFQBSUJUJPO UBCMFCJOYCVJME31&41CJOYCVJMETUPSBHFCJO PSGSPNUIF6TFSTZVIFJHIRHJUIVCDPNQJDPSVCZ31&41CVJMEEJSFDUPSZ QZUIPONFTQUPPMDIJQFTQCCFGPSFEFGBVMU@SFTFUBGUFSIBSE@SFTFUXSJUF@ fl BTI! fl BTI@BSHT $PNQMFUF
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 48 +VTU5BMLFE
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 49 /FYU6Q
w 5SBDFUIF1JDP3VCZTPVSDFDPEFTUBSUJOHGSPNUIFQVUTNFUIPE BWBJMBCMFJO3VCZ w &WFOUVBMMZ JUMFBETUPUIFQJDPSVCZNBDIJOFNSCHFN 50 Exploring the Call
Tree
w 5SBDFUIF1JDP3VCZTPVSDFDPEFTUBSUJOHGSPNUIFQVUTNFUIPE BWBJMBCMFJO3VCZ w &WFOUVBMMZ JUMFBETUPUIFQJDPSVCZNBDIJOFNSCHFN 51 Exploring the Call
Tree
Modifying build_config w *O1JDP3VCZ NSCHFNTBSF BEEFEUISPVHICVJME@DPO fi H w "EEQJDPSVCZNBDIJOF
52 .3VCZ$SPTT#VJMEOFX FTQ EPcDPOGc DPOGHFNDPSFlQJDPSVCZNBDIJOF DPOGQJDPSVCZ BMMPD@MJCDGBMTF FOE QJDPSVCZCVJME@DPO fi HYUFOTBFTQSC BOESJTDWFTQSC
File Structure of PicoRuby/R2P2 53
File Structure of PicoRuby/R2P2 54
File Structure of PicoRuby/R2P2 55
File Structure of PicoRuby/R2P2 56 'PS3BTQCFSSZ1J1JDP
File Structure of PicoRuby/R2P2 57 'PS3BTQCFSSZ1J1JDP
File Structure of PicoRuby/R2P2 58 4IPVMEDSFBUFUIJT fi MFBOE TXJUDIUIFDPNQJMFUBSHFU 'PS&41
Example implementation of hal_write in machine.c 59 JOU IBM@XSJUF JOUGE
DPOTUWPJE CVG JOUOCZUFT \ UVE@DED@XSJUF CVG OCZUFT JOUMFOUVE@DED@XSJUF@ fl VTI SFUVSOMFO ^ QJDPSVCZNBDIJOFQPSUTSQNBDIJOFD JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ TIPVMEXSJUFDPEFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD w 5BLFTUIFGPMMPXJOHBSHVNFOUT w 0VUQVU fi MFEFTDSJQUPS w 0VUQVUEBUB w /VNCFSPGCZUFTUPXSJUF w .VTUSFUVSOUIFOVNCFSPG CZUFTXSJUUFO w )PXTIPVMEJUCFJNQMFNFOUFE
Example implementation of hal_write in machine.c 60 JOU IBM@XSJUF JOUGE
DPOTUWPJE CVG JOUOCZUFT \ UVE@DED@XSJUF CVG OCZUFT JOUMFOUVE@DED@XSJUF@ fl VTI SFUVSOMFO ^ QJDPSVCZNBDIJOFQPSUTSQNBDIJOFD JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ TIPVMEXSJUFDPEFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD w UVE@DED@XSJUF JTBGVODUJPO QSPWJEFECZ5JOZ64# w *UJTOPUJODMVEFEJO&41*%' CZEFGBVMU w *O&41*%' TUEJPIDBOCF VTFE BOETUBOEBSEPVUQVUJT EJSFDUFEUPTFSJBM DPNNVOJDBUJPO
JODMVEFTUEJPI JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ GPS
JOUJJOCZUFTJ \ QVUDIBS DIBS CVG <J> ^ ffl VTI TUEPVU SFUVSOOCZUFT ^ Example implementation of hal_write in machine.c 61 QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD w 6MUJNBUFMZ JUXBT JNQMFNFOUFEBTTIPXOJOUIF DPEFPOUIFSJHIU w )PXFWFS *FODPVOUFSFE TFWFSBMGBJMVSFTBMPOHUIF XBZ w *XJMMFYQMBJOUIFNMBUFS
w 3FXSJUFPUIFSGVODUJPOTVTJOH UIFTBNFBQQSPBDIBTCFGPSF w .PTUPG1JDP3VCZ`TQPSUJOH XPSLDPOTJTUTPGUIJTQSPDFTT w 0ODFNBDIJOFDJTDPNQMFUF TUBOEBSEJOQVUBOEPVUQVU
XJMMCFBWBJMBCMF 62 Porting other functions TUS D QSJOU1MFBTFFOUFSTPNFUFYUaO XIJMFDaO TUS D*0HFUDI QSJOUD FOE QVUTTUS NSCMJCNBJO@UBTLSC 1MFBTFFOUFSTPNFUFYU )FMMP 3VCZ,BJHJ )FMMP 3VCZ,BJHJ
Steps for Porting #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 63 +VTU5BMLFE
Steps for Porting #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 64 /FYU6Q
w &OBCMFUIFFDIPDPNNBOEJOUIFTIFMM w "EENSCHFNTPUIFSUIBOQJDPSVCZNBDIJOF 65 My Goal for This Task
Writing main_task.rb w 1SFQBSJOHB3VCZQSPHSBNUP MBVODIUIFTIFMM w &YUSBDUPOMZUIFOFDFTTBSZ DPEFGSPNUIF31QSPHSBN 66 SFRVJSFTIFMM
SFRVJSFbNBDIJOF 45%*/*0 45%065*0 CFHJO 45%*/FDIPGBMTF TIFMM4IFMMOFX DMFBOUSVF QVUT4UBSUJOHTIFMMaOaO TIFMMTIPX@MPHP TIFMMTUBSU SFTDVFF QVUT/PUBWBJMBCMF QVUT\FNFTTBHF^ \FDMBTT^ FOE NSCMJCNBJO@UBTLSC
w NSCHFNTOFFEFEUPFYFDVUFUIFFDIPDPNNBOEJOUIFTIFMM 67 Listing required mrbgems QJDPSVCZTIFMM QJDPSVCZFEJUPS QJDPSVCZTBOECPY QJDPSVCZFOW
QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU QJDPSVCZWGT QJDPSVCZNFUBQSPH QJDPSVCZUJNFDMBTT QJDPSVCZNBDIJOF
w 4PNFNSCHFNTDPOUBJOPOMZ3VCZ fi MFT OPQPSUJOHOFFEFE 68 Listing required mrbgems ✅QJDPSVCZTIFMM
✅QJDPSVCZFEJUPS QJDPSVCZTBOECPY QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT QJDPSVCZNFUBQSPH QJDPSVCZUJNFDMBTT QJDPSVCZNBDIJOF
w 4PNFNSCHFNTEPOPUIBWFBQPSUEJSFDUPSZ OPQPSUJOHOFFEFE 69 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY
QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT QJDPSVCZNBDIJOF
w *IBWFBMSFBEZDPNQMFUFEQPSUJOHQJDPSVCZNBDIJOF w 70 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY
QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT ✅QJDPSVCZNBDIJOF
w 5IFSFGPSF NSCHFNTTUJMMOFFEUPCFQPSUFE 71 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY
QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT ✅QJDPSVCZNBDIJOF
picoruby-env and picoruby-io-console w 5IFTFNSCHFNTSBOPO&41XJUIPVUNPEJ fi DBUJPO VTJOHUIF FYJTUJOH31DPEF w
5IFSFGPSF UIF fi MFTXFSFSFVTFE 72 $PQZEJSFDUPSJFTBOE fi MFT
picoruby-filesystem-fat w -JLFQJDPSVCZNBDIJOF JUXPVMEOPSNBMMZSFRVJSFQPSUJOH w )PXFWFS GPSSVOOJOHUIFFDIPDPNNBOE UIFDPEFJTOPU OFDFTTBSZ 73
picoruby-filesystem-fat w .JTTJOHGVODUJPOTDBVTF MJOLFSFSSPST w 5PQSFWFOUUIJT EF fi OFFNQUZ GVODUJPOTPOMZGPSUIPTF
SFGFSFODFECZPUIFSDPEF 74 JODMVEFMJC ff CTPVSDF ff I 50%0*NQMFNFOUUIJTGVODUJPOMPHJD WPJE '*-&@QIZTJDBM@BEESFTT '*- GQ VJOU@U BEES \ ^ 50%0*NQMFNFOUUIJTGVODUJPOMPHJD JOU '*-&@TFDUPS@TJ[F WPJE \ SFUVSO ^ QJDPSVCZ fi MFTZTUFNGBUQPSUTFTQ fl BTI@EJTLD
w "MMNSCHFNTBSFSFBEZ👍 75 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY ✅QJDPSVCZFOW
✅QJDPSVCZJPDPOTPMF ✅QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT ✅QJDPSVCZNBDIJOF
Steps for Porting #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 76 +VTU5BMLFE
Steps for Porting → Completed 🎉 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT
*NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU 1PSUBEEJUJPOBMNSCHFNT 77
Did Porting Seem Easy? w :FT JUTTJNQMFJGZPVLOPXUIFDPSSFDUTUFQT w "TMPOHBTOPUIJOHHPFTXSPOH😏 78
Troubleshooting collection
case1: Watchdog Timer Error w 5IFGPMMPXJOHFSSPSPDDVSSFEPOUIFEFWJDF 80 & UBTL@XEU5BTLXBUDIEPHHPUUSJHHFSFE5IFGPMMPXJOHUBTLTVTFSTEJEOPUSFTFUUIFXBUDIEPHJOUJNF
& UBTL@XEU*%-& $16 & UBTL@XEU5BTLTDVSSFOUMZSVOOJOH & UBTL@XEU$16NBJO & UBTL@XEU$16*%-& & UBTL@XEU1SJOU$16 DVSSFOUDPSF CBDLUSBDF
case1: Watchdog Timer Error w "UJNFSVTFEUPEFUFDUJGBQSPHSBNIBTDSBTIFEPSGSP[FO w "GFBUVSFQSPWJEFECZ'SFF3504 UIFSFBMUJNF04SVOOJOHPO &41
81
case1: Watchdog Timer Error w 8IZ8BTUIF8BUDIEPH5JNFS5SJHHFSFE w 1JDP3VCZIBTJUTPXONFDIBOJTNGPSDPOUFYUTXJUDIJOHXJUIJO UIF7.
5$# w 5IJTBMMPXTDPOUFYUTXJUDIJOHSFHBSEMFTTPGUIF04UZQFPS XIFUIFSBO04JTQSFTFOUPOUIFNJDSPDPOUSPMMFS 82
case1: Watchdog Timer Error w 6OMFTTUIF3VCZQSPHSBNFYQMJDJUMZJODMVEFTTMFFQ UIF$16 SFNBJOTDPOUJOVPVTMZBDUJWF w "TBSFTVMU
'SFF3504JOUFSQSFUTUIJTBTBSVOBXBZQSPHSBNTJODF UIF$16JTOPUJEMJOH 83
case1: Watchdog Timer Error w %FDJEFEUPEJTBCMFUIF 8BUDIEPH5JNFSBTB DPVOUFSNFBTVSF w $POUFYUTXJUDIJOHJT
IBOEMFECZ5$# w 5IFPSJHJOBM31QSPKFDUIBT BEPQUFEUIFTBNFBQQSPBDI 84 JODMVEFNSCNBJO@UBTLD WPJEQJDPSVCZ@FTQ WPJE \ %JTBCMF58%5 FTQ@UBTL@XEU@EFJOJU NSCD@JOJU IFBQ@QPPM )&"1@4*;& ^ 31&41NBJONBJOD TIPVMEDBMMJU
case 2: “require” Doesn't Work w 8IFOFYFDVUJOHlSFRVJSFzJOB3VCZQSPHSBN UIFGPMMPXJOHFSSPS PDDVST 85
&YDFQUJPO WN@JE VOEF fi OFEMPDBMWBSJBCMFPSNFUIPESFRVJSFGPS0CKFDU /P.FUIPE&SSPS
case 2: “require” Doesn't Work w QJDPSVCZTIFMMBOEQJDPSVCZ SFRVJSFHFOFSBUF$TPVSDF DPEFEVSJOHUIFCVJME QSPDFTT
w 5IFJOJUJBMJ[BUJPOGVODUJPOT EF fi OFEJOUIFTFTPVSDF fi MFT NVTUCFDBMMFEGSPNUIFNBJO GVODUJPO 86 TUBUJDQJDPHFNTQSFCVJMU@HFNT<>\ \NBDIJOF NBDIJOF NSCD@NBDIJOF@JOJU GBMTF^ \FOW FOW NSCD@FOW@JOJU GBMTF^ \/6-- /6-- /6-- USVF^ TFOUJOFM ^ WPJE QJDPSVCZ@JOJU@SFRVJSF NSCD@WN WN \ ^ QJDPSVCZCVJMEFTQNSCHFNTQJDPHFN@JOJUD
case 2: “require” Doesn't Work w QJDPSVCZTIFMMBOEQJDPSVCZ SFRVJSFHFOFSBUF$TPVSDF DPEFEVSJOHUIFCVJME QSPDFTT
w 5IFJOJUJBMJ[BUJPOGVODUJPOT EF fi OFEJOUIFTFTPVSDF fi MFT NVTUCFDBMMFEGSPNUIFNBJO GVODUJPO 87 JODMVEFNSCNBJO@UBTLD WPJEBQQ@NBJO WPJE \ EJTBCMF8%5 FTQ@UBTL@XEU@EFJOJU NSCD@JOJU IFBQ@QPPM )&"1@4*;& QJDPSVCZ@JOJU@SFRVJSF WN QJDPSVCZ@JOJU@FYFDVUBCMFT WN NSCD@SVO ^ 31&41NBJONBJOD 4IPVMEDBMMJU
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 88 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 89 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE 0,
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 90 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE /(
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 91 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE
case 3: Stack overflow w 'SFF3504TUBSUTUIF BQQ@NBJOUBTLBUCPPU BOE 1JDP3VCZ7.SVOTXJUIJOUIJT UBTL
w #ZEFGBVMU UIFBQQ@NBJOUBTL IBTBTUBDLTJ[FPG CZUFTBMMPDBUFE 92
case 3: Stack overflow w 'VODUJPODBMMTBOEMPDBM BVUPNBUJD WBSJBCMFT DPOTVNFTUBDLNFNPSZ w
*GVTBHFFYDFFET CZUFT BTUBDLPWFS fl PXPDDVST 93
case 3: Stack overflow w *O&41*%' UIFTUBDLTJ[FPG UIFBQQ@NBJOUBTLDBOCF NPEJ fi
FEWJBDPO fi HVSBUJPO w "EEUIFGPMMPXJOHFOUSZUP TELDPO fi HEFGBVMUTUPDIBOHF UIFTUBDLTJ[F 94 $0/'*(@&41@."*/@5"4,@45"$,@4*;& 31&41TELDPO fi HEFGBVMUT
case 4: CSI Command Not Working w 31DIFDLTUIFUFSNJOBM FNVMBUPSTUBUFBUTUBSUVQ w
4QFDJ fi DBMMZ JUVTFT$4* $POUSPM4FRVFODF *OUSPEVDFS %43 %FWJDF 4UBUVT3FQPSU GPSUIJT QVSQPTF 95 DMBTT*0 EFGTFMGXBJU@UFSNJOBM UJNFPVU SFT 45%*/SFBE@OPOCMPDL 45%065QSJOUaF<O$4*%43 UJNFPVU UP@JUJNFTEPcJc SFT45%*/SFBE@OPOCMPDL UP@T CSFBLJJGSFTMFOHUI TMFFQ@NT FOE &/7<5&3.>SFTTUBSU@XJUI aF<O BOTJ EVNC FOE QJDPSVCZJPDPOTPMFNSCMJCJPDPOTPMFSC
case 4: CSI Command Not Working w 31DIFDLTUIFUFSNJOBM FNVMBUPSTUBUFBUTUBSUVQ w
4QFDJ fi DBMMZ JUVTFT$4* $POUSPM4FRVFODF *OUSPEVDFS %43 %FWJDF 4UBUVT3FQPSU GPSUIJT QVSQPTF 96 DMBTT*0 EFGTFMGXBJU@UFSNJOBM UJNFPVU SFT 45%*/SFBE@OPOCMPDL 45%065QSJOUaF<O$4*%43 UJNFPVU UP@JUJNFTEPcJc SFT45%*/SFBE@OPOCMPDL UP@T CSFBLJJGSFTMFOHUI TMFFQ@NT FOE &/7<5&3.>SFTTUBSU@XJUI aF<O BOTJ EVNC FOE QJDPSVCZJPDPOTPMFNSCMJCJPDPOTPMFSC
case 4: CSI Command Not Working w *GUIFUFSNJOBMFNVMBUPSJT SFBEZ JUTIPVMESFDFJWF
aF<OGSPNTUBOEBSEJOQVU w )PXFWFS BOJTTVFPDDVSSFE XIFSFUIJTJOQVUXBTOPU CFJOHSFBEQSPQFSMZ 97 DMBTT*0 EFGTFMGXBJU@UFSNJOBM UJNFPVU SFT 45%*/SFBE@OPOCMPDL 45%065QSJOUaF<O$4*%43 UJNFPVU UP@JUJNFTEPcJc SFT45%*/SFBE@OPOCMPDL UP@T CSFBLJJGSFTMFOHUI TMFFQ@NT FOE &/7<5&3.>SFTTUBSU@XJUI aF<O BOTJ EVNC FOE QJDPSVCZJPDPOTPMFNSCMJCJPDPOTPMFSC
case 4: CSI Command Not Working w *G$4*%43GBJMT UIFGBNJMJBS 1JDP3VCZMPHPEPFTOU
BQQFBS w 5IJTJTBTFSJPVTJTTVF😱 98
case 4: CSI Command Not Working w 5IFDBVTFXBTUIFJOJUJBMMZ QPSUFEQJDPSVCZNBDIJOF w
"U fi STU *IBEJNQMFNFOUFEJU MJLFUIJT 99 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ SFUVSOQSJOUG CVG ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD
case 4: CSI Command Not Working w $BOZPVTQPUUIFEJ ff FSFODF
100 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ SFUVSOQSJOUG CVG ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ GPS JOUJJOCZUFTJ \ QVUDIBS DIBS CVG <J> ^ ffl VTI TUEPVU SFUVSOOCZUFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD #FGPSF "GUFS
case 4: CSI Command Not Working w 5IFDPEFCFGPSFUIF fi YIBE
UXPJTTVFT *UJHOPSFEOCZUFT UIF OVNCFSPGCZUFTUPXSJUF *UEJEOPUDBMM ffl VTI TP UIF$4*DPNNBOENJHIU SFNBJOCV ff FSFEBOEOPU TFOUJNNFEJBUFMZ 101 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ SFUVSOQSJOUG CVG ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD
case 4: CSI Command Not Working w "GUFS fi YJOHQJDPSVCZNBDIJOF
UIF$4*DPNNBOETUBSUFEXPSLJOH QSPQFSMZ 102 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ GPS JOUJJOCZUFTJ \ QVUDIBS DIBS CVG <J> ^ ffl VTI TUEPVU SFUVSOOCZUFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD
Demo
104
Demo explanation 105
Demo explanation 106 $PNNVOJDBUJOH XJUIUIF.BUSJY -&%WJB41* QJDPSVCZTQJ
Demo explanation 107 3FBEJOHUIF9 BYJTUJMUGSPNUIF +PZTUJDLVTJOH "%$ QJDPSVCZBED
Demo explanation 108 (FOFSBUJOHTPVOE CZPVUQVUUJOH XBWFGPSNTWJB 18.UPUIFQJF[P FMFNFOU QJDPSVCZQXN
Conclusion
Summary w 5IJTTFTTJPODPWFSFEQPSUJOH1JDP3VCZUP&41 w 5IFQSPDFTTBQQMJFTUPPUIFSNJDSPDPOUSPMMFSTUPP w 1PSUJOHUP45.BOEO3'JTDPOTJEFSFE w "HSFBUDIBODFUPDPOUSJCVUF🚀 110
Summary w 0GDPVSTF UIFSFBSFTUJMMNBOZXBZTUPDPOUSJCVUFUP&41 w *GZPVSFJOUFSFTUFE MFUTUBML w *CSPVHIUTPNFEFWJDFTUPTIBSF 111
Summary w 1MFBTFWJTJUUIFGPMMPXJOHSFQPTJUPSZ w IUUQTHJUIVCDPNQJDPSVCZ31&41 w IUUQTHJUIVCDPNQJDPSVCZQJDPSVCZ 112
end Thank you for coming!