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
100
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
870
PHP Internals わいわい #3 PIEを使ってみよう
youkidearitai
PRO
0
78
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
380
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
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
200
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
560
AIを紡ぐPMのお話
swdtkuy
0
110
テーブルをDELETEした
yuzneri
0
140
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
230
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
500
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
130
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
160
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
200
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
240
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
290
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
7k
Mobile First: as difficult as doing things right
swwweet
225
10k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
250
RailsConf 2023
tenderlove
30
1.5k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
370
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
It's Worth the Effort
3n
188
29k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Into the Great Unknown - MozCon
thekraken
41
2.7k
The Spectacular Lies of Maps
axbom
PRO
1
910
The Pragmatic Product Professional
lauravandoore
37
7.4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
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に!