UbuntuのVSCodeにRaspberry Pi Picoの開発環境を構築する(MicroPython編)

# 使用した環境
- OS:Ubuntu 20.04.2 LTS
- Visual Studio Code 1.52.1

# 2021/02/05 追記1

[公式サイト](https://www.raspberrypi.org/documentation/pico/getting-started/)からMicroPython用のファームウェアがダウンロードできるようなのでそちらからダウンロードして書き込むことも可能です。
その場合、Pico SDK、Picotool、MicroPythonのビルドは不要になるので[次の手順](https://qiita.com/Fal318/items/8488c60649a334d16994#devttyacm0%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%89%E6%9B%B4)はこちらになります。


# ~~2021/02/05 追記2~~
~~2021/02/05現在、Visual Studio Codeのバージョンが最新の1.53場合はPymakrが正常に動作しないようです。1.53を使っている場合は[ここ](https://code.visualstudio.com/updates/v1_52)から1.52をインストールすることで解決するようです。~~

# Pico SDKのダウンロード

```bash
sudo apt install git

cd ~/ && mkdir pico && cd pico
git clone -b master https://github.com/raspberrypi/pico-sdk.git

cd pico-sdk
git submodule update --init

cd ..
git clone -b master https://github.com/raspberrypi/pico-examples.git
```
# Picotoolのビルド

```bash
sudo apt install libusb-1.0-0-dev

cd ~/pico
git clone -b master https://github.com/raspberrypi/picotool.git

cd picotool && mkdir build && cd build
export PICO_SDK_PATH=~/pico/pico-sdk
cmake ../
make
sudo cp picotool /usr/local/bin/
```

# PATHを通す
.bashrcに以下を追記

```bash:.bashrc
export PICO_SDK_PATH=$HOME/pico/pico-sdk
export PICO_EXAMPLES_PATH=$HOME/pico/pico-examples
export PICO_EXTRAS_PATH=$HOME/pico/pico-extras
export PICO_PLAYGROUND_PATH=$HOME/pico/pico-playground
export PICO_SDK_PATH=$HOME/pico/pico-sdk
export PICO_EXAMPLES_PATH=$HOME/pico/pico-examples
export PICO_EXTRAS_PATH=$HOME/pico/pico-extras
export PICO_PLAYGROUND_PATH=$HOME/pico/pico-playground

```
# MicroPythonのビルド

```bash
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential

cd ~/
git clone -b master https://github.com/micropython/micropython.git

cd micropython
git submodule update --init -- lib/pico-sdk

cd lib/pico-sdk
git submodule update --init

cd ../..
make -C mpy-cross

cd ports/rp2
make
```
# MicroPythonの書き込み

```bash
cd ~/micropython/ports/rp2/build
sudo picotool load firmware.uf2
```

# /dev/ttyACM0のパーミッションの変更

```bash
sudo vim /lib/udev/rules.d/50-udev-default.rules
```
以下のように変更

```bash:50-udev-default.rules
(変更前)
KERNEL=="tty[A-Z]*[0-9]|ttymxc[0-9]*|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"

(変更後)
KERNEL=="tty[A-Z]*[0-9]|ttymxc[0-9]*|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0666"
```
変更を反映させる

```bash
sudo udevadm control --reload-rules
```
# Pymakrのインストール
NodeJSのインストール

```bash
sudo apt install nodejs
```
Pymakrのインストール
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378179/1c5ff9bc-5ef7-1141-1679-ecae9e75dd38.png)

# Pymakrの設定

pymakr.jsonを開き以下のように変更

```json:pymakr.json
{
	"address": "/dev/ttyACM0",
	"username": "",
	"password": "",
	"sync_folder": "",
	"open_on_start": false,
	"safe_boot_on_upload": false,
	"py_ignore": [
		"pymakr.conf",
		".vscode",
		".gitignore",
		".git",
		"project.pymakr",
		"env",
		"venv"
	],
	"fast_upload": false,
	"sync_file_types": "py,txt,log,json,xml,html,js,css,mpy",
	"ctrl_c_on_connect": false,
	"sync_all_file_types": false,
	"auto_connect": false,
	"autoconnect_comport_manufacturers": [
		"Pycom",
		"Pycom Ltd.",
		"FTDI",
		"Microsoft",
		"Microchip Technology, Inc."
	]
}
```

# 実際に書き込んでみる
以下のようなPythonファイルをVSCode上で作成し

```python:main.py
from machine import Pin, Timer

led = Pin(25, Pin.OUT)
tim = Timer()


def tick(timer):
    global led
    led.toggle()


tim.init(freq=2.5, mode=Timer.PERIODIC, callback=tick)
```

VSCodeのウィンドウの下の方にあるUploadというボタンからアップロードする
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378179/42a3204d-c073-0af5-7c03-115a8c861789.png)

LEDが点滅すれば成功です

## 参考

- [Raspberry Pi Pico Python SDK](https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-python-sdk.pdf)
- [Getting started with Raspberry Pi Pico](https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf)
- [[備忘録]ESP32-VSCode-microPythonでの開発環境の構築](https://qiita.com/kotaproj/items/b53006aef9d04053a5ee)
- [USBシリアル接続時に自動で書込権限を付与する（ubuntu,/dev/ttyACM0） - 技術メモ集 ](https://www.robotech-note.com/entry/2018/07/23/ubuntu%E3%81%A7USB%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%EF%BC%88/dev/ttyACM0%E7%AD%89%EF%BC%89%E6%8E%A5%E7%B6%9A%E6%99%82%E3%81%AB%E8%87%AA%E5%8B%95%E3%81%A7%E6%9B%B8 )