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
4
530
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
420
地方企業の強みを活かす!AWSを活用したIoTシステムの開発事例とその裏側
yuuu
0
78
あの重機は今どこにある?- 重機管理IoTプロダクトのバックエンドをAWSで構築した話 -
yuuu
0
840
mruby-esp32におけるペリフェラルAPIの実装検討
yuuu
1
700
育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り -
yuuu
4
4.6k
committee-railsとOpenAPI Generatorでスキーマ駆動なAPI開発をする
yuuu
0
880
mrubyでマイコンの世界に足を踏み入れる
yuuu
2
1.9k
mruby on IoT devices.
yuuu
4
2.5k
SORACOM ArcでオフィスのIoT化を進行中です⭐
yuuu
1
1.1k
Other Decks in Technology
See All in Technology
Perl歴約10年のエンジニアがフルスタックTypeScriptに出会ってみた
papix
1
250
10分で学ぶ、RAGの仕組みと実践
supermarimobros
0
590
企業が押さえるべきMCPの未来
takaakikakei
0
250
クラウドネイティブ環境の脅威モデリング
kyohmizu
1
200
Как мы автоматизировали интеграционное тестирование с Gonkey и не пожалели. Паша Егорычев, Кирилл Поляков
lamodatech
0
1.5k
白金鉱業Meetup_Vol.18_生成AIはデータサイエンティストを代替するのか?
brainpadpr
4
220
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
2
440
白金鉱業Meetup_Vol.18_AIエージェント時代のUI/UX設計
brainpadpr
1
270
Dataverseの検索列について
miyakemito
1
160
読んで学ぶ Amplify Gen2 / Amplify と CDK の関係を紐解く #jawsug_tokyo
tacck
PRO
1
290
PagerDuty×ポストモーテムで築く障害対応文化/Building a culture of incident response with PagerDuty and postmortems
aeonpeople
3
530
Twelve-Factor-Appから学ぶECS設計プラクティス/ECS practice for Twelve-Factor-App
ozawa
3
160
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Automating Front-end Workflow
addyosmani
1370
200k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Making Projects Easy
brettharned
116
6.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Site-Speed That Sticks
csswizardry
6
530
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
How to train your dragon (web standard)
notwaldorf
91
6k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
RailsConf 2023
tenderlove
30
1.1k
Building Applications with DynamoDB
mza
94
6.4k
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!