公開日:2022/10/29
title.png

23rd Season


#23-3 M5StickC Plusがやって来た

 新たなマイコンボードをお迎えしたお話です。

今回のお買い物

 今回のお買い物は、以下の通りです。

 Amazonのスイッチサイエンスストアで配送料無料でした。Amazonではない、スイッチサイエンスの通販サイトでは本体価格が100円ほど高い設定で、かつ、配送料が+200円だったので、どういう訳かAmazonストアの方が合計300円ほど安い設定でした(何でだろ?)。
 どちらもスイッチサイエンスであることに変わりは無いので、「安い方が良いな」と、Amazonのストアで購入しました。

 スイッチサイエンスは良心的なショップで、安心して購入できます。

 最近、Amazon発送だと、「有料お急ぎ便」や「プライム会員」ならば翌日に届く商品なのに、「配送料無料」を選択すると5〜7日かかる場合が少なくありません。何か感じ悪い。外資企業は、こういう、えげつない商売するのだなと……。
 すごくお急ぎなら、「有料お急ぎ便」と言う選択肢もありますが、普通にお急ぎの場合は、国内の他の通販サイトを当たって見ることをお勧めします。

 今回もAmazonストアですが、発送元はスイッチサイエンスとなっており、日曜祝日が定休日です。日曜午前中に発注しましたので、翌営業日の月曜日には、「発送完了」の通知が届きました。更に翌日火曜日には、「配送完了」となって、郵便受けに入っていました。
 カスタマファーストの日本企業らしい対応が、改めてありがた〜く感じられたのでした。

※有料お急ぎ便なんか使わなくても、定休日の影響を除くと、実質、翌日届きました。


 それはそうと、USB Type-Cケーブルが手元に無いぞ〜!(1;)。
 M5StickC PlusとPCを接続するためのUSBケーブルです。比較的新しい規格らしいので、最近スマホなどの情報機器を購入した方のお手元にはあるかもしれません。Type-Cケーブルをお持ちでない方は、ケーブルも一緒にお買い求めください。筆者は近くのダイソーで購入しました。

 このお値段なら、M5StickC Plus専用に1本買いそろえても良いかと思われます。

開梱

 M5StickC Plusは、B5版くらいの大きさで厚さ約2cmの厚紙製の箱で届きました。蓋を開くと、蓋裏にもメッセージが(↓)。

  「秋の夜長の電子工作🍁時間はたっぷりありますよ」

 季節感まで届けて頂きました(1o^^o)。


 箱の中に入っていたのは、以下の様なパッケージに収まったM5StickC Plus本体だけです。

a233_m5cp_pkg.jpg

 付属品、説明書の類も一切なしです。以下に示すのがM5StickC Plusの外観図です。

a233_m5cp_six.jpg

※直方体の展開図っぽく配置してあります。

 正式な天地/左右は判りませんが、TFT面のスイッチに描かれた「M5」の文字を正とすると、上の面にESP32のI/Oポートが出力されていて、外部拡張モジュールを接続できるようになっています。この拡張ポートのピンピッチは2.54mmなので、普通のデュポンワイヤなどでコンタクト出来ます。
 上面に空いた2個の穴は、可視光LEDと、IR LEDの発光用窓です。ただ、可視光LEDの方は周囲のプラスティック筐体を透かして光が見えるので、「穴を覗き込まないと光が見えない」ってことは無いです。

 いただけないのは、下面のUSBポートに重なって配置されている「Groveポート」です。こちらは専用のコネクタが必要となります。ピンピッチが2.0mmなので、普通のデュポンワイヤ(2.54mmピッチ)ではコンタクトできません。Grove規格に則った拡張モジュールを増設する場合には便利なのでしょうけど……。
 Groveケーブルは割高だし、ブレッドボードに引き出すには変換ケーブルが必要となるので、あまり好みません。

 裏面には、拡張ポートの端子名や、各種センサなどのモジュールに接続されたI/Oポート名等がプリントされていて、開発に必要十分な情報を提供してくれています。技適マークも確認できます。

 磁石が入っているので、磁性体の金属面(冷蔵庫の扉とか)にくっつけて使うことができます。希土類磁石みたいな強力な物ではないので、自重を支えるのがやっとです。長手方向の偏った位置に入っているので、横向きにくっつけようとすると自重で傾いてしまう程です。

