M5StickC PLUSでArduinoをはじめよう!

M5StickC-PLUS
M5StickC-PLUS

M5StickC PLUSとは、ESP32 PICO(Arduino互換機)をベースにボタンやLCD(135x240)、リチウムバッテリー(120mA)を内蔵してパッケージ化されたM5Stackの製品である。ここでは、はじめてM5StickC PLUSを使ってArduino開発するまでの説明を行なっていく。

M5Stack M5StickC Plus ESP32-PICOミニIoT開発ボードm5stack iotキット フィンガーコンピューターカラーLCD (オレンジレッド)
M5Stack M5StickC Plus ESP32-PICOミニIoT開発ボードm5stack iotキット フィンガーコンピューターカラーLCD (オレンジレッド)

AmazonRakuten

ちなみに、M5StickC PLUSはESP32ベースなのでWiFiはもちろんBluetoothも使用できる。さらに、慣性計測装置(IMU)のジャイロ加速度センサーが内蔵されており、姿勢を制御にも使える。さらにさらに、リアルタイムクロック(RTC)も内蔵しているのでタイムスタンプもログできる優れもの。

なお、今回の開発環境はMacBook Proで行った。

M5StickC PLUSの仕様

項目スペックピン割り当て
ボタンAGPIO37
ボタンBGPIO39
ブザーGPIO2
IRGPIO9
LEDGPIO10
LCDST7789V2(135x240)GPIO15/13/23/18/5
MICSPM1423DATA:GPIO34/CLK:GPIO0
電源管理AXP192
慣性計測装置(IMU)6-Axis(MPU6886)SCL:GPIO22/SDA:GPIO21
リアルタイムクロック(RTC)BM8563
SCLGPIO33
SDAGPIO32

Model Name: M5StickC Plus

BPS: 1200-115200/250k/500k/750k/1.5M

ESP32 PICO(4M)

詳しくはM5StickC PLUSドキュメントを参照

ドライバのインストール

まず、MacbookでM5と通信できるようにするため、こちらのページからCP2104 Driverをインストールする。

インストール完了後、次のコマンドでSiLabsUSBDriverの有無を確認する。

$ ls /Library/Extensions/
HighPointIOP.kext	SiLabsUSBDriver.kext
HighPointRR.kext	SoftRAID.kext

セキュリティ関係でインストールできない場合は「System Preference」の「Security & Privacy」で鍵を一旦外す。

Arduino IDEの設定

M5Stack Core2を接続し、Arduino IDEを起動する。シリアルポートは「/dev/cu.usbserial-xxxxx」で始まるポートを選択。

PreferenceのボードマネージャーURLsに以下のアドレスを追加。

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

その後、Toolsのボードマネージャーを開き「m5」で検索しM5Stackのボードをインストールする。さらに、ライブラリマネージャで「M5StickC」で検索し「M5StickCPlus」をインストールしておく。

プログラムの書き込みテスト

ここまでで、M5StickC PLUSの開発の準備が整ったはずだが、プログラムの書き込みテストを行ったところいくつかのエラーが出て書き込みができなかった。

その時のエラーと対処法を記しておくので何かの参考に。

エラー1

WiFiライブラリを使おうとした時に起こったエラー。Arduino IDEに含まれている既存のWiFiライブラリと名前がバッティングしているためにエラーとなってしまう様子。Arduino IDEのWiFiライブラリ/Applications/Arduino.app/Contents/Java/libraries/WiFiは普段使うことがないので思い切って削除したらコンパイルが通った。

Traceback (most recent call last):
  File "/Users/mopipico/Library/Arduino15/packages/m5stack/tools/esptool_py/3.0.0/esptool.py", line 39, in <module>
    import serial
ImportError: No module named serial
Multiple libraries were found for "WiFi.h"
 Used: /Users/mopipico/Library/Arduino15/packages/m5stack/hardware/esp32/1.0.7/libraries/WiFi
 Not used: /Applications/Arduino.app/Contents/Java/libraries/WiFi
exit status 1
Error compiling for board M5Stick-C-Plus.

エラー2

M5StickでPythonのserialを使っている様子。ここではserialモジュールが見つからないエラーが発生。

Traceback (most recent call last):
  File "/Users/mopipico/Library/Arduino15/packages/m5stack/tools/esptool_py/3.0.0/esptool.py", line 39, in <module>
    import serial
ImportError: No module named serial
exit status 1
Error compiling for board M5Stick-C-Plus.

