RaspberryPi PicoのArduino環境構築でハマった　～そして解決した～

# ようやく手に入れたピコちゃん。
**ラズパイピコを手に入れた私は、いきなりやらかした。**

![IMG_20210522_174123.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/6227cbfd-5691-5515-7dae-a4f5cdc163cc.jpeg)

脳死ではんだ付けしたらクレイジーな位置にピンヘッダが。
ごめんよピコ。

## 早速Lチカしてみる

![tejun1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/8866637b-55d5-014a-7584-587d3277a541.jpeg)

オフィシャルサイトの手順通りにLチカさせます。

噂に漏れず、USBメモリ的にバイナリをドラッグアンドドロップすれば簡単にプログラムを書き込めます。すごいぜ！

## Arduino IDEで開発したいな

私は普段、VSCodeにArduinoIDEを統合して開発を楽しんでいます。
そしてラズパイピコもボードマネージャがリリースされたようなので、早速導入します。
なお、OSは**Windows10**です。

いつも通りボードマネージャを開き、追加ボードURLを環境設定で追加して、IDEのボードマネージャから追加します。
公式っぽいのが出てるのでそちらを使いましょう。

作業詳細は以下の記事を参考に。

https://garchiving.com/use-raspberry-pi-pico-with-arduino-ide/

## 環境は整った。早速コード書こうぜ！！

コードをマイコンにアップロードするときはCOMポートを選択するんだけど・・・

・・・ない。ない！

![keika2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/6fcaa0aa-0f2b-f1ad-cb15-f65a01bfccc7.jpeg)

デバイスマネージャを確認しても見つからず・・・　

しかし焦ってはいけない。こういう時はだいたいドライバが無いんだ！

[さっさと解決方法を見せろ！な方はこちらをクリック](#まとめ)


## ドライバを探せ！
ピコ用のドライバを探しにGoogle先生に問い合わせるも、それっぽいのがなかなか見つからない。
一応、[公式のSDK](https://github.com/raspberrypi/pico-sdk)をビルドして構築する時にドライバ入れたりする工程があるみたいだけど、~~めんどくさい~~ドライバ単体入れればOKというわけでは無さそうだったので該当の手段は一旦保留。

詳しい方に相談してみたら、私と同じ症状でハマって、何らかのドライバ(名前わすれた)入れたら認識したらしいのでその方と一緒にネットの海を泳ぎましたが、その時の記事が見つからず断念・・・

そうしているうちにふと気が付いた。

## ここまでやったことを思い出せ

ラズパイピコの動作チェックでLチカプログラムを入れたとき。

- 本体のボタンを押しながらUSBで接続！
- フラッシュメモリのごとくエクスプローラが開き、ドラッグドロップでバイナリをアップロード
- てれれん(WindowsでUSBデバイスが外れる音)
- ビルトインLEDがチカチカ

・・・その後は、本体のボタンを押しながらUSBに接続しない限りは(フラッシュメモリとしてブートしない限りは)LEDが点滅するだけの存在となっています。

[公式のサンプルコード](https://github.com/raspberrypi/pico-examples/blob/master/blink/blink.c)を確認

・・・

・・・

シリアルポート、つかってないよね。

## そういえば、Hello Worldのサンプルあったよね

[公式サイト](https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-c)にて、Hello Worldのチュートリアルがあります

![katei3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/72f48f7e-e94a-3a41-96c5-958b2eb504c5.jpeg)

マイコン界隈の`Hello World`は、シリアル通信でホストコンピュータのターミナル等に情報を出力します。

・・・あ。

これならいやでもCOMポート認識するよね！！

では早速、本体のボタンを押しながら、`Hello World`コードをアップロードしましょう。

![katei4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/3d01cac7-aa03-df3c-0cba-71a3b6be860b.jpeg)

きたきたきた！

これでようやく開発できます！やったね！

## やったね？ここからが本番さ。

さて、Arduino公式の適当なLチカプログラムを流し込み、ビルトインと外部LEDをチカチカさせましょう！

**いくぜ！！！**

![katei5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/74c396d1-c6fd-badc-d868-cc923116bb48.jpeg)


・・・無念。

エラー吐きました。

だいぶ惜しいところまで来ましたが、**書き込みができません。**

あれ、書き込み周りのソフトは`Python`で書かれてるっぽい？

エラーメッセージを見ればわかりそう。

```Python

File"C:\Users\kohey\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\1.5.1/tools/uf2conv.py", line 235, in to_str
return b.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 141: invalid start byte
スケッチの書き込み中にエラーが発生しました

```

ふむふむ、なんか文字コードが悪さしてそうですな・・・

あとはどこの文字コードに引っかかっているのか分かれば対策できそう！

## 原因を解明しよう！

で、色々調べた結果。

**ドライブのボリューム名がカタカナ！**であることが原因らしい。
そんなところに罠があるなんて、環境構築って難しい！！

対策方法はいくつかありますね

### 対策
1. ボリューム名を変更する
1. コードを改変する

基本的に環境の修正に関して、より影響の少なそうな方法から試すのがベターだと、偉い人に教えてもらいました。

とりあえずコード見て行けそうなら、影響範囲も少ないだろうし、カッコよくコード弄って解決！
無理そうなら素直にボリューム名を変更する作戦に出ます。

とりあえずエラーの出ているファイルを見ましょう。

```
C:\Users\kohey\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\1.5.1/tools/uf2conv.py
```

該当コードはこれですな

```Python
def to_str(b):
    return b.decode("utf-8")
```

https://qiita.com/masakielastic/items/2a04aee632c62536f82c

こちらの記事を拝見したところ、`replace`すれば代替文字に置き換わるっぽいので試してみましょう。

```Python
def to_str(b):
    return b.decode("utf-8", errors="replace")
```

これでアカンかったらもうボリューム名変えます。

さぁ、やってみよう・・・！

## そして解決へ

さぁ、再びアップロードしてみましょうではありませんか・・・！

![katei6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/3d0f782f-2823-873e-2713-5bad4ab3472b.jpeg)

よっしゃぁ！大成功したようですね！！

![IMG_20210525_203255.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653352/0bcf8738-b2fa-ebc2-2a58-dd16d6c9d4e7.jpeg)

ようやく光を放った私のピコちゃん・・・！

ピンソケットがダサすぎますが、これから色々実験に付き合ってもらいましょう！！

# まとめ
### COMポート認識しないとき

ちゃんと公式のHello Worldまでやりましょう

### Windows10環境で書き込みエラーが出る時

[エラーが出てるスクリプトを修正する](#対策)

## おわりに
Raspberry Pi Pico を買って、Arduino IDEで開発したい！
しかしなぜかうまく行かない・・・他の記事見てもみんなすんなりイケてるのに！！！

そんな数時間前の私のような方へ

少しでも参考になれば幸いです。