PyCharmでRaspberry Pi Picoを操作する

## 概要
[Raspberry Pi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/)に[MicroPython](https://micropython.org/)をインストールし[PyCharm](https://www.jetbrains.com/ja-jp/pycharm/)から操作するための手順をまとめました。


## MicroPythonのインストール
Raspberry Pi PicoへのMicroPythonインストールは簡単で、まず[公式サイト](https://www.raspberrypi.com/documentation/microcontrollers/micropython.html#drag-and-drop-micropython)から`downloadable UF2`をクリックしてUF2ファイルをダウンロードします。

次に、Raspberry Pi Picoの`BOOTSEL`ボタンを押しながらPCに接続すると、USBドライブとして認識されるのでダウンロードしたUF2ファイルをコピーすれば完了です。

先ほどのページにアニメーションでも説明されています。


## MicroPythonプラグインのインストール
PyCharmからRaspberry Pi Picoに接続できるように、MicroPythonプラグインをインストールします。

設定のプラグインタブで `micropython` を検索すれば見つかると思います。

![2916d0f83d5bf868c11a4eb60f7dda79.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62253/095d96d2-7546-a85f-b4c3-29c38957d42f.png)


## PyCharmプロジェクトの設定
新しいプロジェクトを開始し、設定のLanguages & FrameworksにあるMicroPythonを有効化します。

デバイスタイプはRaspberry Pi Pico、デバイスパスは複数のRaspberry Pi PicoやArduinoを接続していなければ、自動検出で問題ないでしょう。

![36114f0bc252c9e0f28093f7ca5388d5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62253/2681d093-daaf-a823-86b9-f892a3e97d40.png)


動作確認用に`main.py`を作成し、次のサンプルコードを入力します。

```python:main.py
from machine import Pin
import time

led = Pin(25, Pin.OUT)
while True:
    led(1)
    time.sleep(1)
    led(0)
    time.sleep(1)
```

ファイルを保存すると、ライブラリが見つからないという警告が出るので、Missing required MicroPython packagesをクリックしダウンロードしてもらいます。

![d381fc54392ad434b7b7b251cab1fbd1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62253/4168f895-3508-fddc-083f-913e968fe3db.png)

この時、パッケージ管理にPoetryを使っている場合、`adafruit-ampy`の最新バージョンがインストールされることがあるのですが、v1.05以上v1.1未満でなければならないので注意が必要です。

`pyproject.toml` が次のようになっていたら、

```toml:pyproject.toml
[tool.poetry.dependencies]
python = "^3.9"
pyserial = "^3.5"
docopt = "^0.6.2"
adafruit-ampy = "^1.1.0"  # v1.05以上v1.1未満でない
```

依存関係を下記のように修正しておきましょう。

```diff_toml:pyproject.toml
  [tool.poetry.dependencies]
  python = "^3.9"
  pyserial = "^3.5"
  docopt = "^0.6.2"
- adafruit-ampy = "^1.1.0"
+ adafruit-ampy = ">=1.0.5,<1.1"
```

## スクリプトファイルの転送と実行
ファイルツリーで`main.py`を右クリックすると次のようのコンテキストメニューが表示されると思います。ここで、`Run 'Flash main.py'`を実行すると `main.py`がRaspberry Pi Picoへ転送されます。

![f44889a89e7e6ffa7ec80242f57ee642.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62253/9ea0a9a3-54ee-cb15-8f06-6183a451a062.png)

ファイルの転送が完了すれば、Runウインドウに下記のようなログが表示されます。

```shell-session
Connecting to /dev/cu.usbmodem144101
Uploading files: 0% (0/1)
/Users/junpei/src/github.com/jkawamoto/pipico/main.py -> main.py
Uploading files: 100% (1/1)
Soft reboot
```

:::note
Soft rebootと表示されていますが、私の環境では再起動されませんでした。
手動で再起動するには、Tools→MicroPython→MicroPython REPLからREPLを起動しCTRL-Dを入力します。
:::

再起動の後、転送したファイルが実行されればボード上のLEDが点滅します。

## 以降の開発
以上でコンテキストメニューの`Run 'Flash ファイル名'`からファイルが転送できるようになりました。

以降はPyCharm上で開発し、必要に応じてボードに転送し実行できます。個別のファイルだけでなくフォルダ単位でも転送できます。

転送したすべてのファイルを削除するには、Tools→MicroPython→Remove All Files from MicroPython Device実行します。
なお、転送した個別のファイルを削除する方法は提供されていません。`os.remove`を使ったスクリプトを書くか、REPLから削除する必要があります。


## 参考
- [Getting Started with the Pi Pico and PyCharm](https://themachineshop.uk/getting-started-with-the-pi-pico-and-pycharm/) 
- [Raspberry Pi Pico - Getting Started and programming in PyCharm](https://www.youtube.com/watch?v=QywUT3f-_7w)