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
ChatGPTを使ってRaspberry Pi Picoの処理系を書いた
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
てきめん tekimen
PRO
May 27, 2026
Programming
90
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ChatGPTを使ってRaspberry Pi Picoの処理系を書いた
#phpstudy 187th
てきめん tekimen
PRO
May 27, 2026
More Decks by てきめん tekimen
See All by てきめん tekimen
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
770
PHP Internals わいわい #3 PIEを使ってみよう
youkidearitai
PRO
0
67
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
330
Limit of code point for grapheme cluster in programming language side.
youkidearitai
PRO
0
91
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
2
3.6k
PHP 8.5の裏話
youkidearitai
PRO
0
150
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
340
PHP Internals わいわい #3 mb_*関数を作ってみよう
youkidearitai
PRO
0
170
Windows版php-srcデバッグ方法
youkidearitai
PRO
1
130
Other Decks in Programming
See All in Programming
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
620
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
220
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.6k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
430
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
140
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
6k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.7k
Inside Stream API
skrb
1
810
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
120
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
370
どこまでゆるくて許されるのか
tk3fftk
0
280
Featured
See All Featured
BBQ
matthewcrist
89
10k
Scaling GitHub
holman
464
140k
Agile that works and the tools we love
rasmusluckow
331
22k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Crafting Experiences
bethany
1
190
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Why Our Code Smells
bkeepers
PRO
340
58k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
160
Ethics towards AI in product and experience design
skipperchong
2
320
Transcript
ChatGPTを使って Raspberry Pi Picoの 処理系を書いた
自己紹介 てきめん • https://tekitoh-memdhoi.info • https://github.com/youkideari tai • https://phpc.social/@youkide aritai
• https://mstdn.jp/@tekimen オレ
会社をやめた • 会社を辞めた • フリーランスになろうと、PHPの案件を探す – あれっ!?ない・・・ – TypeScriptとGoしかないぞ・・・ –
なくはないが、供給過多(PHPエンジニア多すぎ) – どうやら海外ですら同じっぽい
ここで感じる危機感 • PHPユーザーとしても、そしてコミッターとしても危 機感を感じる – 作っても使われないとか洒落にならない • 多分何かをしなければならない
第186回でもあったそうですね? • PHPが新規案件で選 ばれない • https://www.docswe ll.com/s/halt/ZPRM WE-2026-04-21-phps tudy186#p1 –
こちらを拝見しました。 同じことを思いました。
Nuno Maduro said... Stop everything, I don’t care any of
the feature we talk today. To the website get fix. https://www.youtube.com/watch?v=tgSfRxDAXaw つまり、(PHPFがすべきことは)PHPに新しい機能を追加するのではなく、古臭 いPHP.netを新しくすることを第一にすべきということらしい
ぼくなりの回答 • PHPをマイコンで動かそう! – RP2040やRP2350(Raspberry Pi Pico W2)で動かす – LLM、ChatGPTを使って処理系を書く
– 「とっかかり」のマイコンの操作にPHPを選んでもらう施策 • Raspberry Pi Picoは安いし • Picoで使われてるRP2040の小さいマイコンはたくさんあるし
作っていく • RP2040/2350のPHPの処理系を書いた – https://github.com/youkidearitai/picophp – ChatGPTにほぼほぼ書いてもらった – 段々とコードベースがわかるようにはなった –
RP2040のできることを広げるようにAPIを増やしていく • I2C、SPI、HIDマウス、キーボード…
しくみ • Pico SDKでコンパイル • PHPプログラムを以下のように処理 – 字句解析 – 構文解析
– VMのopcodeに変換:opcodeはC言語製 • この時点でCコンパイラーでコンパイル – .uf2ファイルが出来上がるので、Picoへコピーする • RESETボタンを押しながらUSBに挿せばファイル転送モードになる • MicroPythonでは処理系が中にはいっていて、ROMに.pyをコピーして使う – これの長所はガベージコレクションの実装ができること – 短所は重いこと • picoPHPは.pphpファイルを処理系ごとコンパイルしてコピーして使う – 長所は速いこと、単純なこと – 短所は複数あって、ガベージコレクションがなく、string arenaという概念が発生したの で arena_reset 関数が必要になったこと、エラーを追いかけるのに苦労すること
マイコンの基本 • シリアル通信でマイコンとパソコンとを通信する – デバッグに使ったり、センサーの値を読んだりする – C言語を基本にすると、main関数をループするように作る • ただし、今回のpicoPHPではmain関数は見えないようになってる •
ディスプレイなどのパーツはある – パーツには「データシート」というものがあって、それを読んでいく ことで使い方がわかる • ただし、分かりづらいのでわかったら結構上級者かも
picoPHP コード例 • これは読み取った電圧 をもとにLEDとかの出 力を強めたり弱めたり するコード • while のループ内でマ
イコンを動かす
I2Cとは Vdd SDA SCL Rp μC Master μC Slave Slave
ADC Slave DAC • 一つのmasterと、複数の slaveで成り立つ通信方式 • センサーやモーターなどに使 われる • 一つのslaveにアドレスが振ら れる • 二本の線で通信ができる(電 源とGNDが必要だが)のが利 点 en:user:Cburnett - Own work made with Inkscape, CC 表示-継承 3.0, https:/ /commons.wikimedia.org/w/index.ph p?curid=1472017 による
気温・気圧と湿度センサー • I2Cを使って、気温・気 圧はBMP280と湿度は AHT20を利用、表示は SSD1306 • PHPで気温・気圧・湿 度を画面に出力できた
ハマったこと • 一応エラーは出るんだけど、出すエラーの番号が 行番号ではなくopcodeの番号 – opcodeをテキストに吐き出させて対処 – 後にエラーの行を出力させることにした • エラー処理がめんどい
にらめっこしてたopcodes • opcodeとはスタックマ シン – スタック構造でできてい る • 左に番号がついてて、そ の番号でバグを推測して
た
エラーの行数を出すようにした • 24行目に0除算でエ ラーになるようにしてい て、ちゃんとシリアル上 で24行目を指して落ち た
デモ
picoPHPのデータ型 • Null – 自明なのでスキップ • Bool – 自明なのでスキップ •
Integer • Float • String
integer • 数値型 – 32bit型 • 2^31-1から-2^31までをサポート
float • 内部もfloat • 小数の表現 – 内部もfloatで、doubleではないのでちょっと厄介かも
string • 文字列 – $value[1]とインデックスを指定すると、該当する文字 のintが返ってくる • I2Cなどの通信を行うのに適している • 本来のstringと違う、ほとんどint(uint_8)の配列
改善したいこと • var_dump関数の実装 • エラー時のデバッグ情報の追加 – 今だとopcodeの情報しか出ないので – 出すようにした。難しかったのはrequireがあったときに行を戻ったりす ること
PHPらしく、簡単にかけるようにしたい…! ひとつひとつ、機能を増やしていって違和感ないようにしてます
やってみたいこと • picoPHPをTinyGo-Keebとコラボしてみたい – キーボード操作ができるので、TinyGoで実装しているもの をpicoPHPで実装したい – コミュニティの協力を得たい – 自分で作ったものが盛り上がるとこう…嬉しくない?
– というわけでパーツを買って試してみる • というかなんかするかも? • https://github.com/tinygo-keeb/workshop/blob/main/build guide.md
まとめ • ChatGPTで処理系をかけるようになってた • PHPは風前の灯ってわけじゃないけど、ちょっとつら い感 – ただ、そのおかげでpicoPHPを作ったし、楽しい • PHPのコミッターとして頑張っていきたい
Raspberry Pi Picoを買おう! • PHPであそぼう! • もっと電子工作をPHPに!