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
てきめん tekimen
PRO
May 27, 2026
Programming
99
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
850
PHP Internals わいわい #3 PIEを使ってみよう
youkidearitai
PRO
0
75
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
360
Limit of code point for grapheme cluster in programming language side.
youkidearitai
PRO
0
95
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
2
3.7k
PHP 8.5の裏話
youkidearitai
PRO
0
160
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
470
PHP Internals わいわい #3 mb_*関数を作ってみよう
youkidearitai
PRO
0
170
Windows版php-srcデバッグ方法
youkidearitai
PRO
1
140
Other Decks in Programming
See All in Programming
「人を評価する AI」の設計と実装
ryoyanara
0
180
What's New in Android 2026
veronikapj
0
250
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
740
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
210
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
160
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
220
仕様駆動開発の消費期限
watany
17
7.3k
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
テーブルをDELETEした
yuzneri
0
140
Go 1.27 における memory allocation の高速化
andpad
0
110
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Discover your Explorer Soul
emna__ayadi
2
1.2k
BBQ
matthewcrist
89
10k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
350
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
Testing 201, or: Great Expectations
jmmastey
46
8.2k
How to Ace a Technical Interview
jacobian
281
24k
Unsuck your backbone
ammeep
672
58k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
410
Marketing to machines
jonoalderson
1
5.7k
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に!