ロボット・ハードウェア

Windows環境でPlatformIOを使ってRaspberry Pi Picoのソフトウェア開発をする時のエラーを解決!

記事内に商品プロモーションを含む場合があります

Raspberry Pi Picoが動かない…(Windows11にて)

PlatformIOを使ってRaspberry Pi Picoのソフトウェア開発をしようとしたところ、初っ端から問題にぶち当たりました。どうやらWindows固有の問題のようです。その解決方法を記録しておきます(2022/10/16現在)。

環境はこんな感じ。

  • Windows 11
  • Visual Studio Code (ver. 1.67.2)
  • PlatformIO導入済み
  • PlatformIOでRaspberry Pi PicoのArduinoプロジェクトを作成

PlatformIOとRaspberry Pi Pico

Raspberry Pi Picoは様々な環境でプログラミングができます。一般的に用いられているのはMicroPythonが使えるThonny。この他にもCircuitPythonを使ったりArduino IDEを使ったりする方法もあります。もう一つの選択肢としてPlatformIOというものがあります。

PlatformIOドキュメントを見ると

What is PlatformIO? (PlatformIOとは何ですか?)

PlatformIO is a cross-platform, cross-architecture, multiple framework, professional tool for embedded systems engineers and for software developers who write applications for embedded products.

PlatformIOはクロスプラットフォーム、クロスアーキテクチャ、マルチフレームワークの、組込みシステムエンジニアと組込み製品用のアプリケーションソフトウェア開発者のためのプロ向けツールです。

https://docs.platformio.org/en/latest/what-is-platformio.html

とあります。PlatformIOでは様々な組み込みボード用のプログラムをVisual Studio Codeのエディタでサクサク作ることができるのが特徴です。

PlatformIOでは公式のSDKを使ってC/C++で開発することもできますが、今回はArduinoプロジェクトとして設定しました。

RaspberryPi Picoにプログラムが送れない…

実際にPlatformIOでArduinoプロジェクトを作り、簡単なLEDの点滅プログラムをRaspberry Pi Picoに送ってみました。すると…

図1:PlatformIOでのプログラムアップロードの失敗

図1のようにアップロードに失敗してしまいました。コンソールをよく見ると”Auto-detected: COM1″となっています。

何が起きているのか?

では実際にデバイスマネージャーで確認してみます。するとポートのCOM1は別の機材で利用されていますが、Raspberry Pi PicoはCOM1として認識されていないことがわかります。

図2:デバイスマネージャーのCOMポート

どうやらRaspberry Pi PicoのUSBドライバがインストールされておらず、正しく認識されていないようです。

USBドライバをインストールして解決だ!

そこで更にデバイスマネージャーをよく見てみると、”ほかのデバイス”のところに”RP2 Boot”と表示されています。これが接続したRaspberry Pi Picoです。これに正しいUSBドライバをインストールする必要がありそうです。

図3:「ほかのデバイス」として扱われているRaspberry Pi Pico

そこでWindows環境における汎用USBドライバWinUSBをインストールすることにします。

お手軽にWinUSBをインストールできるツールはいくつかあるようですが、Zadigを利用することにしました。今回はChocolatey経由でインストールしました。Zadigを起動し、RP2 Bootを選択してWinUSBをインストール。

図4:ZadigでのWinUSBインストール

そうすると該当するCOMポートが認識されてPlatformIOからプログラムが送れるようになりました。図5がその時のPlatformIOのコンソール画面ですが、”Auto-detected: COM3″と変化してその後のアップロードが実行されています。

図5:WinUSBインストール後のPlatformIOのコンソール画面

ここで改めてデバイスマネージャを見てみると、図6のようにCOM3として新たにRaspberry Pi Picoが認識されるようになっています。以降はRaspberry Pi PicoがちゃんとCOMポートとして認識される様になりました。COM3はあくまでこの環境での話なので、環境によってはCOM3以外の別のポートが割り当たるかもしれません。

図6:WinUSBインストール後のデバイスマネージャ
図7:Raspberry Pi PicoのLEDの点灯!

LEDの点滅プログラムもちゃんと動作しました!(図7)

追記:COMポートとして認識されないときの対処法

ドライバインストール後に別のRaspberry Pi Picoを接続してもユニバーサルシリアルバスデバイスのところにしか表示されず、COMポートとして認識されないケースがあるようです(図8)。

図8:ユニバーサルシリアルデバイスにのみ認識されているRaspberry Pi Pico

その場合は一旦ストレージに直接、シリアル通信を行うプログラムを書き込んでやるとCOMポートとして認識されるようです。リムーバブルドライブとして認識されない場合はRaspberry Pi PicoのBOOTSELボタンを押しながらUSBケーブルを差し込みます。

次にRaspberry Pi公式サイトのC/C++ SDKのページで配布されているサンプルである‘Hello World’ UF2をダウンロードします。

あとはリムーバブルドライブとして認識されているRaspberry Pi PicoにダウンロードしたUF2ファイルをドラッグアンドドロップ(図9)。するとリブートされ、COMポートとして認識されるようになります。

図9:ドライブとして認識されたRaspberry Pi Pico。ここにダウンロードしたUF2ファイルをドラッグアンドドロップする。