先日Arduino IDEを使っていてマイコンボードにスケッチを書き込もうとした時に以下のようなエラーが出ました。
Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings' Compilation error: exit status 0xc0000409
色々調べて試しても解決しなかったのですが、自分で思いついた方法で解決できたので今回はその備忘録です。
では、始めます。
0:発生経緯
まずは前述のエラーが発生するようになった経緯を少し説明します。
Arduino IDEを起動させると、ライブラリやボードにアップデートがあればアップデートするかどうかのメッセージが表示されると思います。
ボードのアップデートが来ていたので、アップデートボタンをクリックしてアップデートを走らせたところ「アップデートが正常に終了せずに途中で失敗した」というエラーが発生しました。
この時ネットの調子が悪かったのか「サーバーとの接続が途切れた」旨のメッセージも表示されていました。
エラーが出たので再度ボードのアップデートを行い、エラーなく終了したのでスケッチを書き込もうとしたところ、必ずエラーが発生するようになったという形です。
ちなみに書き込もうとしたスケッチはエラーが発生するようになる前は正常に書き込めていました。
なので恐らくエラーの発生原因としては「ボードのアップデートに失敗したため」だと考えられます。
ボードをアンインストールして再度インストールしたり、Arduino IDE自体をアンインストールからの再インストールも試しましたが、どうやってもエラーが解消できませんでした。
1:対処方法
結論から言うと、今回の状況ではArduino15フォルダ内を修正することで解決できました。
Windowsにインストーラを使ってArduino IDEをインストールしていた場合、Arduino15のフォルダは以下の場所にあります。
C:\Users\[ユーザ名]\AppData\Local\Arduino15
ここにはインストールしたボードライブラリなどが配置されています。
発生している以下のエラーを読むと、Python関係のモジュールが見つからずにエラーとなっていることがわかります。
Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings' Compilation error: exit status 0xc0000409
エラー発生前に失敗したボードアップデートはRaspberry Pi Picoについてものだったので、Arduino15内の以下のフォルダを確認しました。
C:\Users\[ユーザ名]\AppData\Local\Arduino15\packages\rp2040\tools
以下のようにフォルダが色々ありますが「pqt-python3」というフォルダ内に必要なPython関連のライブラリなどが含まれています。またその他のフォルダもgccなどスケッチのコンパイルに必要そうなものが並んでいます。
今回はコンパイル時にエラーが発生しているため、この「toolsフォルダ内にある全てを一度削除してから再度ボードをインストールし直し」ました。
その結果、発生していたエラーが解消されてマイコンに書き込めるようになりました。
まとめると「ボードインストールやアップデート時にエラーが発生し、スケッチのコンパイルや書き込みができなくなった場合は、Arduino15内の対象ボードエラー発生部分と思われるフォルダを削除してボードを再インストールする」ということになります。
以上がArduino IDEで検証や書き込み時にエラーが出た場合の対処方法になります。
ちなみに自分の想像ですが、Arduino IDEでのボードアップデートは恐らく「最低限のフォルダが存在している」程度のチェックしかやっていないと思われるので最低限のフォルダが作成された後に何かしらのエラーでそのフォルダにファイルが配置されなくてもすでにインストールされていると判断されるようになっているような気がしています。
Pythonのモジュールがないというエラーで調べると、再インストールをすれば良いとか環境変数のパスが通ってないとか色々と出てきますが、それでもエラーを解消できない場合は今回の方法を試してみるのも良いかもしれません。