
PicoRubyに含まれるmrbgemのひとつpicoruby-watchdogへのESP32版未実装機能へのPull Requestを作成しました。アドバイス、レビュー、マージありがとうございました。
この記事ではどういう過程でこれに至ったかを解説して、ESP32 PortingやPicoRubyのmrbgemへの機能実装の参考になればと思っています。
発端
こちらがTLに流れてきました。
x.comそういえば「R2P2にはrebootコマンドが用意されている」という話が一次会で出ていましたが、ESP32は未実装でした。近々実装しておきます。https://t.co/C47RB3a76z
— yuuu (@Y_uuu) 2025年7月19日
示されたページをみてpicoruby/mrbgems/picoruby-watchdog/ports/esp32 /watchdog.c ということで、このmrbgemのESP32のみの事情というのが実装からも理解しました
先行事例をみる
逆に言うとRP2040は実装済みということです。
#include "hardware/watchdog.h" もあるし、watchdog_reboot関数は独自に書かれたものではなくRP2080のドライバー層にあるんだろうと当たりをつけました。
尋ねる
RP2080ではwatchdog_rebootで再起動ができる。ならばESP32のESP-IDFにも似たようなものがあるのではないかと、LLMに問い合わせます。 そうするとESP32での所定の時間をdelayする方法と再起動をかける方法の回答を得られたのでとりあえず組み込んでみました。
作り込む
この段階でなんとリブートに成功しました。
x.com#picoruby256 こうかな?って書き足してみたら、ESP32のR2P2からreboot動いた!!プルリクチャンスするか pic.twitter.com/8p56Zzxsgg
— bash (@bash0C7) 2025年7月20日
この段階ではバイコぶっ込んだだけの荒削りですので、ここから本当に書くべきコードの絞り込み、裏取り、パラメーター理解、他の解法の調査など、磨き上げに入っていきました。
プルリク作り
改めて改修前の挙動を記録した上で、今回のパッチを当てて稼働確認と記録をとり、プルリク作成をしました。
せっかく関西での #picoruby256 ということで、551のある時ない時を念頭に置きつつ、Not Implemented/Implemented動画として埋め込みました。
ちなみに
このmrbgem、他にも /* Not implemented */ つまりプルリクチャンスがあります。
RubyKaigi 2025やPicoRuby Overflow 会議でPicoRubyやPortingに興味を持った方はここでトライしてみるといいんじゃないでしょうか。