M5StickC Plusの仕様

 特徴を以下表にまとめます。

項目 型名等 備考
MCU ESP32-PICO-D4 ESP32ベースのMCUです。
技適取得済みでWiFiとBluetoothが使えます。
Tensilica社Xtensa LX6 @240MHzデュアルコア、
FPU搭載のハイスペックMCUです。
ROM(Flash) 1,280Kバイト Arduino IDEから使用可能な、
プログラムメモリ容量です。
RAM 320Kバイト
IMU MPU6886 6軸加速度・ジャイロセンサです。
IMU(Inertial Measurement Unit)
RTC BM8563 実時間時計が載っています。
RTC(Real Time Clock)
TFTディスプレイ 1.14インチ240×135[ドット]
ドライバST7789V2
カラー液晶ディスプレイが付いています。
小さいのにドット数は、かなり多い印象です。
デジタルマイク SPM1423 クロックに同期してデータを送信してくる
デジタルマイクです。
IR LED 送信(エミッタ) 赤外線LEDが付いています。
リモコン波形等の送信が可能です。
ユーザスイッチ 2個搭載 カスタマイズ可能なユーザスイッチが2個
搭載されています。
ブザー パッシブブザー内蔵 パッシブブザーなので、音階を奏でることも
可能です。
内蔵バッテリ リチウムポリマ120mAh
(パワーマネージメントAXP192)
バッテリ内蔵なので、電源ケーブルや
通信線から解放されて、持ち歩いて使えます。
サイズ 48.2×25.5×13.7mm 小さいです。
重量 15g 初めて持った時は大きさに比して
重く感じましたが、まあ軽いです。

 一通りのセンサ類やユーザI/F等を備えている感じです。

 TFTディスプレイは、計算してみると約242dpiと高精細です。23インチディスプレイにフルHD表示すると、約95.8dpiなので、その感覚で小さなフォントの文字を描画すると、「小さくて読めない」なんてことになります。……ドットが細かいだけなので、虫メガネなどで拡大すれば、ちゃんと綺麗に読めます。

 外付け回路をゴタゴタと追加して作るアプリケーションは、他のマイコンボードでも作成可能です。そういう用途なら、外部端子数の多いArduino DUEやUNO等の方が使い易いでしょう。
 このM5StickC Plusは、PCからの電源ケーブルや通信ケーブルから解放されて、独立動作で使用するアプリケーションに使うべき物、と、言う位置づけです。

工場出荷時テストプログラム

 手元に届いたそのままの状態で内蔵バッテリは充電されていて、電源を入れたところ工場出荷時のテストプログラムが動きました。ちなみに、電源投入はスイッチ長押し(2秒)です。

 工場出荷時テストプログラムを使った、M5StickC Plus初期不良チェック中の様子を動画にしておきました。



 初期不良は認められませんでした。詳細を以下にレポートします。

  工場出荷時テストプログラムでの動作チェック:

 入手してから自分のプログラムを書き込んでテストするまでには多少時間がかかります。まして、色々な周辺モジュールがオールインワンなM5StickC Plusだと、それらのモジュール全てを動作させるのは、「今すぐ」という訳に行きません。
 初期不良のチェックをしておかないと、不良に気が付いた頃には「交換・返品期限を過ぎていた」、なんてことになってしまいます。
 出荷時に書き込まれていたプログラムによって、少なくとも、ESP32の動作(含むBLE)、内蔵LED、IR LED、ユーザスイッチ、ブザー、TFTディスプレイ、IMU、RTC、マイク、電源管理チップ、内蔵バッテリ等の初期動作は確認できました。これは良き事。

 電源を遮断して、終了しましょう。電源遮断は、電源スイッチ長押し(6秒)です。

