Raspberry Pi PicoをLチカ＋ADC(温度センサー) (MicroPython)

# はじめに
Raspberry Pi Picoを手に入れましたー！！

早速Lチカしたいと思い、色々触っていたのですが、
やったことの備忘録として本記事を投稿します。
C言語は過去に触ったことがあるので、今回は触ったことのないMicroPythonを使いたいと思います。

# 環境
Windows 10 Pro(2021/02/14時点)
Thonny 3.3.3 

# セットアップ

まず、[公式サイト](https://www.raspberrypi.org/documentation/pico/getting-started/)からMicroPython用のファームウェアがダウンロードを行います。
「Getting started with MicroPython」を選択し、「Download UF2 file」からダウンロードができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/220ac58f-e68f-2f37-3644-bd01b10dd1fa.png)

この時、「Download UF2 file」のボタンの左にある場所で、イラストを用いたセットアップ方法が記載されています。

次に、Pico本体の表面に「BOOTSEL」と書かれているボタンを押しながらUSBケーブルを使いPCと接続します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/ba96da98-8b0f-3a59-4d3a-cfe04849cbf7.png" width=50%>

正常に接続ができると、通常のUSBメモリと同じように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/85d7eea3-6a75-d0e3-1256-7cbdd8239e2e.png)

…この段階で私は一度詰まりました。
　敗因は利用したUSBケーブルです。
　ちょうどこの日、ガチャガチャ景品の一部で同型のUSBケーブルを手に入れたので、これを使ったところ反応せず、
　家にある別のケーブルで試したのですが、こちらもだめでした。

　後日、千石電商で通信に対応したUSBケーブルを購入し無事にうまくいきました。

　当日ご対応いただいた店員さん、ありがとうございました。
　みなさんも利用するケーブルにはお気をつけください…。。

本筋に戻ります。

ダウンロードしたMicroPython用のファームウェア（UF2ファイル）を
接続した「RPI-RP2」の中にドラッグ＆ドロップすることで、自動でインストールが実行されます。
インストールが終わるとUSBマスストレージドライブの接続が解除されます。

ここまででPico本体の設定はセットアップは完了です。
Raspberry PiPicoを使用するたびにファームウェアを更新する必要はありません。
次の接続からは、BOOTSELボタンを押さなくてもコンピュータに接続できます。（not USBマスストレージドライブモード）

# Resetボタンを追加

Pico本体とUSBケーブルを抜き指しするにはコネクタ部分が心もとなかったり、
両手を使う必要があり、面倒な点があります。

そのため、Resetスイッチを取り付けました。
詳細については下記URLを参考にしてください。
https://qiita.com/jamjam/items/de7b050ccd108baa0947

私は開発する上でブレッドボードを利用したいため、
ピンヘッダのはんだ付けも行いました。
![Pico.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/efd3a91c-0476-7aa0-0342-3743190b5064.jpeg)
※配線が見にくかったので、その場にあった棒で押さえてます。

#Lチカ準備(IDE設定)

IDEはPython用であるThonnyを使います。
既にPicoに対応もされており、ある程度日本語も対応され、シンプルで直感的にわかりやすいUIでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/36ac0b57-ac85-211f-106b-81c1aa2ba503.png)
※DLは[こちら](https://thonny.org/)から

インストール後、thonny.exeから起動できます。
Thonnyウィンドウの右下隅に、現在使用しているバージョン(コードを実行するデバイス)が表示されます。

画面上部のツールタブから「options」を選び、
上段はPicoを、下段のPortにはPicoが接続されているPortを選択し、OKボタンを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/59ca1360-bd10-aae7-aa60-3c279cd4a919.png)

これでLチカ準備は完了です。
※開発環境構築中にVSCの拡張機能であるPico-Goも試してみたのですが、Picoへの実行はできたのですが、書き込みが上手くいきませんでした…。。


# Lチカ実施

Thonnyを立ち上げた際にタブ表示から<untitled>が開かれていることを確認してください。
（もしも左上にある緑色の「＋」(new)をクリックすることで表示されます。）

下記コードを入力し、画面上部にある▷ボタン(Run current script)を押してください。

```Python:＜untitled＞
from machine import Pin
import time

led = Pin(25, Pin.OUT)

while True: #無限ループ：true
    time.sleep(1.0) #1秒待機
    led.value(1)

    time.sleep(1.0) #1秒待機
    led.value(0)
```

その際、下記画像のようにファイルの保存先を聞かれますが、
上部の「This computer」を選択し、任意のファイル名を記入してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/392d9b00-006f-3a85-4076-2fe177c36995.png)

保存が完了すると実行が処理され、Lチカ達成です！！！
※コードの停止は画面上部にある□ボタン(Stop/Restart backend)で可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/29d3de28-0bca-f7d9-bbdd-2df5fcfa9be4.jpeg" width=50%>

※補足(2/19)
実施する際には「Thonny」(Picoと接続しているIDEは1つ)のみとしてください。
Lチカ作業中、VSCでPico-Goの利用も試していたのですが、
その際に下記エラーが表示され、接続できない問題が有りました。

```
Unable to connect to COM3: could not open port 'COM3': PermissionError(13, 'アクセスが拒否されました。', None, 5)

If you have serial connection to the device from another program, then disconnect it there first.

Backend terminated or disconnected. Use 'Stop/Restart' to restart.
```
要約：他のプログラムからデバイスにシリアル接続している場合は、まずそこから切断してください。


# 電源が供給されてる時にコードを実行したい

現時点ではResetボタンの押下や、電源を抜き差しして再起動をすると、
何も実行されていない状態となっています。

調べたところ、電源が供給されている時にコードを実行するには、下記条件が満たされている必要がありました。

* コードがRaspberry Pi Picoに保存されている
* ファイル名が「main.py」である

そのため、Lチカでの保存の際に選択した下記画面での選択を「Raspberry Pi Pico」を選択し、「main.py」というファイル名で保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/392d9b00-006f-3a85-4076-2fe177c36995.png)

# ADC（温度）センサーを実施

公式のSDKに紹介されていた温度センサーの実行コードです。
[Raspberry Pi Pico Python SDK](https://www.raspberrypi.org/documentation/pico/getting-started/)

```Python:ADC.py
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)
```

実行すると下記画像の通り、2秒ごとに温度を表示してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320059/ff19f16a-a021-3ba8-9f50-6555ce59da3c.png)

# 最後に
参考になった際にはLGTMを押していただけますと幸いです。
また、記載内容での誤りやツッコミどころがあった際にはコメントを頂けますと幸いです。
ここまで読んでいただきありがとうございました。