ESP8266のmicropythonからDFPlayer miniを使う

# はじめに

　本記事はESP8266を使って天気予報読み上げスピーカーが動くまでの過程を記録したものです。興味本位にmicropythonを使ったことで無用な苦労をしたので、同じ轍を踏まないように記録を公開します。

# 準備する
- 前回の記事　[ESP8266でmicropythonを使う](https://qiita.com/gonbe_sama/items/2f96abfe237e7172ee93)　を参照ください。

# 配線する
[LOLIN D1mini](https://www.wemos.cc/en/latest/d1/d1_mini.html)　の場合
(ESP-WROOM-02に変更予定)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064472/ae77f70d-6661-7c1f-83c0-72ec827dcf2f.png)

|no|D1 mini Pin|DFPlayer Pin|備考|
|:-- |:-- |:-- |:-- |
|1|5v|vcc|3.3vだと動かなかったので5V|
|2|G|GND||
|3|D4|RX|ESP8266のUART1はTXのみ有効なためRXは未接続※1|
|4|-|SPK_1|スピーカーに接続|
|5|-|SPK_2|スピーカーに接続|

※1 micropython公式の[ESP8266のUART (シリアルバス)](https://micropython-docs-ja.readthedocs.io/ja/latest/esp8266/quickref.html)を参照しました。

タクトスイッチはGPIO14(D5)に接続しました。

### 3. 確認する

配線が完了したらESP8266 + DFPlayerの動作確認をします。

#### 3.1. [ここ](https://github.com/lavron/micropython-dfplayermini)からmicropython-defplayerminiをダウンロードします。
（lavronさんに感謝！）

#### 3.2. ライブラリはEPS32用なので少しだけ手を加えます。
ESP8266のUARTはPIN指定ができないようです。

```dfplayermini.py
        #self.uart = UART(1, 9600, tx=pin_TX, rx=pin_RX)
        self.uart = UART(1, 9600)
```

#### 3.3. SDカードに適当なmp3ファイルもしくはwavファイルを入れてDFPlayerにセットします。

#### 3.4. WebREPLのSend a File機能を使ってESP8266にdfplayermini.pyを転送します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064472/e34eb0d3-7d47-de04-d8eb-5b487cde0716.png)

#### 3.5. ファイル転送を確認します。

```
>>> uos.listdir()
['a.py', 'boot.py', 'dfplayermini.py', 'webrepl_cfg.py']    
```
#### 3.6. ライブラリを動作させます。

pin番号を指定していますが先の修正でライブラリ内では未使用です。気になる場合はコンストラクタの引数を削除してください。

```
>>> from dfplayermini import Player
>>> music = Player(pin_TX=17, pin_RX=16)
>>> music.volume(15)
>>> music.play(1)
```

#### 3.7. 無事音が鳴りました！

続いてタクトスイッチの動作を確認します。

#### 3.8. WebREPLの挿入モードを使って下記のコードをコピペします。
Ctrl + Eで挿入モード開始、Ctrl + Dで保存終了です。

```test.py
from machine import Pin

def test():
    p0 = Pin(14, Pin.OUT)
    while True:
        p0_v = p0.value()
        if p0_v == 1:
            print("ON")
            break
```

#### 3.9. コピペした関数を実行します。

```test.py
>>>                                                                             
paste mode; Ctrl-C to cancel, Ctrl-D to finish                                  
=== from machine import Pin                                                     
===                                                                             
=== def test():                                                                 
===     p0 = Pin(14, Pin.OUT)                                                   
===     while True:                                                             
===         p0_v = p0.value()                                                   
===         if p0_v == 1:                                                       
===             print("ON")                                                     
===             break                                                           
>>> test()                                                                      
ON                                                                              
>>>                                                                             
```

#### 3.10. タクトボタンを押下するとOKを表示して終了します。

#### 3.11. これでボードの確認は完了です。

これでハード側の準備は完了しました。

次回はソフトの作成についての記事を投稿します。