※電源スイッチ長押し時間は、公式HP等に記載された数値を記載しています。実際使って見ると、電源投入は普通に短押し(気持ち長め)、遮断は4sほどに感じられます(公式ほど長くない)。

M5StickC Plusちょっと高い?

 M5StickC Plusだけど、第一印象は、「3.6k円は高いな……」でした。
 今までに購入して来たマイコンボードの購入価格一覧を以下表にまとめます(購入価格昇順)。

写真 マイコンボード 購入価格
ar41_mini.jpg Arduino Pro Mini 326円
ar41_stm32.jpg STM32ボード 398円
ar41_esp32.jpg ESP32ボード 986円
ar72_zerow.jpg Raspberry Pi ZeroW 1,296円
a119_due.jpg Arduino DUE 1,999円
a151_fpga.jpg FPGAボード 3,295円
a233_m5cp_pkg.jpg M5StickC Plus 3,564円

 Arduino Dueが2.0k円、Pi ZeroWが1.3k円、ESP32ボードが1.0k円等と安価な中で、M5StickC Plusの3.6k円はちょっとお高めですね。最近使い倒している、FPGAボードが3.3k円なので、それよりさらに高額でした。

 M5StickC PlusのMCUはESP32-PICO-D4なので、ESP32ベースです(WiFiとBluetooth)。そこに、ユーザスイッチ×2個、ブザー、IR LED、デジタルマイク、RTC、カラーTFT(240×135[ドット]1.14インチ)、内蔵バッテリ(120mAh)、6軸加速度・ジャイロセンサ等が搭載されていて、技適取得済みのオールインワンです。

 全ての部品が個々に購入可能なので、安いショップを探して部品を買い揃えたら、3.6k円よりは安く揃うのではないでしょうか?でも、バラバラに購入した部品を組み合わせて、小さな筐体(48.2×25.5×13.7mm、15g)に押し込むなんて芸当は、とても出来ません。その分のプレミアを勘案したら、逆に相当安かったんじゃないかと思います。

 何しろ、バッテリが強力な武器です。何かアプリケーションを作って組み込んだら、M5StickC Plusだけで自立できてしまいます。電源線を繋がずに済むので、PCから解放されて持ち歩くことができるのは強みです。これこそが、今回この機体を選んだ理由です。
 現在も大活躍中のFPGAボードと同じくらいに、大活躍してくれると嬉しいな〜。


 本HPでは、FPGAボードを使って、そもそもMCU自体から自作(DIY)してしまうと言う、ある意味DIYの行き着くところまで行き着いた感もあります(※)。その反動で、ぜ〜んぶオールインワンなM5StickC Plusを購入してしまいました。ライブラリも揃っているみたいなので、可能な限りライブラリを活用してアプリケーションを作って行きたいと思います。
 そんな反動も、あって良いと思う(1^^;)っ。

※日曜大工(DIY)では、普通、ねじやナットなどは既成の物を購入して使いますよね?MCUを自作するってことは、ねじやナットまで自作する事に相当するんじゃないでしょうか?昔、大学の研究室で、タップやダイスを使ってねじを切り、真空装置を自作していた事を思い出します。
※そう考えるとM5StickC Plusは、完全に出来上がった棚や、机、椅子等を購入してきて、色を塗ったりステッカを貼ったりして、自分好みに装飾して使うイメージでしょうか?それも広義のDIYですよね?

開発環境の構築

 M5StickC PlusのHPは、以下のページから辿ることができます。

  M5Stack社公式HP(別ウインドウが開きます)

 開発企業はM5Stack Technology社と言う中華企業みたいです。
 M5シリーズには、Stack、Stamp、Atom等のシリーズ展開があります。上のリンクで検索したM5Stack社HPから、「DOCUMENT ⇒ Controllers ⇒ M5StickC Plus」と辿ると、下のページに到達します。一応、現時点でリンクを張っておきます(リンク切れの場合は、上のHPから辿ってください)。

  M5StickC Plusドキュメントページ(別ウインドウが開きます)

 公式HPによると、開発プラットフォームはUIFlow、MicroPython、Arduino、.NET nanoFrameworkから選択できるようです。本ページでは勿論、使い慣れたArduinoを使います。

