「M5StickC Plus」の使い方、初期設定や「M5StickC」との違いを比較表で詳しく紹介します。
「液晶表示器」の使い方については、以下のリンクで詳しく紹介しています。
1.「M5StickC Plus」とは
2.外観
3.「M5StickC Plus」と「M5StickC」の違い比較表
4.基本仕様
5.本体機能、端子配列
6.端子機能詳細(入出力/ADC/DAC)
7.開発環境別初期設定、使い方
・Arduino IDE
・PlatformIO
・UiFlow(ビジュアルプログラミング)
8.サンプルプログラム(コピペ)
9.動作確認
10.まとめ
1.「M5StickC Plus」とは
「M5StickC Plus」とは「M5Stackテクノロジー社」のマイコンボードで「M5StickC」のバージョンアップ品です。
大きさは 縦48.2 × 横25.5 × 高さ13.7と小さいながら 1.14インチTFT液晶画面や入出力端子、2個のボタン、LED、赤外線送信、ブザー、3軸ジャイロ+3軸加速度センサ、マイク、RTC(リアルタイムクロック)、バッテリーが内蔵されています。
他にもシリアル通信はもちろんWiFiやBluetoothにも対応していて、これらの機能をプログラムで自由に使用することができるので電子工作やデータ表示器、IoT機器の製作等いろいろなアイデアを形にすることができます。
プログラムは「C言語」ベースの「Arduino IDE」「PlatformIO」や「ビジュアルプログラミング(UiFlow)」「Python(MicroPython)」で作成できます。
2.外観
梱包状態、本体外観は下画像のようになります。
3.「M5StickC Plus」と「M5StickC」の違い比較表
「M5StickC Plus」と「M5StickC」との違いを比較表で紹介します。
太字部分が変更箇所です。
モデル名 | M5StickC Plus | M5StickC |
---|---|---|
液晶表示器 | 1.14 インチ、 135×240 カラーTFT LCD、ST7789v2 | 0.96 インチ、80×160 カラーTFT LCD、ST7735S |
ブザー | 有り | 無し |
バッテリー | 120 mAh@3.7 V | 95 mAh @3.7V |
入出力端子 | G0、G26、G32、G33、G25/G36 | G0、G26、G32、G33、G36 |
本体重量 | 15g | 15.1 |
梱包重量 | 21g | 33g |
パッケージ寸法 | 53 × 27 × 17 mm | 55 × 55 × 20 mm |
付属品 | 無し | USBケーブル(Type-C) |
大きさはそのままで液晶表示が大きくなり画面がとても見やすくなりました。
「M5StickC Plus(左)」と「M5StickC(右)」を比較すると下画像のようになります。
他にもブザーが内蔵されて簡単なコマンドで制御できます。
バッテリー容量がわずかですが大きくなっています。
入出力端子の「G36」が「G25」と共用になり、どちらかを選択して使えるようになってます。
「G36」はアナログ入力(A/D変換)として使用できて、もともと使える端子が少ない構成だったので自由度が広がりました。
4.基本仕様
基本仕様については下表のようになります。基本仕様は「M5StickC」と同じです。
項目 | 詳細 |
---|---|
ESP32 | ESP32-PICO-D4 240 MHzデュアルコア、600 DMIPS 520 KB SRAM、Wi-Fi、デュアルモードBluetooth |
フラッシュメモリ | 4 MB |
電源入力 | 5 V @500 mA |
通信ポート | USB Type-C × 1 GROVE互換(I2C + I/O + UART)× 1 |
ボタン | 正面ボタンA/側面ボタンB |
LED | 赤色LED |
IMU(慣性計測装置) | MPU6886(3軸ジャイロ+3軸加速度) |
IR(赤外線送信機) | 赤外線LED |
マイクロフォン | SPM1423 |
RTC(リアルタイムクロック) | BM8563 |
PM IC(電源管理IC) | AXP192 |
アンテナ | 2.4 GHz 3D アンテナ |
動作温度 | 0℃~ 60℃ |
本体寸法 | 48.2 × 25.5 × 13.7 mm |
ケース素材 | プラスチック(ポリカーボネート) |
5.本体機能、端子配列
本体のボタンやLEDの位置、使用可能な端子機能は下画像のようになります。
6.端子機能詳細(入出力/ADC/DAC)
LEDやボタンの端子番号、使用可能な端子機能詳細は下表のようになります。
「G25」と「G36」の使用しない方をフローティング入力に設定する方法は以下になります。
例として「G25」をフローティング入力としています。
setup() {
M5.begin();
pinMode(36, INPUT);
gpio_pulldown_dis(GPIO_NUM_25);
gpio_pullup_dis(GPIO_NUM_25);
}
7.開発環境別初期設定、使い方
・Arduino IDE
「Arduino IDE」を使用した「M5StickC Plus」の使い方を紹介します。
「Arduino IDE」のインストール方法は以下のリンクで詳しく紹介しています。
インストールから初期設定までは「M5Stackシリーズ」で共通です。
「ライブラリ」だけ使用するマイコンボードごとに異なるので以下のように「M5StickC Plus」のライブラリを検索してインストールします。
まずは「ツール」→「ライブラリ管理」をクリックします。
次に下画像のようなウインドウが表示されるので、検索窓に「M5StickCPlus(全部小文字でもOK)」と入力します。
「M5StickCPlus」ライブラリが出てくるので「インストール」をクリックします。
「インストール」をクリックすると下画像のようなウインドウが表示されます。
関連するライブラリがあることを教えてくれているので「Install all」をクリックして全部インストールしましょう。
下画像のように「INSTALLED」が表示されたらインストール完了です。
「閉じる」をクリックして終了してください。
これで初期設定は完了です。
「スケッチ例」やこの下で紹介する「サンプルプログラム」を「コピペ」して書き込んで動作確認してみましょう。
「Arduino IDE」に「コピペ」で書き込む方法は以下のリンクで詳しく紹介しています。
・PlatformIO
「PlatformIO」を使用した「M5StickC Plus」の使い方を紹介します。
本格的にプログラミングするなら「PlatformIO」がおすすめです!
「PlatformIO」のインストール方法は以下のリンクで詳しく紹介してます。
「VS Code」と「Python」のインストールも別途必要になりますのでリンクを載せておきます。
インストール順は「① VS Code」「② Python」「③ PlatformIO」です。
初期設定については「M5Stackシリーズ」の「ATOM LITE」の初期設定で詳しく紹介しています。
手順は「ATOM LITE」とほぼ同じですがインストールする「ライブラリ」が異なるので以下で紹介します。
まずは「PlatformIO」の「HOME」画面で「New Project」をクリックしてください。
下画像のようなウインドウが表示されるので「Name」にプロジェクト名を入力してください。
今回は例としてプロジェクト名を「M5StickC_Plus」としています。
「Board」に「M5Stick」と入力するとドロップダウンリストに「M5Stick-C(M5Stack)」があるので選択してください。
下画像のように入力したら「Finish」をクリックしてください。
次にライブラリをインストールします。
「Home」メニューの「Libraries」をクリックすると下画像のような画面になるので検索窓に「M5StickCPlus(すべて小文字でもOK)」と入力し「エンター」を押します。
「M5StickCPlus」ライブラリが表示されるのでクリックします。
次に「Add to Project」をクリックします。
「Select a project」をクリックするとドロップダウンリストに先ほど作成した「M5StickC_Plus」があるので選択します。
下画像のように設定したら「Add」をクリックします。
プロジェクトの作成が始まります。終わるまで待ちましょう。
プロジェクトの作成が終了したら設定内容を確認してみましょう。
画面左の「ワークスペース」の中から「platformio.ini」をクリックすると設定内容が確認できます。
下画像のようになっていればOKです。
(バージョンの@^0.0.5は異なる場合があります。)
「ワークスペース」の「src」→「main.cpp」をクリックすると下画像のようになります。
初期プログラムが書かれてますが全て消去して、この下で紹介する「サンプルプログラム」を「コピペ」して書き込んで動作確認してみてください。
プログラムを「コピペ」で書き込んで動作確認する方法も以下のリンクを参考にしてください。
・UiFlow(ビジュアルプログラミング)
「UiFlow」を使用した「M5StickC Plus」の使い方を紹介します。
「UiFlow」の使い方は以下のリンクで詳しく紹介しています。
まずは「M5Burner」を起動して画面左の機種選択メニューで「M5StickC」を選択します。
下画像のように「UIFLOW(StickC Plus)」が表示されるのでその下の「Download」をクリックします。
ダウンロードが終わると下画像ような表示に変わります。
「M5StickC Plus」を「パソコン」と接続して画面左上の「COMポート」を設定した後に「Burn」をクリックします。
WiFi通信のための「SSID」と「パスワード」を入力する画面が表示されるので、お使いの環境に合わせて入力したら「Start」をクリックします。
「ファームウェア」の書き込みが始まるので終わるまで待ちましょう。
「ファームウェア」の書き込みが終わると「M5StickC Plus」に下画像のように「Api key」が表示されます。
次に「UiFlow」を起動して、下画像のように画面右上の設定アイコンから「設定」をクリックします。
下画像のような設定ウインドウが表示されるので「M5StickC Plus」本体に表示された「Api Key」を入力して「M5StickC Plus」を選択した後に「OK」をクリックします。
「OK」をクリックすると下画像のように画面が変わります。
画面左下に、入力した「Api Key」と「接続済み」と表示されていれば設定完了です。
「UiFlow」を使用したビジュアルプログラミングの方法も以下のリンクで紹介してます。
8.サンプルプログラム(コピペ)
全ての端子機能を確認するためのサンプルプログラムを以下に準備しました。
本体ボタンと外部入力による「Lチカ」やアナログ入力、アナログ出力、ブザー出力、液晶表示、バッテリー残量表示等の基本的な動作が確認できます。
サンプルプログラムの動作については以下のようになります。
G26のアナログ出力とG36のアナログ入力を接続して、本体から出力された電圧を本体で読み取って液晶画面に表示します。
本体ボタンAまたは外部ボタン赤を押すと、本体LED赤が点灯しアナログ出力電圧が増えます。
本体ボタンBまたは外部ボタン青を押すと、外部LED青が点灯しアナログ出力電圧が減ります。
電源ボタン(PWR)を利用して、短押し(1秒以下)でブザーが高音で鳴り、長押し(1秒以上6秒以下)でブザーが低音で鳴ります。
LEDは「抵抗内蔵LED」の青色を使用してます。
抵抗は510Ωを使用してますが1kΩ程度~10kΩ程の抵抗であれば何でも良いです。
ボタンスイッチは「M5Stackテクノロジー」社の「デュアルボタンユニット」です。
「抵抗内蔵LED」と「デュアルボタンユニット」については以下のリンクで詳しく紹介しています。
サンプルプログラムは以下になります。「コピペ」して書き込んでください。
※下コード(黒枠)内の右上角にある小さなアイコンのクリックでコピーできます。
#include <M5StickCPlus.h>
/* M5StickC Plus端子仕様
G0 :入力/出力/アナログ入力(無線使用時無効、内部で1kΩでプルアップ)
G36:入力/ ― /アナログ入力
G25:入力/出力/アナログ入力(無線使用時無効)/デジタル出力
G26:入力/出力/アナログ入力(無線使用時無効)/デジタル出力
G32:入力/出力/アナログ入力/Groveコネクタ(SDA)
G33:入力/出力/アナログ入力/Groveコネクタ(SCL)
*/
// 端子割り付け
#define IN0 32 //入力端子
#define IN1 33
#define OUT0 0 //出力端子
#define ADC0 36 //アナログ入力端子
#define DAC0 26 //アナログ出力端子
// 変数設定
float ad_val; //アナログ入力値格納用
float da_val; //アナログ出力値指定用
float v_in = 0; //アナログ入力電圧換算値
float v_out = 0;//アナログ出力電圧換算用
int btn_pw = 0; //電源ボタン状態取得
float battery; //バッテリー残量表示用
// 初期設定 -----------------------------------------
void setup() {
M5.begin(); //(LCD有効, POWER有効, Serial有効)
// 入出力ピン設定
// 入力設定
pinMode(IN0, INPUT_PULLUP); //入力設定(プルアップ)
pinMode(IN1, INPUT_PULLUP);
// 出力設定
pinMode(OUT0, OUTPUT); //出力設定(外部LED青)
pinMode(10, OUTPUT); //本体LED赤
pinMode(2, OUTPUT); //本体ブザー
digitalWrite(OUT0, HIGH); //出力(外部LED青)初期値
digitalWrite(10, HIGH); //本体LED初期値OFF(HIGH)
digitalWrite(2, HIGH); //本体ブザー初期値OFF
// アナログ入力設定
pinMode(ADC0, ANALOG); //アナログ入力
// アナログ出力設定
pinMode(DAC0, OUTPUT); //出力に設定
dacWrite(DAC0, 0); //初期値0設定
// G36とG25は同時使用不可。使っていない方は以下のようにフローティング入力にする
gpio_pulldown_dis(GPIO_NUM_25);
gpio_pullup_dis(GPIO_NUM_25);
// 液晶表示初期設定
M5.Lcd.fillScreen(BLACK); //背景色
M5.Lcd.setRotation(1); //画面向き設定(USB位置基準 0:下/ 1:右/ 2:上/ 3:左)
M5.Lcd.setTextSize(1); //文字サイズ(整数倍率)
M5.Lcd.setTextFont(4); //フォント 1(8px), 2(16px), 4(26px)
//6(36px数字-.:apm), 7(7セグ-.:), 8(75px数字-.:)
}
// メイン -----------------------------------------
void loop() {
M5.update(); //本体ボタン状態更新
M5.Beep.update(); //ブザー状態更新(M5.Beep.toneで指定した発音時間が経過していたらOFFする)
// 本体ボタン、外部ボタン入力処理
//ボタンA または 外部スイッチ赤が押されている かつ アナログ出力255より小さいなら
if ((M5.BtnA.isPressed() || digitalRead(IN0) == 0) && da_val < 255) {
digitalWrite(10, LOW); //本体LED赤点灯
da_val++; //アナログ出力 +1
} else { //そうでなければ
digitalWrite(10, HIGH); //本体LED赤消灯
}
//ボタンB または 外部スイッチ青が押されてる かつ アナログ出力0より大きいなら
if ((M5.BtnB.isPressed() || digitalRead(IN1) == 0) && da_val > 0) {
digitalWrite(OUT0, LOW); //外部LED青点灯
da_val--; //アナログ出力 -1
} else { //そうでなければ
digitalWrite(OUT0, HIGH); //外部LED青消灯
}
// ブザー処理
if (btn_pw == 2) { //電源ボタン短押し(1秒以下)なら
M5.Beep.beep(); //ブザー初期値(周波数:4000, 発音時間:100ms)で鳴らす
}
if (btn_pw == 1) { //電源ボタン長押し(1秒以上6秒以下)なら
M5.Beep.tone(440, 100); //ブザー低音(周波数, 発音時間ms)で鳴らす
}
// 電源ボタン状態取得(1秒以下のONで「2」1秒以上で「1」すぐに「0」に戻る)
btn_pw = M5.Axp.GetBtnPress();
// アナログ入力処理
ad_val = analogRead(ADC0); //アナログ入力値を取得
v_in = ad_val * (3.3 / 4095); //3.3Vへ換算
// アナログ出力処理
dacWrite(DAC0, da_val); //アナログ出力実行
v_out = da_val * (3.3 / 255); //3.3Vへ換算
// バッテリー残量(MAX約4.2V、限界電圧3V)パーセント換算表示
battery = (M5.Axp.GetBatVoltage() - 3) * 90; //バッテリー残量取得、換算
if (battery > 100) { //換算値が100以上なら
battery = 100; //100にする
}
// LCD表示処理
M5.Lcd.setTextFont(4); //フォント
M5.Lcd.setCursor(5, 5); M5.Lcd.setTextColor(RED, BLACK); //座標設定(x, y)//(文字色, 背景)
M5.Lcd.printf("LED_RED : %d", digitalRead(10)); //本体LEDの状態表示
M5.Lcd.setCursor(5, 30); M5.Lcd.setTextColor(BLUE, BLACK);
M5.Lcd.printf("LED_BLUE : %d", digitalRead(OUT0)); //本体LEDの状態表示
M5.Lcd.setCursor(5, 55); M5.Lcd.setTextColor(WHITE, BLACK);
M5.Lcd.printf("ADC : %01.2fv ( %04.0f )", v_in, ad_val); //アナログ入力値表示
M5.Lcd.setCursor(5, 80);
M5.Lcd.printf("DAC : %01.2fv ( %04.0f )", v_out, da_val); //アナログ出力値表示
M5.Lcd.setCursor(5, 105);
M5.Lcd.setTextColor(ORANGE, BLACK);
M5.Lcd.printf("PWR_BTN : %d", btn_pw); //電源ボタン状態取得
M5.Lcd.setTextFont(2); //フォント
M5.Lcd.setCursor(200, 118); M5.Lcd.setTextColor(GREENYELLOW, BLACK);
M5.Lcd.printf("%.0f%% ", battery); //バッテリー残量表示
delay(100); //遅延時間(ms)
}
ブザーの制御についての主なコマンドは以下になります。
M5.Beep.update(); //ブザー状態更新(M5.Beep.toneで指定した発音時間が経過していたらOFFする)
M5.Beep.tone(周波数, 発音時間); //設定周波数、発音時間でブザーを鳴らす
//発音時間経過後 M5.Beep.update()が実行されたらOFFする
M5.Beep.tone(周波数); //設定周波数でブザーを鳴らし続ける
M5.Beep.mute(); //ブザーをOFFにする
M5.Beep.setBeep(周波数, 発音時間); //beep()で鳴らすブザーの設定
M5.Beep.beep(); //setBeep()で設定したブザーを鳴らす(内部的にはtoneが実行される)
今回ブザーを鳴らすのに電源(PWR)ボタンを利用しています。
電源ボタンは個別に電源管理IC「AXP192」で管理されていて、以下のコマンドを実行する事で電源ボタンの状態が取得できるのでこれを利用しています。
M5.Axp.GetBtnPress(); //1秒以下のONで「2」1秒以上で「1」すぐに「0」に戻る
液晶表示については、液晶表示ライブラリ「LovyanGFX」を使うと、日本語表示や「チラツキ」を防止する「スプライト」が簡単にできるため、以下のリンクで詳しく紹介しています。
「入出力端子」や「ボタン」「アナログ入力」の使い方、「C言語」については以下のリンクで詳しく紹介しています。
9.動作確認
サンプルプログラムの動作確認をしてみましょう。
各部品を接続してプログラムを書きこむと本体液晶表示は下画像のようになります。
液晶画面の表示内容について
・LED_RED:本体LED赤の状態表示「1:消灯/0:点灯」
・LED_BLUE:外付けLED青の状態表示「1:消灯/0:点灯」
・ADC:アナログ入力電圧換算値0~3.3V(アナログ入力値 0~4095)
・DAC:アナログ出力電圧換算値0~3.3V(アナログ出力値 0~255)
・PWR_BTN:電源ボタン状態表示「1:長押し/2:短押し」
・右下(%):バッテリー残量表示
本体ボタンAを押すと本体LED赤が点灯し「LED_RED:」表示が「0」になります。
押している間「DAC:」表示のアナログ出力値が1づつ増えていき「ADC:」表示も読み取ったアナログ入力値に応じて変化します。
本体ボタンBを押すと出力端子「G0」が「LOW」になり外付けのLED青が点灯し 「LED_BLUE:」表示が「0」になります。
押している間「DAC:」表示のアナログ出力値が1づつ減っていき「ADC:」表示も読み取ったアナログ入力値に応じて変化します。
外部スイッチを付けている場合は、赤ボタンと本体ボタンAは同じ動作になります。
外部スイッチを付けている場合は青ボタンと本体ボタンBは同じ動作になります。
「電源(PWR)ボタン」を長押し(1秒以上)すると「PWR_BTN」表示が「1」になり、ブザーが鳴ります(低音)
6秒以上の長押しで電源OFFになります。
電源ONは2秒の長押しです。
「電源(PWR)ボタン」を短押し(1秒以下)すると「PWR_BTN」表示が「2」になり、ブザーが鳴ります。(高音)
10.まとめ
「M5StickC Plus」は「M5StickC」のバージョンアップ品で、本体のサイズはそのままで液晶表示が大きくなりブザーが搭載されて、バッテリー容量も80mAhから120mAhに大きくなりました。
開発環境は「C言語」ベースの「Arduino IDE」「PlatformIO」やビジュアルプログラミングの「UiFlow」を使ってプログラミングを行うことができます。
個人的に「M5StickC」の時は液晶が小さく入出力端子も少ないため、主に「M5Stack GRAY/BASIC」や「ATOM LITE」+格安液晶の「SSD1306」の組み合わせで使っていましたが、バージョンアップされた「M5StickC Plus」の液晶は非常に見やすく、端子の使用範囲も広がったため今後はメインとして使用することになりそうです。
価格も3000円程と性能のわりにお手頃なので、これからプログラミングを初めてみる人の最初の1台としてもとても良いと思います。
コメント
表の中の25と26が逆だと思います
ご指摘ありがとうございます。間違ってました・・・(汗)
早速修正いたしました。
It’s difficult to find experienced people about this topic,
however, you sound like you know what you’re talking about!
Thanks
Thank you for your comment!
Few people may be involved in this, but I think many of them need this information.
I will continue to do my best to disseminate information for such people.