Raspberry Pi Picoを使ってみた。

## Raspberry Pi Pico
Raspberry Pi Pico(以下Pico)が手元に届いたので、火入れついでにLチカまでやって見たので、その時の作業手順のメモです。
使用したのはPicoとMacです。

Picoは小さくて、MacのSHIFTキーを一回り大きくしたくらいの大きさです。
基盤上にLED1つと温度センサーが載っています。
通信手段はUSBだけです。

![147255899_172045204398919_7968048055358103462_n.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/90af772d-30e4-d7bd-e7bb-42fe2f42dd26.jpeg)

PicoとMacの接続に使ったのは以下のケーブルです。10cmだとちょっと短いかも知れません。
自分は、ケーブルの先にPicoがぶらぶらするのが嫌なのでこの長さにしましたが。
[アイネックス USB Type-Cホストケーブル C - Micro-Bリバーシブル 両端L型 10cm U20CU-LN01T](https://www.amazon.co.jp/gp/product/B081QLBDFJ/)


Picoの開発環境はMicroPythonのインタプリタかC/C++になるようで、開発環境に合わせてそれ用のファームを焼くようです。

## microPython用のファームを焼く
まずPicoとMacをUSB接続するとマスストレージとして認識しRPI-RP2というフォルダがデスクトップ上に表示されます。
![Screenshot 2021-02-06_06-27-44-152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/94570432-c4aa-57a8-3448-06f82e1812ef.png)

RPI-RP2フォルダを開くとINDEX.HTMというファイルがあるのでブラウザで開きます。
![Screenshot 2021-02-06_06-28-01-332.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/60a03c6f-262d-4875-4753-9308448c30ae.png)

ブラウザで開くと下のようなPicoのサイトへ飛びます。
![Screenshot 2021-02-06_06-28-48-652.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/e4b9f33a-a167-6f6e-7fc5-cedcc0b54dcd.png)

開いたサイトを下に進むと３つのタブが表示されるので、赤枠の「Getting started with MicroPython」を選択します。
![Screenshot 2021-02-06_06-34-25-294.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/c3ad452b-3a2c-c05c-7e7d-572790789bff.png)

タブを選択するとファームのダウンロードサイトへのリンクやファームウェアのダウンロードボタンがあるので、クリックしてファームをダウンロードします。
![Screenshot 2021-02-06_06-34-50-362.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/31b1fec9-e46b-ff99-50b4-cb478549cc60.png)

今回は、ダウンロードサイトに行き、latestのファームをダウンロードしてきました。
※ちなみにダウンロードボタンを押下したところ、latestの１つ前のバージョンのファームがダウンロードされました。
![Screenshot 2021-02-06_06-30-04-269.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/2b0da5d4-9de0-7bc3-a43f-3abadd93047c.png)

ダウンロードサイトにファームがダウンロードされました。
![Screenshot 2021-02-06_06-36-31-162.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/df4feb16-7bfe-ef09-c0ea-30edd909c505.png)

ダウンロードされたファームをRPI-RP2にコピーします。
![Screenshot 2021-02-06_06-36-54-514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/f20c21e8-227a-622f-b5e2-5c6e66be2a2f.png)

コピーが終わると以下のメッセージが表示されますが、問題ありません。
![Screenshot 2021-02-06_06-37-30-086.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/fbc5b29c-ccab-1321-ea92-e001c46b27ca.png)

MicroPythonのファームを焼くとシリアルで接続されるため、マスストレージとして認識されなくなります。
（USBを抜き差ししてもフォルダが表示されなくなるとちょっと焦ります。）
もし、他のファームを焼くためにファームウェアを焼きたいときは、本体のボタンを押下しながらUSB接続するとマスストレージとして認識されます。
![Screenshot 2021-02-06_06-34-50-362 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/d2c22c76-3a40-ea2c-eed1-0659652d0861.png)

## MicroPythonでLチカをしてみる。
PicoとMacを接続してターミナルを起動します。
ターミナル上でPicoの接続状況を確認します。

```
% ls /dev/tty.usbmodm*
/dev/tty.usbmodem0000000000001
```

接続先が確認できたらscreenを起動します。

```
% screen /dev/tty.usbmodem0000000000001 115200
```

screenが起動したら、Lチカのプログラムを打ち込みます。

```
>>> import machine
>>> import utime
>>> led = machine.Pin(25, machine.Pin.OUT)
>>> while True:
...     led.value(1)
...     utime.sleep(1)
...     led.value(0)
...     utime.sleep(1)
...     
...     
... 
```

打ち込み終わるとPicoのLEDがチカチカ光ります。

## Visual Studio Code
Visual Studio Codeには、Raspberry Pi Pico用の拡張機能があるようです。
こちらを使えば、ターミナルからの操作ではなく、Visual Studio CodeのコンソールからmicroPythonが使えるようです。

![Screenshot 2021-02-06_06-51-47-363.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/d3870f58-5b6e-b49e-99ca-fa2bff4a9cd2.png)

コンソールの画面はこんな感じです。
![Screenshot 2021-02-07_12-52-15-685.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/ffde520d-96a9-3c6a-355d-a7b52ccef64f.png)

## 温度計測
Picoには温度センサーが載っているので、温度センサーの値をMicroPythonで取得してきます。
サンプルは、公式ドキュメントに出ていました。
https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-python-sdk.pdf

```python

import machine
import utime

sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)

while True:
    reading = sensor_temp.read_u16() * conversion_factor
    
    temperature = 27 - (reading - 0.706)/0.001721
    print(temperature)
    utime.sleep(2)
```

上記のサンプルを実行すると２秒ごとに温度センサーの値を温度に変換して表示します。
VSCodeだと以下のような形になります。
サンプルを打ち込んでステータスバーのところになる[Run]をクリックするとスクリプトが実行されます。
![Screenshot 2021-02-07_13-48-49-748.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/5c858345-0848-bd7b-49d8-05ab01ced175.png)