Arduino IDEで環境を立ち上げる

 前節で検索した公式HPから、「Tutorial ⇒ Arduino IDE」と進んで、手順に従って開発環境をインストールして行きます。

 以上で開発環境のインストールは完了です。

 オールインワンの開発ボードならでは、M5StickC Plus用のライブラリ一式も揃っているので、それを使うと開発は容易に進みそうです。
 ESP32のデータシートは英語な上に機能も複雑で、あまり読む気がしないのです。だからずっと、ESP32ボード+ATコマンドファームウェアを使って、メール送信(SMTP)やHTMLデータの取得(HTTP)を実行していました。M5StickC Plusでは、出来る限り既存のライブラリを活用して、楽にプログラミングを終了させたいと思います。

既宣言マクロなど

 プログラムをコンパイルする時、Arduino DUEとか、STM32とか、機体によってコードを切り替えたりする場合分けに必要な、C言語の既宣言マクロをざっと調べてみました。

 C言語のintサイズやエンディアンなどについては、こちらで調べたESP32ボードのケースと同じでした。

CPU周波数の設定

 コンパイルオプション(「ツールメニュー ⇒ CPU Frequency」)で、CPUの周波数を指定できる様なので確認しておきたいと思います(下図)。

a233_fcpumenu.png

 上図のメニューでCPU周波数を変化させながら、以下の様なコードを実行させて空ループの実行時間を計測しました。

  volatile int idx;  // volatile宣言しておかないと、空ループが最適化されてしまう。
  unsigned int usec;
  const int NN=10000;  // 10k回
  usec=micros ();
  for (idx=0; idx<NN; idx++)
    ;
  usec=micros () - usec;


 F_CPU値と、空ループの実行時間測定結果を以下表に示します。

F_CPU[MHz] loop[μs] Memo
240 669  
160 1,013  
80 2,047  
40 4,227  
26 1,014 恐らく、動作は160MHz
20 8,806  
13 1,014 恐らく、動作は160MHz
10 19,548  

 上表の結果より、周波数と、実行時間の逆数で相関グラフを描くと以下図となります。

a233_fcpuloop.png

 横軸にCPUの周波数、縦軸に実行時間の逆数を取ると、グラフは直線となります。概ねF_CPUの示す周波数通りの結果となりました。が、どうやら、26MHz XTALを源発振とする、F_CPU=13MHzと26MHzの結果(2点のみ)は、期待と合いませんでした。この2点は160MHzと同じ結果を示しています。
 例外となった2点とも、マクロF_CPUは各々13MHzと26MHzを示していたので、マクロF_CPUの値では判断できません。実物は恐らく160MHzで動いているので要注意です。

 M5StickC Plusは何しろ、内蔵バッテリで動作可能な機体ですから、消費電力を抑えてバッテリ動作可能な時間を延長するのは重要な事です。CPUスピードが不要なアプリケーションであれば、F_CPUを落としてコンパイルすることで消費電力を低下させ、バッテリを長持ちさせることができるかもしれません。

※ご存知の通り、Arduino UNO @16MHzで十分処理可能なアプリケーションも沢山あるので、そんな用途に240MHz動作させてバッテリ消費を加速させる必要はありません。

Arduinoで実験

 初めてのArduinoと言えば、やはり「Lチカ」でしょうか?
 前の節で指摘した通り、M5StickC Plusの開発環境にはマクロLED_BUILTINの設定が無いので、サンプルスケッチ「Blink」はコンパイルできません。が、それだけの事なので、M5StickC PlusのオンボードLEDが接続されたI/OポートGPIO10を指定してコンパイルしましょう。

 ダウンロードはUSB接続で可能です。オールインワンだから、外部回路も、他のモジュールとの接続も必要ありません。USBケーブルを使ってPCと接続すると、自動的に電源ONとなりました。以下図に、実験中の様子を示します。

