先日、今まで実用できていたArduinoのスケッチ(プログラム)をアップデートしようとしたところ、書き込みできなくなる事がありました。
同じ症状が突然発生した方の参考になるかもと思い、備忘録として残しておきます。
なお、真因を特定するほど詳しくはないので、症状と復旧した対策の事実のみを、簡潔に紹介いたします。
Arduinoにスケッチを書き込みできなくなった
Arduino nanoの互換品を使用していて、それまでは問題なく使えていたスケッチが、これも使い続けていたArduinoに、書き込みできない事態が発生しました。
他のスケッチでも試してみましたが、同様に書き込みできないので、スケッチの問題ではなさそうです。
症状1
最初に症状が現れたのは、いつも使っているモバイルパソコン(レノボ YOGA BOOK)でした。
IDE画面の検証ボタン(レ点マーク)では問題なくコンパイルが終了しますが、マイコンボードに書き込むボタン(右向きの矢印マーク)では、コンパイルは終了するものの、書き込みを開始したところで止まってしまいます。
試しにCH340Gドライバーをインストールしなおしても、書き込みできないままです。
とりあえず、モバイルパソコンからArduinoに書き込むのはやめて、時間が解決してくれるのを期待してみることにしました。
症状2
いつも使っているモバイルパソコンからはArduinoへの書き込みができなくなったので、もう一台のデスクトップパソコンで書き込んでみたところ、問題なく書き込みができました。
ところが次の日に、同じデスクトップパソコンで、定数だけ変更した同じスケッチを書き込もうとしたところ、今度は検証(コンパイル)時にエラーになります。
スケッチは、void loop(){.....}の後で、void xxxxx(){......}関数を定義して、loop内でxxxxx()を使っているものです。
コンパイル時のエラーは、和訳すると「loop内で使われているxxxxxなんて知らないし!」という内容です。
何度もスケッチを見直して見ましたが、「;」や「{ }」が抜けていることも無く、また前日まで問題が無かったので、スケッチは正常だと思われます。
Arduino IDEがインストールされているパソコン2台が、現象は違いますが共に使えなくなってしまい、途方にくれました。
対策
Arduinoに書き込みできない原因として、Arduino IDE自体が怪しくなってきたと思い、問題なく使えていた時との違いについて、しばらく考えてみます。
ふと、最近プロセッサの選択肢に目が止まった事を思い出しました。
使っているArduino nano(互換品)は、ATMega328Pを使っていますが、Arduino IDEのプロセッサ選択肢には、
- ATMega328P
- ATMega328P(Old Bootloader)
の2種類があり、この時点ではATMega328Pが選択されています。
この2種類の選択肢が以前から有ったかは覚えていないものの、新旧の選択肢があるという事が気になります。
試しに「ATMega328P(Old Bootloader)」プロセッサに選択変更してみたところ、パソコン2台ともに、あっさりと書き込みできるようになりました。
- Arduino IDEのプロセッサの「ツール」を選択
- 「プロセッサ」を選択
- 「ATMega328P」から「ATMega328P(Old Bootloader)」に選択を変更
書き込みできなかった真因はわかりませんが、これで一件落着して、今までどおりにArduinoを楽しむことができるようになりました。