ESP32にMicroPythonファームウェアの書き込みを行う

# 概要
何番煎じか分かりませんが、最近、ESP32の使用頻度が高い為、作業メモとして使用する為に作成

## 作業環境
- Windows 10
- Python 3.7

## 作業手順
1. esptoolをpipでインストール
    - `pip install esptool`
2. ESP32とPCをMicroUSBで接続し、デバイスマネージャでポート番号を確認
    - 自身の環境では以下
        - ポート(COMとLPT)
            - Silicon Labs CP210x USB to UART Bridge (COM3)
3. ESP32はArudino用のファームウェアが書き込まれているため、ファームウェアを削除する
    - `esptool.exe --port COM3 erase_flash`
        - 上記実行後、本体のリセットボタンを押下後、本体のBOOTボタンを押下する
        - ※Connectingと出てきた後、上記を実行すると処理が進む
            - 実行したログは以下

        ```
        esptool.py v2.8
        Serial port COM3
        Connecting........_____....._____....._____....._____....._____....._____.
        Detecting chip type... ESP32
        Chip is ESP32D0WDQ6 (revision 1)
        Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
        Crystal is 40MHz
        MAC: cc:50:e3:96:1c:68
        Uploading stub...
        Running stub...
        Stub running...
        Erasing flash (this may take a while)...
        Chip erase completed successfully in 2.5s
        Hard resetting via RTS pin...
        ```

4. MicroPythonのESP32用ファームウェアをダウンロード
    - 使用したファームウェアは下記よりダウンロード
        - http://micropython.org/download/esp32/
5. MicroPythonのファームウェアを書き込み
    - `esptool.exe --chip esp32 --port COM3 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin`
        - 上記実行後、本体のリセットボタンを押下後、本体のBOOTボタンを押下する
            - ※Connectingと出てきた後、上記を実行すると処理が進む
        - 実行したログは以下

        ```
        esptool.py v2.8
        Serial port COM3
        Connecting........_
        Chip is ESP32D0WDQ6 (revision 1)
        Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
        WARNING: Detected crystal freq 41.01MHz is quite different to normalized freq 40MHz. Unsupported crystal in use?
        Crystal is 40MHz
        MAC: cc:50:e3:96:1c:68
        Uploading stub...
        Running stub...
        Stub running...
        Configuring flash size...
        Auto-detected Flash size: 4MB
        Compressed 1247280 bytes to 787794...
        Wrote 1247280 bytes (787794 compressed) at 0x00001000 in 70.3 seconds (effective 141.9 kbit/s)...
        Hash of data verified.

        Leaving...
        Hard resetting via RTS pin...
        ```

## 確認手順
- 確認方法
    - teratermで接続
        - 接続でシリアルを選択し、COM3を選択
        - [設定]-[シリアルポート]のボーレートを[115200]に設定
        - ESP32本体のリセットボタンを押下

- 実行時ログ

```
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:4844
load:0x40078000,len:9656
load:0x40080400,len:6216
entry 0x400806f0
I (457) cpu_start: Pro cpu up.
I (457) cpu_start: Application information:
I (457) cpu_start: Compile time:     Dec 20 2019 07:50:41
I (460) cpu_start: ELF file SHA256:  0000000000000000...
I (466) cpu_start: ESP-IDF:          v3.3
I (471) cpu_start: Starting app cpu, entry point is 0x40083600
I (0) cpu_start: App cpu up.
I (481) heap_init: Initializing. RAM available for dynamic allocation:
I (488) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (494) heap_init: At 3FFBA488 len 00025B78 (150 KiB): DRAM
I (501) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (507) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (513) heap_init: At 40092D6C len 0000D294 (52 KiB): IRAM
I (520) cpu_start: Pro cpu start user code
I (202) cpu_start: Chip Revision: 1
W (203) cpu_start: Chip revision is higher than the one configured in menuconfig. Suggest to upgrade it.
I (206) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
MicroPython v1.12 on 2019-12-20; ESP32 module with ESP32
Type "help()" for more information.
>>>
```

### 参考資料
- [ESP32をPythonで動かすためにMicroPythonをWindowsで入れる](https://qiita.com/nobody_gonbe/items/1c9211e0f889988a98ec)
- [ESP32 での MicroPython の始め方](https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/tutorial/intro.html#powering-the-board)
- [MicroPython REPLプロンプトの表示](https://micropython-docs-ja.readthedocs.io/ja/latest/pyboard/tutorial/repl.html)
- [ギリギリまでお手軽にMicroPythonでIoTやるための手引書](https://qiita.com/moomooya/items/ea30fe1113b21ebc9329)