電子工作メモ

# 電子工作メモ

Freenove というところのRaspi Pico 用のアルティメットスターター キットを買ったので、少しずつ電子工作の勉強をする。

## Picoについて

**※TODO:完全ガイドでまとめておく**

- 電源
  - pico(RP2040) は 3.3v で動作する。
  - 給電方法
    - USBに給電 : 自動的に5Vで給電
      - VBUSは直結されているので5Vが出る
      - VSYSも5Vがでる
    - VBUSに給電: 5Vを給電する
      - **※USB端子と直結されているので電流がUSBに逆流する可能性があり、PC等を壊す可能性があるのでUSBを使う場合はVSYSを使うこと。**
    - VSYSに給電: 1.8～5.5Vで給電する（コンバータが内蔵されているため）
      - **USBを同時に使用するときに注意。USBからも給電されるため、VSYS側の電源に電流が流れるため、VSYS電源を切っておくこと**
      - VSYSはpico動作用の電圧3.3Vしか生成しないので、**VBUSに5Vが出力されないことに注意**

  - VBUS: USB端子とつながっているので、USB給電の場合に5Vが出る。
  - VSYS: USB端子との間にダイオードが入っており、USBに電流が逆流しないようになっている。
  - 3V3 : 3.3V が供給される端子

- 機能
  - ADC : アナログ信号
  - PWM : パルス幅変調信号
  - UART: シリアル通信
  - SPI : シリアル通信
  - I2C : シリアル通信

## 参照

- [Freenove Raspberry Pi Pico 用のアルティメットスターター キット](https://www.amazon.co.jp/dp/B09H2SV5XB/ref=twister_B09H2VGCL4?_encoding=UTF8&psc=1)
- [Freenove Ultimate Starter Kit for RaspberryPiPico Docs](https://github.com/Freenove/Freenove_Ultimate_Starter_Kit_for_Raspberry_Pi_Pico)

- [RaspiPico](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html)
    - [Raspberry Pi Pico をセットアップしよう](https://datasheets.raspberrypi.com/pico/getting-started-with-pico-JP.pdf)
    - [Micro Python](https://www.raspberrypi.com/documentation/microcontrollers/micropython.html)
    - [RP2040を使用したハードウェア設計](https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040-JP.pdf)

### MicroPython

- [Quick reference for the RP2](https://docs.micropython.org/en/latest/rp2/quickref.html)
    - [machine](https://docs.micropython.org/en/latest/library/machine.html): ハードウェアに関係する関数
    - [time](https://docs.micropython.org/en/latest/library/time.html): 時刻に関係する関数
    - [Pin](https://docs.micropython.org/en/latest/library/machine.Pin.html): GPIO ピンを制御する関数

## メモ

まずはMicroPythonで始める。

- [StartHere](https://github.com/Freenove/Freenove_Ultimate_Starter_Kit_for_Raspberry_Pi_Pico/blob/master/Start%20Here.pdf) を読む

  - ３種類の言語で試せる
    - C: IDEとして Arduino IDE を使う
    - Processing
    - MicroPython: IDEとして Thony を使う

- [スターターキットのPythonドキュメント](https://github.com/Freenove/Freenove_Ultimate_Starter_Kit_for_Raspberry_Pi_Pico/blob/master/Python/Python_Tutorial.pdf)を読む。

- 開発環境構築
  - Thonyインストール
    - 「実行」-「インタプリタ設定」
      - インタプリタ「MicroPython(Raspberry Pi Pico)」を選ぶ
      - ポートは pico を認識しているCOMポートか自動検出を選ぶ
    - 特にエラーが出てなければOK

        ```python
        // シェルに以下を記述して動作すればOK
        print("Hello World!")
        ```

  - MicroPythonのファームウェアをpicoに書き込む
    1. uf2 ファイルをダウンロードする。
       bootselボタンを押しながらpicoを起動すると、USBメモリのように見えるので、エクスプローラでuf2ファイルをコピーするだけ。
       [※参照](https://www.raspberrypi.com/documentation/microcontrollers/micropython.html)

    1. Thonyでインストール
      「実行」-「インタプリタ設定」から"Install or update MicroPython" を起動。
       bootselボタンを押しながらpicoを起動する。
       Target volume に pico のドライブを指定し、MicroPython variant に "Raspberry Pi・Pico/Pico H" を選択。バージョンは最新を選択。

  - 実行
    - pico の ルートに、"main.py" というファイルを保存すると起動時に実行される。

### その他

- [74HC595　8ビットシフトレジスタ](/items/7a7a7261ed058514e743)
- [7セグメントLED](/items/4a36733f2fa6b3f029d8)
- [MicroPython](/items/bab2f9998437f93307c4)
- [74HC4511　7セグLED用デコーダIC](/items/d6b1e2c883763e24fb2d)
- [フリップフロップ](/items/43ebf408cce277e4f453)
- [74HC193　同期型 Up-Down カウンター](/items/dde20d2aa055df991d27)
- [IC555](/items/7d83525e82497e7dfe2a)

## 動作確認

### 00.1_main/main.py

これを pico のトップフォルダにおいておけば、トップフォルダの py ファイルを実行してくれる。

```python
import uos as os
import uerrno as errno
iter = os.ilistdir()
IS_DIR = 0x4000
IS_REGULAR = 0x8000
index = 0

try:
    while True:
        # トップフォルダのファイルとディレクトリを調べる 
        entry = next(iter)
        filename = entry[0]
        file_type = entry[1]
        # 自分は無視
        if filename == 'main.py':
            continue
        else:
            # ディレクトリは無視
            if file_type == IS_DIR:
                continue
            # ファイルの場合は実行する
            else:
                exec(open(filename).read(), globals())
        # 100回まで実行する
        if index == 100:
            break
        index += 1
except StopIteration:
    pass
```

### オンボードLED

- [01.1_Blink/01.1_Blink.py](/items/b0b46d1f3c66a63b8698)

### 一般的なLED

- [01.2_Blink/01.2_Blink.py](/items/613039a6fbf9d77b2ee8)

### ボタンとLED

- [02.1_ButtonAndLed/02.1_ButtonAndLed.py](/items/0df4efe22ef2d364fc76)

### テーブルランプ

- [02.2_TableLamp/02.2_TableLamp.py](/items/c56c30d356e1765d1c0e)

### LEDバー

- [03.1_FlowingLight/03.1_FlowingLight.py](/items/88853d940af59be537f4)

### PWMを使ったLED

- [04.1_BreatheLight/04.1_BreatheLight.py](/items/fbe4dd6ad0efdbbd0800)

### RGBLED

- [05.1_RandomColorLight/05.1_RandomColorLight.py](/items/9eb98e0a708137139e1b)

### NeoPixel

- [06.1_Neopixel/06.1_Neopixel.py](/items/d3c2d63716fed7b8c322)
- [06.2_Rainbow_light/06.2_Rainbow_light.py](/items/615f68495620c1478f87)

### ブザー

- [07.1_Doorbell/07.1_Doorbell.py](/items/7109beca6792ce936c1c)

### シリアル通信(UART)

- [08.1_Serial_Print/08.1_Serial_Print.py](/items/c7b9841fb1f104083f04)

### 流れる水のように光るLED

- [14.1_FlowingWaterLight/14.1_FlowingWaterLight.py](/items/06fa78e59cec7f82e98c)

### マトリクス LED

- [16.1_LED_Matrix/16.1_LED_Matrix.py](/items/be9cc49aae5e40bac425)

### ADコンバータ

- [09.1_AnalogRead/09.1_AnalogRead.py](/items/1ca969fbd155ddbce0bc)