a233_expr.jpg

ダイソーの220円ケーブル、素敵なデザインでした(↑)。

 プログラムの書き込みが終了すると、内蔵LED(赤色)がピカピカ光りました。
 プログラムを実行したままの状態でUSBケーブルを外しても、LEDがチカチカし続けています。バッテリ内蔵ですから。USBケーブルを抜いた時に、M5StickC Plusにリセットがかかった様子はありませんでした。繋ぎ直しても、同じくリセットはかからない模様です。

シリアルモニタを試す

 デバッグの強い見方、シリアルモニタの使い勝手も試しておきたいと思います。
 何でも良かったのですが、「#23-1 整数演算で開平してみよう」で作成した整数開平プログラムを使って見ます。

  整数開平プログラム:test_isqrt.ino

 コンパイルしてM5StickC Plusに書き込んでください。

 このプログラム(test_isqrt.ino)は、オンボードLEDも何も使っていません。何もしないと、オンボードLEDは消灯しており、TFTディスプレイも電源が遮断されたままなのでバックライトも光りません。M5StickC Plusには、パワーインジケータが無いので、この状態だと、電源が入っているのか切れているのか、まったく区別がつかないのです。これは要注意です。

 バッテリ動作可能なのにパワーインジケータが無いので、スイッチを切り忘れてしまうと、次使おうと思った時「バッテリ切れ」ってこともありそうです。

 アプリケーションによっては、一定時間で電源を切ったり、低消費電力モードに遷移させたり、あるいは、電源の切り忘れに気が付く様に、一定時間操作が無かった時にアラーム(ブザー)や、内蔵LEDの点滅等のプログラムを仕込んでおいた方が良いかも知れません。
 そういう、細かな電源管理がユーザプログラムからできる物かどうかも含めて、今後学んで行きたいと思います。


 すみません。話が脇にそれましたが、シリアルモニタの動作を確認して行きます。

  実験サンプル:【 】内はシリアルモニタからの送信データ
  【isqrt,1234】
  OK: isqrt (1234)=35 [35] O

 上サンプルの様なコマンドを投げて、その応答でシリアルモニタが活きていることを確認して行きます。

 バッテリを内蔵している分、電源ON/OFF時や、USBケーブル着脱時の挙動が、他のマイコンボードとは異なって見えました。勿論、許容範囲の差分です。ただ、Tera Termは困ったな……。Tera Termだけの問題なのか、他の通信ソフトウェアでも同じ状態なのかは不明です。

LEDの明るさが気になった

 実験していて、「内蔵LEDが明るいな」と感じました。M5StickC Plus回路図(公式HPに掲載されています)を見てみると、可視光LEDにも、IR LEDにも、電流制限抵抗が入っていないように見えます。下図は、M5StickC Plusの回路図から、一部引用です。

a233_m5cpled.png
※M5StickC Plus回路図から引用
※搭載されているパッシブブザーの記載が無いなど、最終版(製品版)の回路図なのかどうかは怪しいです。

 この回路でI/Oポート(GPIO9またはGPIO10)をLOWレベルにシンクすると、大電流が流れるのでは??
 ESP32-PICO-D4データシートによると、I/Oポートの駆動能力を設定できるようになっているらしいので、そちらで調整しているのだと解釈しました。ESP32の駆動能力を最大に設定すると、Iol(シンク電流)=28mA(TYP)、絶対最大定格で累積Ioutput=1,100mA(MAX)等が関連する電気的特性だと思われます。加えて、LED側の絶対最大定格If(ABS.MAX)も考慮する必要があります。
 人様の設計なので、当方では真偽は判りません。各自ご判断ください。


 ファーストコンタクトでは、初期不良が無いことの確認と、開発環境の立ち上げが終了しました。「電子工作の秋」、さあ、何を作ろう?


btn_arduino.png

btn_prev.png btn_next.png

home