Part1では、学校の課題をきっかけにM5Stackでの帰宅通知デバイス作りを思い立ち、最初のURLミスを乗り越えるところまでをお届けしました。Part2では開発環境の構築と、今回一番の山場だったバージョン問題についてまとめます。
VS Code + PlatformIO編:アリさんマークとの出会い
🧐私:VSCのアリみたいなマークは?
🤖Gemini先生:それがPlatformIO(PIO)です。VS Codeの中でM5Stackを動かすための、専用の翻訳機+道具箱のようなものですよ
🧐私:PIOって名前は?
Arduino IDEに比べて、コード入力の自動補完が優秀で、ライブラリもプロジェクトごとに自動管理されるとのこと。「アリさんマーク」を目印に拡張機能を検索してインストール、という説明のおかげで迷わず進められました。
つまずき②:M5Stack用のライブラリを入れるには
🧐私:M5Stack用のライブラリを入れるには
🤖Gemini先生:(platformio.iniに1行足すだけの方法を提示)
言われた通り1行書き足すだけで準備が完了する手軽さに驚きました。
つまずき③:「import」がエラーになる謎
いざコードを書いてみたら、謎のコンパイルエラー。画面をスクショしてGemini先生に投げました。
🧐私:(コンパイルエラー画面のスクリーンショットを添付)
🤖Gemini先生:このエラー文にあるimportという単語から見て、PythonのコードをC++の環境(Arduino IDE)に貼り付けてしまっていますね。C++用のコードに翻訳しますね
「言語が違うものを貼り付けていた」なんて、ゼロ知識の私は自分では絶対に気づけなかったと思います。スクリーンショットを貼るだけでエラーの原因を見抜いてもらえたのは、個人的にとてもありがたい体験でした。
ネットワーク編:学校のWi-Fiという壁
🧐私:学校のWi-Fiなんだけど
🤖Gemini先生:学校のネットワークは認証方式が複雑な場合が多いです。まずはスマホのテザリングで動作確認してみましょう
理論的に正しい方法より先に、今すぐ動かして成功体験を得られる方法を優先してくれたと感じ、ありがたかったです(後日、学校Wi-Fiへの直接接続にも対応することになります)。
バージョン地獄編:miniz.h事件
ここが今回一番の山場でした。
31 | #include <rom/miniz.h>
| ^~~~~~~~~~~~~
compilation terminated.
grpc: error while marshaling: string field contains invalid UTF-8
見た瞬間「もう無理かも」と思うくらい意味不明なエラーでした。
🧐私:(上記のエラーを貼り付け)
🤖Gemini先生:miniz.hは本来、データ圧縮のための小さな道具のようなものです。今回のエラーは、ESP32ボードのバージョン3.x系で内部のファイル構造が大きく変わってしまったことが原因ですね
🧐私:miniz.hとはなにかおしえて / M5Stack by M5Stackのバージョンを変更して意味があるの?
🤖Gemini先生:安定版の2.x系にダウングレードすることをおすすめします
🧐私:esp32とM5Stack両方ともダウングレードしたほうがいい? / esp32の方はremoveしたよ / 2.0.9しかない
こうして、ESP32側は一度remove、バージョンは当時選べる中で最新の2.x系だった2.0.9を選び直すことで解決しました。コードを一行も直さず、環境のバージョンを合わせるだけで直る問題だったのは、私にとって大きな発見でした。
次回Part3では、いよいよ3ボタン通知機能の実装と、そこで発生した2つのバグについてお届けします。