pip3からpython2側にパッケージを追加すれば良いようで、次のようにして解決できた。

$ sudo pip3 install --target /Library/Python/2.7/site-packages pyserial

参考

エラー3

その他の書き込みエラーの時は、USB-Cケーブルを抜き差ししたり、シリアルモニターを一旦閉じたり、根気よく何度かアップロードを試すとうまくいく。

LCDに「Hello world!」を表示する

それではさっそく、LCDに文字を表示してみよう。次のようにM5ライブラリを使って簡単に文字表示ができる。M5.Lcd.setRotation(3)を指定しないとデフォルトでは縦画面で文字表示されてしまうため注意しよう。

M5StickC-PLUSに「Hello world!」
M5StickC-PLUSに「Hello world!」

#include <M5StickCPlus.h>

void setup() {
  // initialize the M5StickC object
  M5.begin();

  M5.Lcd.setRotation(3); // 画面を横向きにする
  M5.Lcd.fillScreen(WHITE);
  M5.Lcd.setCursor(5, 10);
  M5.Lcd.setTextColor(BLACK);
  M5.Lcd.setTextSize(2);
  M5.Lcd.printf("Hello World!");
}

void loop(){
}

LCDサンプルコード

LCDサンプル
LCDサンプル

さらに、こちらページのサンプルコードDisplay.inoを実行すると三角形がランダム表示され、図形を描画できる。

ボタンのイベントを取得する

M5StickC PLUSには、電源ボタン以外に二つのボタンが自由に使える。

フロントのボタンがAボタン、右サイドのボタンがBボタンとなっており、それぞれのボタンが押されたかどうかはwasPressed()で判定できる。この関数は、ボタンが押される度に一度だけ1を返す。ボタンを押している間だけ処理をさせたい場合はisPressed()関数を使う。

#include <M5StickCPlus.h>

void setup() {
  Serial.begin(9600);
  // initialize the M5StickC object
  M5.begin();
}

void loop(){
  M5.update();

  if(M5.BtnA.wasPressed()){
    Serial.println("Pressed A button.");
  }
  
  if(M5.BtnB.wasPressed()){
    Serial.println("Pressed B button.");  
  }
}

参考

I2Cでセンサーモジュールと接続する

最後に、M5StickC PLUSでI2Cを使ってみよう。今回は非接触温度センサGY-906を使用する。

GAOHOU GY-906 MLX90614非接触赤外線温度センサモジュールIICインタフェース
GAOHOU GY-906 MLX90614非接触赤外線温度センサモジュールIICインタフェース

MLX90614非接触赤外線温度センサーモジュールiicインターフェースGY-906 1PCS 高品質の液浸金基板 通信:標準IIC通信プロトコル 電源:3?5V(内部低ドロップアウトレギュレータ)

Amazon

GY-906の詳しい使い方はこちらの記事で詳しく説明したので参考に。

M5StickC PLUSでI2C通信を行うには、GPIO32・GPIO33を使うためGROVE規格のコネクタが必要になる。

GROVEコネクタケーブル
GROVEコネクタケーブル

Grove-汎用ケーブル ボード用 4ピン バックル 20㎝(5本)
Grove-汎用ケーブル ボード用 4ピン バックル 20㎝(5本)

Amazon

GROVEコネクタは容易には外れないため、M5のようなモバイル端末になりうる用途には向いているだろう。ただし、M5とGROVEコネクタのカラーには統一がないので注意が必要だ。接続先のセンサーモジュールをよく確認し、SDA・SCLなど配信が間違わないように注意しよう。

M5StickC PLUSでI2Cによる温度測定
M5StickC PLUSでI2Cによる温度測定

さて、GY-906とGROVEコネクタ接続して、LCDに温度を表示させるプログラムを書いた。動画のように、指を近づけると温度が変化するのがわかる。ちなみに、Objは物体の温度で、Ambは周囲の環境の温度、つまり気温である。

#include <M5StickCPlus.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();


void setup() {
  // initialize the M5StickC object
  M5.begin();
  mlx.begin(); 
  M5.Lcd.setRotation(3); // 画面を横向きにする
}

void loop(){
  float amb = mlx.readAmbientTempC();
  float obj = mlx.readObjectTempC();
  showTempreture(amb, obj);
//  M5.update();
  delay(1000);
  
}

