ArduinoがPCに認識されない!
Arduino LeonardoをUSBケーブルでPCにつなげたとき、COMポートとして認識された後、すぐに「不明なデバイス」となってしまう場合には、次の可能性が考えられます。
(1) ハードウェア的な問題が発生している
(2) 書き込まれているブートローダ(ソフトウェア)が壊れている
(3) Arduinoがハードウェア的に壊れている
問題の切り分け
(1)のケースは、さらに2通りの可能性が考えられます。
1つは、Arduinoにつなげているシールドや部品の影響で電力消費が激しく、電源供給が不安定になっている可能性です。
これを調べるためには、Arduinoにつなげている全てのシールドやジャンパーケーブルを外し、USBだけを接続してPCにつなげてみてください。
改善しなければ、USBケーブルやPCのUSBコネクタの接触が悪くて、電源供給や通信が不安定というケースが考えられます。
この場合には、別のUSBケーブルを試したり、PCの別の場所のUSBコネクタに接続する、あるいは他のArduinoでは問題がないかを確認することで切り分けることができます。
いずれも該当しない場合には、(2)のケースと考え、ブートローダの修復を試みてください。
この方法は本稿の主題ですので、後半で詳しく説明します。
ブートローダを修復しても問題が解消しない場合や、修復ができない場合は、(3)のArduinoが壊れている可能性が高いです。この場合、残念ながら使えるように戻すことは不可能です。
そもそもArduino Leonardoのブートローダの役割は?
Arduinoは、PCとUSB接続するとCOMポートとして認識されます。COMポートを通じてPCと通信を行うことで、プログラムのダウンロード(Arduinoへのインストール)などを行うことができます。
これらの、
- COMポートとして振舞う動作
- PCからの指示によりプログラムのダウンロード等を行う動作
は、Arduino Leonardoではソフトウェアで実現されています。そのソフトウェアがArduino Leonardoに書き込まれているブートローダです。
もし書き込まれているブートローダが何らかの理由で壊れた場合、COMポートとして振る舞う動作がおかしくなるため、PCと接続できないという問題が発生するのです。
Arduinoのブートローダを修復しよう!
ブートローダもArduinoに書き込まれているソフトウェアですので、それが壊れた場合には書き直すことで修復可能です。
ただし、プログラムを書き込むために必要なブートローダが壊れているわけですから、通常の方法では書き直すことはできません。
ブートローダの修復方法を、順を追って説明します。
必要なもの
ブートローダを修復するには次のものが必要となります。
- Arduinoボード(UNOなど)
- ジャンパーワイヤー
- 抵抗 (100~200Ω)
ブートローダはUSB経由では書き込みできませんので、PCから直接書き込むことはできず、別のArduinoを仲介役として使う必要があります。
Arduinoが2つ登場すると紛らわしいので、以降では、仲介役となるArduinoを「書き込み側のArduino」と呼び、ブートローダを書き込みたいArduinoを「ターゲットのArduino」と呼ぶことにします。
書き込み側のArduinoを設定する
書き込み側のArduinoに、そのためのソフト(ArduinoISP)をダウンロード(インストール)します。
Arduinoをプログラミングするときの要領で、PCとつなぎArduinoIDEを立ち上げてください。
IDEのメニューから、「ファイル」→「スケッチの例」とたどり、「ArduinoISP」を選択してください。ブートローダを書き込むためのスケッチが開きます。このスケッチをコンパイルし、書き込み側のArduinoにダウンロードすることで、ブートローダ書き込み機として動作するようになります。
図1:ArduinoISPのスケッチを開く
書き込み側のArduinoとターゲットのArduinoとを接続する
Arduinoには、左右に並んでるピンソケットとは別に、「ICSP端子」と呼ばれている3×2のピンヘッダー端子が出ています。ブートローダの書き込みは、このICSP端子を使って行います。
図2のように、ジャンパーワイヤーを用いて、書き込み側のArduinoのD10~12および5VとGNDを、ターゲットのArduinoのICSP端子に接続して下さい。
また、書き込み側のArduinoのリセット端子と5Vとを抵抗でつなぎます。
書き込み側 ターゲット
図2:Arduinoの接続
以上の接続をしたうえで、書き込み側のArduinoを、USBケーブルでPCとつなぎます。
ブートローダの書き込み
PC上でArduinoIDEを立ち上げてください。
ブートローダの書き込みは、開いているスケッチには依存しませんので、立ち上げたままのウィンドウで(任意のスケッチが開いている状態で)以降の操作を行います。
IDEのメニューから「ツール」→「ボードの設定」とたどり、ボードの種類の候補の中から、ターゲットのArduinoのものを選択します。PCと直接つながっている書き込み側のArduinoの種類を選択するのではないことに注意してください。(書き込み側のArduinoは、もはやArduinoではなく、書き込み機だと思ってください)
図3:ターゲットのArduinoの種類を指定
また、「ツール」→「書込装置」とたどり、候補の中から ”Arduino as ISP” を選択します。これは、Arduinoを書き込み機として使っているということを指定しています。
選択肢の中には、”ArduinoISP”のような紛らわしいものがあります。間違えずに”as”の付いているものを選択して下さい。
図4:書込装置の指定
準備ができたら、「ツール」→「ブートローダを書き込む」を実行します。
図5:ブートローダを書き込む
ブートローダの書き込みには少し時間がかかります(数分程度)。図のように、「ブートローダの書き込みが完了しました」と表示されるまで待ってください。
図6:ブートローダ書き込み完了
最後に動作確認
動作確認のため、ターゲットのArduinoを、USBケーブルでPCに接続してみてください。COMポートとして認識され、その状態が変わらなければ、うまく修復できたはずです。
念のため、Arduino IDEを立ち上げ、サンプルスケッチからblinkingを選んでダウンロードしてみてください。LEDが点滅するのが確認できれば、ブートローダの修復は完了です。
出来ました。助かりました。
ありがとうございます!
ほぼあきらめていましたが、復活しました!!
ありがとうございました!
私もできました!
いい加減な知識でやっていたので、時間が掛かりました。
最初からこのページを見ていれば良かったです。
ありがとうございました。
スゴッ!
おかげで私のケースでも復活できました!
また、やってしまった〜と、慣れた手順で新しく発注済なのですが。
手持ち無沙汰で、こちらの情報にたどり着き試してみたところ復活です。
おそらく外部電源系の保護でしくじってると考えていたので、これまではブートローダー説は試すこと無くお釈迦扱いしてきましたが、おかげ様でICSPピンの有り難さを学ぶことができました。
ほんとうにありがとうございました!