見出し画像

プログラムと電子工作・M5StickC Plus2が来た!

M5StickC Plus2

今さらですが、M5StickC Plus2 を買いました。

写真1 M5StickC Plus2
写真2 M5StickC(無印)・M5StickC Plus・M5StickC Plus2(左から)

M5StickC Plus と何が変わったのかは、スイッチサイエンスの Webサイトに説明があります。ケースの色は明らかに異なりますね。

M5StickC(無印)、Plus、Plus2 のそれぞれでスケッチを書き換えるのは面倒です。スケッチを共通化できるのか調べてみました。

Arduino-IDE の準備

Arduino-IDE のメニュー「ツール」→ライブラリを管理… で、M5Unified と M5GFX をインストールしてください。

スケッチ

インクルードするヘッダファイルを <M5StickCPlus.h> から <M5Unified.h> に置き換えるだけで、けっこう行けそうです。

#include <M5Unified.h>

例えば、下記の hello.ino のスケッチは、M5StickC(無印)、Plus、Plus2 で同一です。

hello.ino

#include <M5Unified.h> 

void setup() {
    //  電源ON時に 1回だけ実行する処理をここに書く。
    M5.begin();             /*M5を初期化する*/
    M5.Lcd.setTextSize(2);  /*文字サイズはちょっと大きめ*/
    M5.Lcd.setRotation(3);  /*上スイッチが左になる向き*/

    M5.Lcd.print("Hello, World!");
}

void loop() {
    //  自動的に繰り返し実行する処理をここに書く。
}

Arduino-IDE のメニューの次の 2点を変更するだけで、M5StickC(無印)、Plus、Plus2 を切り替えて、書き込めます。

  • メニュー「ツール」→ボード→M5Stack Arduino→<device>
    <device>
    は、M5StickC、M5StickCPlus、M5StickCPlus2 のいずれかを設定します。

  • メニュー「ツール」→シリアルポート→COM?
    <device>が接続されている COMを指定します。複数表示されてどれか分からないときは、デバイス マネージャーのポート(COM と LPT)で確認できます。(Windows11では、スタートを右クリック)

これまでに投稿した記事について整理すると、次のようになります。

OS:Windows11
開発環境:Arduino-IDE 1.8.19
ライブラリ:M5Unified バージョン 0.1.14

Compile、テスト:M5StickC(無印)、M5StickC Plus、M5StickC Plus2 の順に
O:通った、△:条件付きで通った、X:別ソース、-:使用不可

========================================================================================
スケッチ    #include     Compile  テスト  備考
----------------------------------------------------------------------------------------
hello       M5Unified.h  OOO   OOO  
blinky      M5Unified.h  OOO   OOO  
button      M5Unified.h  OOO   OOO  
mysketch-C  M5Unified.h  OOO   OOO  
webserver   M5Unified.h  OOO   OOO  
references  M5Unified.h  OOO   OOO  
line_notify M5Unified.h  OOO   OOO  AXPはないのでLCDバックライト調整できない
wifisetup   M5Unified.h  OOO   OOO  文字サイズ、行高などの設定のため、条件コンパイルが不可欠
alarmclock  M5Unified.h  XXX   XXX  M5.Beepがない
beep        M5Unified.h  XXX   XXX  alarmclockと同様
beep2       M5Unified.h  △△△   OOO  AXPはないのでLCDバックライト調整できない
dacwrite    M5Unified.h  △△△   OOO  beep2と同様
dacwrite2   M5Unified.h  △△△   OOO  beep2と同様
pwm2        M5Unified.h  △△△   OOO  beep2と同様
========================================================================================

Xと△の原因は次のようになります。

M5.Beep

内蔵スピーカーを鳴らす alarmclock と beep が <M5Unified.h> ではコンパイルエラーになります。原因は M5.Beep がないためです。

次のように書き換えればコンパイルは通ります。内蔵スピーカーから音が出ます。

  • M5.Beep.begin() → M5.Speaker.setVolume(128)

  • M5.Beep.tone(freq) → M5.Speaker.tone(freq, period)

  • M5.Beep.mute() → M5.Speaker.stop()

setVolume(255) が最大音量のはずですが音が割れます。128くらいが関の山。また tone() は period を指定しないと鳴り続ける仕様のようです。delayMicroseconds() も必要です。何となくギクシャクします。

beep.ino(改)

//#include <M5StickCPlus.h>
#include <M5Unified.h>

/*(中略)*/

void setup() {
    //  電源ON時に 1回だけ実行する処理をここに書く。
    M5.begin();               /*M5を初期化する*/
    M5.Lcd.setTextSize(2);    /*文字サイズはちょっと小さめ*/
    M5.Lcd.setRotation(3);    /*上スイッチが左になる向き*/
    M5.Lcd.println("beep");

    Serial.begin(115200);   /*デバッグ用のシリアル通信を初期化する*/

    M5.Lcd.println("BtnA to play");
//    M5.Beep.begin();
    M5.Speaker.setVolume(128);  /*0 off~255 max*/
}

/*(中略)*/

void playSound(const tone_t* tone, uint32_t length)
{
    Serial.println("*** playSound()");
    for (int i = 0; i < length; i++) {
        Serial.printf("  freq: %f, period: %d\n", tone[i].freq, tone[i].period);

        //  指定した周波数の音を出す。
        if (0 < tone[i].freq) {
//            M5.Beep.tone(tone[i].freq);  /*set duty*/
            M5.Speaker.tone(tone[i].freq, tone[i].period);  /*set duty*/
        }
        else {
//            M5.Beep.mute();
            M5.Speaker.stop();
        }
        //  指定した時間待つ。
        delayMicroseconds((uint32_t)(tone[i].period) * 1000);
    }
//    M5.Beep.mute();
    M5.Speaker.stop();
}

M5.Axp

M5StickC Plus2 には電源管理IC AXP192 がないため、M5.Axp.ScreenBreath() がエラーになります。

液晶ディスプレイのバックライトの明るさは、M5.Display.setBrightness(n) で変えられます(n=0 バックライトOFF、n=255 最大)。(無印)、Plus と Plus2 では n が同じ数値でも明るさが全然異なります。結局、条件コンパイルが必要です。

参考

  • M5Unified の紹介

  • GitHub - m5stack/M5Unified

  • <M5Unified.h> の使用方法は、サンプルスケッチを参照
    Arduino-IDE メニュー→ファイル→スケッチ例→M5Unified→Basic→HowToUse

ライセンス

このページのソースコードは、複製・改変・配布が自由です。営利目的にも使用してかまいませんが、何ら責任を負いません。

謝辞

福武教育文化振興財団から 2023年度助成をいただき製作しました。

この記事が気に入ったらサポートをしてみませんか?