M5Stack用MIDIシンセサイザユニットで音を鳴らす：M5Stack CoreS3 SE ＋ M5Stack CoreS3用バッテリーボトム の組み合わせ（M5StickC Plus2 でも試す）

M5Stack用MIDIシンセサイザユニットのサンプルの 1つを使って、ピアノの音を鳴らしてみたという話です。

それを試している時の様子は以下のとおりです。

https://x.com/youtoy/status/1812779019202711859

この時、デバイスは、「M5Stack CoreS3 SE ＋ M5Stack CoreS3用バッテリーボトム の組み合わせ」を利用し、開発には Arduino IDE を使っています。

## 今回使うデバイス
### M5Stack用MIDIシンセサイザユニット
まずは、音を鳴らすために使うデバイス「M5Stack用MIDIシンセサイザユニット」についてです。

このデバイスは、自分は以下から入手しました。

●M5Stack用MIDIシンセサイザユニット（SAM2695） — スイッチサイエンス
　https://www.switch-science.com/products/9510

以下は、公式のドキュメント・GitHub　のリポジトリです。

●m5-docs
　https://docs.m5stack.com/en/unit/Unit-Synth
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5420a9dd-baf9-374f-3c71-45ab2aa8655d.png)

●m5stack/M5Unit-Synth
　https://github.com/m5stack/M5Unit-Synth/tree/main

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d9987343-f3cf-6d7a-2a3a-446dd1c859f8.png)

#### Arduino IDE で使うライブラリ
今回の開発で使う Arduino IDE では、以下のライブラリを使います。

●M5UnitSynth - Arduino Reference
　https://www.arduino.cc/reference/en/libraries/m5unitsynth/

ライブラリの最新バージョンは「1.0.1」のようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6a73823c-2d6a-4af7-efa6-339df73c36c7.png)

#### 利用するポート
今回使う「M5Stack用MIDIシンセサイザユニット」のポートの種類について補足しておきます。公式ドキュメントで示されているとおり「RORT.C.UART」になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/39e40e95-7d2e-d871-099a-35baef535998.png)

### ユニットを接続するデバイス
上記の M5Stack用MIDIシンセサイザユニットを接続するデバイスについても書いておきます。

M5Stack用MIDIシンセサイザユニットを使うには、上記のとおり「RORT.C.UART」に対応している必要があります。

自分が持っているデバイスで、これに対応したものはいくつかありますが、今回は「M5Stack CoreS3 SE ＋ M5Stack CoreS3用バッテリーボトム の組み合わせ」を使います。

ちなみに、これらに関しても自分の入手元は上記のユニットと同じで以下です。

- [M5Stack CoreS3 SE — スイッチサイエンス](https://www.switch-science.com/products/9690)
- [M5Stack CoreS3用バッテリーボトム — スイッチサイエンス](https://www.switch-science.com/products/9421)

M5Stack CoreS3 SE は PORT.A のみしか使えませんが、M5Stack CoreS3用バッテリーボトムのほうでは以下のとおり PORT.C が使えます。

●M5GO Battery Bottom3 (for CoreS3 only) | m5stack-store
　https://shop.m5stack.com/products/m5go-battery-bottom3-for-cores3-only?variant=44174704804097

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/72be918f-f80b-ced8-0343-5ec900ae3149.png)

この PORT.C のコネクタに M5Stack用MIDIシンセサイザユニットをつなぎます。

## プログラムについて
今回、動作させるサンプルとして、以下にある公式サンプルを使います。

●M5Unit-Synth/examples at main · m5stack/M5Unit-Synth
　https://github.com/m5stack/M5Unit-Synth/tree/main/examples

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6312cda6-556b-85fc-5b52-e348716e31a8.png)

とりあえず、以下のピアノの音を鳴らすサンプルを選んでみました。

●M5Unit-Synth/examples/piano/piano.ino at main · m5stack/M5Unit-Synth
　https://github.com/m5stack/M5Unit-Synth/blob/main/examples/piano/piano.ino

基本的には上記のサンプルそのままですが、ピンの番号だけ書きかえが必要です。

以下のとおり、PORT.C は「TXC: G17、RXD： G18」となっています。

●m5-docs
　https://docs.m5stack.com/en/module/M5GO3%20Bottom

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/37eb45b6-ce43-5aea-5b8d-7e83ae8a0d4e.png)

これに合わせて、サンプルの以下の部分を少し変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a167dbb0-ee1d-1988-f5af-b87985de2f54.png)

上記に対応したプログラム全体を示します。

```cpp
/**
 * @file piano.ino
 * @author SeanKwok (shaoxiang@m5stack.com)
 * @brief Unit Synth Piano Example
 * @version 0.2
 * @date 2024-04-07
 *
 *
 * @Hardwares: M5Core + Unit Synth
 * @Platform Version: Arduino M5Stack Board Manager v2.1.0
 * @Dependent Library:
 * M5UnitSynth: https://github.com/m5stack/M5Unit-Synth
 */

#include "M5UnitSynth.h"

M5UnitSynth synth;

void setup() {
    Serial.begin(115200);
    Serial.println("Unit Synth Piano");
    synth.begin(&Serial2, UNIT_SYNTH_BAUD, 18, 17);
    synth.setInstrument(0, 0, GrandPiano_1);  // synth piano 1
}

void loop() {
    synth.setNoteOn(0, NOTE_C4, 127);
    delay(1000);
    synth.setNoteOn(0, NOTE_D4, 127);
    delay(1000);
    synth.setNoteOn(0, NOTE_E4, 127);
    delay(1000);
    synth.setNoteOn(0, NOTE_F4, 127);
    delay(1000);
    synth.setNoteOn(0, NOTE_G4, 127);
    delay(1000);
    synth.setNoteOn(0, NOTE_A4, 127);
    delay(1000);
    synth.setNoteOn(0, NOTE_B4, 127);
    delay(1000);
    synth.setNoteOn(0, NOTE_C5, 127);
    delay(1000);
}
```

これを書きこんで音を鳴らしてみた様子は、冒頭に掲載した動画の通りです。

## 【追記】 M5StickC Plus2 も試す
記事を公開した後に M5StickC Plus2 でも試したので、情報を残しておきます。

![GShQ01cW0AAoOy4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/17924759-4466-e586-bd6f-8f69b7dcebe4.jpeg)

プログラムで変更した部分は、以下の通りです。

```cpp
    // synth.begin(&Serial2, UNIT_SYNTH_BAUD, 18, 17);
    synth.begin(&Serial2, UNIT_SYNTH_BAUD, 33, 32);
```

ピン番号は、本体裏の記載を参照しました。

●m5-docs
　https://docs.m5stack.com/ja/core/M5StickC%20PLUS2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9299f281-8cbe-c361-e82a-0686d9dd684d.png)