ESP32でも「ユーザーが勝手にプログラムを書き換えられないようにする」ことは可能です。ただしレベルによって方法が違い、ソフト的ロックとハード的ロックがあります。
🔑 方法 1. ソフト的な禁止(ブートローダーの制御)
ESP32は標準で「UARTダウンロードモード」(書き込みモード)があり、
PCからUSBシリアル経由で書き換えが可能です。
これを防ぐ方法として:
- セキュアブート(Secure Boot)を有効化
- 初回書き込み時に署名済みのファームウェアしか起動できないようにする機能。
- 不正なファームを書き込んでも起動できません。
- フラッシュ暗号化(Flash Encryption)を有効化
- 書き込み済みのプログラムを暗号化し、外部から読み出せないようにします。
- UARTブートローダーの無効化(EFuse設定)
- EFuseビットを焼くことで「UARTからの再書き込み禁止」にできます。
- 一度設定すると元に戻せません。
🔒 方法 2. ハード的な禁止
- GPIO0 を常時 High に固定
→ 書き込みモードに入れないようにする。 - USBシリアルの配線を外す
→ PCから接続してもアップロードできなくなる。 - 書き込み用のEN/RSTボタンを基板から省略
→ 簡単にはフラッシュモードに入れられない。
⚠️ 注意点
- 完全に禁止してしまうと、開発者本人も将来のアップデートができなくなります。
- 一般的には
- Secure Boot + Flash Encryption を有効にする
- 必要ならUART書き込みを無効にする
という手順が推奨です。 - OTA(Over The Air 更新)を残す設計も可能ですが、それも署名付きファームにしておかないと改ざんのリスクがあります。
✅ まとめ
- 可能です。EFuse(セキュアブート/フラッシュ暗号化/UART無効化)を設定すれば、事実上ユーザーは書き換え不可能になります。
- ただし「一度焼いたら戻せない」ため、実機でやる前に必ずテスト用ボードで試すことを強くおすすめします