void showTempreture(float amb, float obj) {
  M5.Lcd.fillScreen(WHITE);
  M5.Lcd.setCursor(5, 10);
  M5.Lcd.setTextColor(BLACK);
  M5.Lcd.setTextSize(4);
  M5.Lcd.printf("%.1fC Obj", obj);
  M5.Lcd.setCursor(5, 50);
  M5.Lcd.setTextSize(4);
  M5.Lcd.printf("%.1fC Amb", amb);
}

以上でM5StickC PLUSのかんたんな使い方の説明を終わる。M5StickC PLUSを使ってみて、非常に可能性を感じた。LCD、ボタン、バッテリーがパッケージされているのは非常にありがたい。プロトタイピング的な開発はもちろん、モバイル端末として実用的な使い方ができそうだ。

その他サンプルコード

M5StickC-Plusのサンプルコードはこちらのページにたくさん紹介されている。やりたいことが色々浮かぶと思うのでぜひ参考に。

今回使用した関連製品はこちら

M5Stack M5StickC Plus ESP32-PICOミニIoT開発ボードm5stack iotキット フィンガーコンピューターカラーLCD (オレンジレッド)
M5Stack M5StickC Plus ESP32-PICOミニIoT開発ボードm5stack iotキット フィンガーコンピューターカラーLCD (オレンジレッド)

AmazonRakuten
GAOHOU GY-906 MLX90614非接触赤外線温度センサモジュールIICインタフェース
GAOHOU GY-906 MLX90614非接触赤外線温度センサモジュールIICインタフェース

MLX90614非接触赤外線温度センサーモジュールiicインターフェースGY-906 1PCS 高品質の液浸金基板 通信:標準IIC通信プロトコル 電源:3?5V(内部低ドロップアウトレギュレータ)

Amazon
Grove-汎用ケーブル ボード用 4ピン バックル 20㎝(5本)
Grove-汎用ケーブル ボード用 4ピン バックル 20㎝(5本)

Amazon

こんな商品も人気です!

Seeed studio Arduino用スターターキット ビギナー キット STEAM プログラミング キット 初心者向け Grove Beginner Kit for Arduino
Seeed studio Arduino用スターターキット ビギナー キット STEAM プログラミング キット 初心者向け Grove Beginner Kit for Arduino

Amazon
M5Stack 2020 ATOMマトリックスESP32 PICO開発キットIMUセンサーPython
M5Stack 2020 ATOMマトリックスESP32 PICO開発キットIMUセンサーPython

Amazon
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用

Amazon
M5Stack StickV K210 AI Camera 64 BIT RISC-V MPU6886 Chip with 16M Flash ST7789 IPS LCD(Stick V)
M5Stack StickV K210 AI Camera 64 BIT RISC-V MPU6886 Chip with 16M Flash ST7789 IPS LCD(Stick V)

Amazon
M5Stack ATOM Echo スマートスピーカー開発キット
M5Stack ATOM Echo スマートスピーカー開発キット

小型スマートスピーカー開発キット

Amazon

Arduinoの参考書

みんなのM5Stack入門
みんなのM5Stack入門

本書はM5Stackという小さなマイコンを使って、IoT電子工作を 始めるための一冊です。M5Stackの特徴は次の通り。 ・小さなケースにイン!: マイコンとカラー液晶、ボタン、スピーカーなど、 必要な部品が5cm角のケースに収められています。 ・豊富なセンサ: 温度、湿度、気圧、加速度、磁気、傾き等々多くのセンサが 使えます。 ・ネット接続も超簡単: Wi-FiやBluetoothでネットに接続しIoT端末も作れます。 ・豊富なライブラリ・・・Arduinoの開発環境がそのまま使えるので、これまで Arduinoで培われてきた数多くのプログラムが使えます。 この小さくて、万能なマイコンの使い方、遊び方を本書ではがっつり解説しました。M5StickCも載ってます。

KindleAmazon
「M5Stack」ではじめる電子工作 (I・O BOOKS)
「M5Stack」ではじめる電子工作 (I・O BOOKS)

Amazon
M5Stack&M5StickCではじめるIoT入門
M5Stack&M5StickCではじめるIoT入門

M5シリーズはM5Stackをはじめとする⼩型のマイコンモジュールです。拡張モジュールが豊富にあり、必要な機能をユーザーが⾃由にカスタマイズできることが最⼤のメリットです。 本書では、M5StackとM5StickCを中⼼に簡単なサンプルアプリを作っていきます。

KindleAmazon

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/

関連コンテンツ