ラズパイ初心者がRaspbery Pi Picoを使って焦電型赤外線(人感)センサーを動かす

# 目的
Raspbery Pi Picoを使って、人感センサーを動かす。

# 機材
- MacBook Air
- [Raspbery Pi Pico](https://sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5YEC)
- [焦電型赤外線(人感)センサーモジュール SB412A](https://www.murata.com/ja-jp/products/sensor/infrared/overview/basic/note)
- [ジャンパーワイヤ(オス-オス)](https://akizukidenshi.com/catalog/g/g105159/)

焦電型赤外線(人感)センサーについては以下の記事も参考にしてください。

https://www.murata.com/ja-jp/products/sensor/infrared/overview/basic/note

私は[千石電商](https://www.sengoku.co.jp/index.php)にて、ピンヘッダがすでにハンダづけされているRaspbery Pi Picoを購入しました。また、[秋月電子電商](https://akizukidenshi.com/catalog/default.aspx)で人感センサーとジャンパーワイヤを購入しました。

# 環境構築
以下の記事を参考に、環境構築を行いました。

https://qiita.com/SamAkada/items/13cf63b6fc8a8198c160

https://www.hoshicolumn.com/raspberrypipico_kaihatu/

https://qiita.com/Toshiaki0315/items/dca96c71fee2c06ea325

## Thonny
VS Codeなど、すでに自分で用意してある開発環境を使わない場合は、PythonのIDE(統合開発環境)である[Thonny](https://thonny.org/)をPCにダウンロードします。
自分はVS Codeを使用しておりpython3などを嗜んでいますが、そこにMicroPythonを新たに導入して、ごちゃごちゃになるのが嫌だったので(初心者ゆえ)、Thonnyを使いました。


以下のページから自分のPCにあったダウンロードします。今回はMac用のThonnyをダウンロードします。

https://thonny.org/

![pic1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/2038ec5c-31b8-770a-95cf-f341b113a7c9.png)

インストール後は指示に従って設定していきましょう。
インストールが全て終わると、Launchpadに以下のようなアイコンが出現します。

![pic2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/f454b97c-71ae-a52e-2188-cadd1cd78a62.png)

起動すると言語などの設定画面が出てくるので、自分に合わせて設定して進みましょう。
私の場合はLanguageを日本語に、Initial settingsをRaspberry Pi (simple)にしました。

![pic3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/61594868-6a89-dd58-4807-9a6ff8ed6df4.png)

# Raspbery Pi Picoのセットアップ
事前にダウンロードしたMicroPythonを、Raspbery Pi Picoに書き込みます。
Raspbery Pi Pico上の"BOOTSEL"と書いてある白いボタンを押しながら、USBケーブルでMacに繋ぎます。

![IMG_6628.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/4fceac56-af08-d8d9-d369-c9abe469118a.jpeg)

![IMG_6629.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/11dc3b39-0aa6-8c72-79a6-df7b4d4a89d5.jpeg)

ちなみに私はUSBハブに[UGREEN](https://ugreenjapan.com/product/ugreen-usb-c%e3%83%8f%e3%83%96-macbook-pro-air%e5%b0%82%e7%94%a8-6-in-2/)のものを使っています。ここはなんでも良いですが、参考までに。
すると、MacでRaspbery Pi Picoにアクセスできるようになります。Finder上でRPI-RP2という名前で表示されます。

![スクリーンショット 2024-04-07 8.57.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/8085b6f0-32a9-f1e7-ce18-9de69feae1b0.png)

ここでThonnyの　Tool > Option >Interpreter を開き、右下のInstall or update MicroPythonより、インストールを実行します。

![Thnny.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/6a7033c1-d390-7f7d-b145-625ce1380641.gif)

不正な取り出しのメッセージが来ますが、これはRaspbery Pi Picoが再起動したためなので気にする必要はありません。

![スクリーンショット 2024-04-12 14.43.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/c186b98c-945c-9d02-28bc-cc45be7fc614.png)

# プログラミングの実行
以下、Thonnyで操作していきます。

Thonnyの画面の左上にある＋マークから新規ファイルを作成します。
今回は、焦電型赤外線(人感)センサーを動かしたいので、以下のようなプログラムを書きました。
これはChat GPTに指導してもらいました。

```Python:main.py
# モジュールのインポート
import machine
import utime
import uos

PIR_PIN = 15

pir = machine.Pin(PIR_PIN, machine.Pin.IN)

led = machine.Pin(25, machine.Pin.OUT)
 
def format_time(timestamp):
    year, month, day, hour, minute, second, *_ = timestamp
    return "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(year, month, day, hour, minute, second)

def save_to_file(data):
    if not "visitor_data.txt" in uos.listdir():
        with open("/visitor_data.txt", "w") as file:
            file.write("timestamp,status\n")
    with open("/visitor_data.txt", "a") as file:
        file.write(data)

while True:
    presence = "presence" if pir.value() else "absence"
    timestamp = utime.localtime()
    current_time = format_time(timestamp)
    data_row = "{},{}\n".format(current_time, presence)
    save_to_file(data_row)
    
    # presenceが"presence"の場合にLEDを点灯させる
    if presence == "presence":
        led.high()
        utime.sleep(1)  # LEDを1秒間点灯させる
        led.low()
    else:
        led.low()  # presenceが"absence"の場合はLEDを消灯させる
    
    utime.sleep(5)
```

プログラムが書けたら、コードを保存します。Thonnyの ファイル > 保存 よりコードを保存します。保存場所は今回、Raspbery Pi Picoとします。

![thonny.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639393/58405e01-bc39-9d52-3752-ea5b120f3769.gif)

main.pyと名付けておくことにより、PCではなくコンセントなどの外部電源に繋いだとき、自動でmain.pyが実行されます。

これで下準備は完了です。

パソコンから取り外し、外部電源に繋げば、勝手にプログラムが起動し、5秒後ごとに
- 人を感じるとLEDが点灯、presenceと記録
- 人がいなければ、LEDは点灯せず、absenceと記録します

そのデータはtxtデータとして、visitor_data.txtという名前で記録されます。

記録を取り出したり、プログラムをいじる場合は、再度繋ぎ直し、Thonny上でプログラムの実行を停止すると、Raspbery Pi Pico内のファイルにアクセスできるようになります。

以上