【M5Stack/M5StickC入門】電子工作・IoT・ロボット制御してみよう

M5Stack/M5StickCとは?特徴、できること、環境構築について紹介し、電子工作・IoT・ロボット制御してみます。

スポンサーリンク

M5Stack/M5StickCの特徴

M5Stack(エムファイブ・スタック)は、下写真のようなコンパクトな四角いマイコンモジュールです。
Arduinoよりもコンパクトで、かつ最初から様々な機器が搭載されており、最初から色々なことができるのが特徴です。

【M5Stack Gray】

M5StickC(エムファイブ・スティック)は、M5Stackをさらにコンパクトにしたスティック状のモジュールです(下写真のオレンジ色のスティックが「M5StickC」です)。

主な特徴は以下のとおり。

M5Stack/M5StickCの特徴
1 M5Stackは、ESP32(Wi-Fi、Bluetooth通信可能)、microSDカードスロット、ボタン、USB、Groveのコネクタ、カラーLCDディスプレイ、バッテリー電源、スピーカーが最初から内蔵されている。M5StickCの場合、よりコンパクトな代わりにmicroSDカードスロットとスピーカーが省かれている。
2 M5Stackは、Arduinoのシールドのように、センサー等の載った拡張基板をメインモジュールに積み重ねることで拡張可能。
M5StickCも、ハットと呼ばれる拡張モジュールをスティックの先端部に接続することで拡張可能。
4 Arduino IDE、ESP-IDF、MicroPythonなど開発環境がいくつかある。(おすすめはArduino IDE)
5 Arduinoと同様、温湿度などのセンサーによる測定やモーター制御などハードウェア制御が可能。

M5Stack/M5StickCにはいくつも種類があります。
そのうちの代表例をピックアップして比較した結果が以下になります。

種類 M5Stack Basic M5Stack Gray M5StickC
価格 3600円前後 4300円前後 2400円前後
サイズ 54×54×12.5mm 同左 48mm×24mm×14mm
CPU ESP32 240MHz デュアルコア 同左 同左
フラッシュメモリ 4MB 4MB 4MB
LCD 320×240px カラーTFT 同左 80×160px カラーTFT
インターフェース USB Type-C, GROVE (I2C)、microSD スロット、I/O PORT、BUSPORT 同左 USB Type-C、GROVE (I2C,I/O,UART)
内蔵センサ なし 9軸(加速度,ジャイロ,磁気)センサ 6軸加速度センサ
無線通信 Wi-Fi、Bluetooth 同左 同左
バッテリ 150mAh 150mAh 800mAh
ボタン ボタン×3 + 電源ボタン 同左 ボタン ×2、リセットボタン×1
内蔵スピーカ 1W 同左 なし

【ボタン処理/M5Stack】

目次 概要
ボタン処理 A-Cの3つのボタンの使い方を解説します.
リレー操作 リレーユニットを使って電源をON・OFFします.

【データ測定/M5Stack】

記事リンク 概要
電圧測定 アナログ入力ピン(35,36番)を使って,0-3.3Vの電圧を測定します.分圧抵抗を使えばそれ以上の範囲でも測定できます.
温湿度・大気圧の測定 M5StackとBMP280ユニットで温度・湿度・気圧測定を行います。
傾きの測定 M5Stack Gray内蔵の9軸センサー(MPU9250)でロール・ピッチ・ヨー角(傾き)を測定します。

【データ通信/M5Stack】

目次 概要
CAN通信 M5StackとCommuモジュールでCAN通信します。
RS485通信
Modbus
wifi接続/簡易サーバー化 M5Stackをwifiに接続して無線通信したり、簡易サーバー化します。
超小型百葉箱 超小型百葉箱を作って無線LANに接続し、グローバルネットからスマホ端末などでモニタしてみます。

【ロボット制御/M5StickC】

目次 概要
Rover C M5Stick向けの4輪移動ロボットキット「Rover C」の使い方について解説します。

動画でもM5Stackの使い方を紹介しています。

Youtube版:M5Stack超入門編

スポンサーリンク

M5Stack/M5StickCの拡張例

M5Stack GrayをM5StickCをそれぞれ2台購入しました。

【M5Stack Gray】

M5Stack Grayの場合、中を開けて、追加モジュールを間に挟み、スタックしていくことで簡単に機能を増やすことが可能です。
(下画像ではインターフェースにCANとRS485を追加できるCOMMUモジュールを追加しています)

インターフェースのGROVE (I2C,I/O,UART)コネクタに対応しているセンサならば、簡単に接続できます。
下画像はスイッチサイエンスより450円で入手したM5Stack用環境センサユニットで、温度・湿度・大気圧を測定できる優れものです。
内蔵バッテリーの充電とプログラムの書き込みはUSB-TypeCから行います。

スポンサーリンク

M5Stack/M5StickCの開発環境構築

特徴3で紹介したとおり、M5Stackは開発環境がいくつかあります。
ESP32初心者の方はArduino IDEがおすすめです。
今回は、M5Stack/M5StickCの開発環境をArduino IDEで構築する手順を紹介してきます。
なお、本記事の内容は動画でも解説しています。

● Arduino IDEをPCにインストールします。

【Arduino】IDEのインストール&ダウンロード(Windows, MacOSX編)
Windows環境にArduino IDEのインストールとダウンロード方法について解説します。

● デバイスドライバを公式ページ(https://m5stack.com/pages/download)からダウンロードし、インストールします。
※お使いのPCの環境にあったものをクリックしてダウンロード

● ダウンロードしたZIPファイルを解凍します。
Windowsの場合、中にあるインストーラのうち、お使いのWindowsのビット数に合わせて、ドライバをインストールします。

種別 操作
32ビット版Windows 「CP210xVCPInstaller_x86_vx.x.x.x.exe」をダブルクリックしてインストール
64ビット版Windows 「CP210xVCPInstaller_x64_vx.x.x.x.exe」をダブルクリックしてインストール

● M5Stack/M5StickCをPCにUSB接続します。次に、デバイスマネージャを開き、CP210x USB to UART Bridgeのポート番号を確認します。
(下画像の例ではCOM7です。表示されない場合はパソコンを再起動します)

● Arduino IDEを起動します。
つぎに、メニューから[ファイル] -> [環境設定]と選択します。

● 追加のボードマネージャーに、「https://dl.espressif.com/dl/package_esp32_index.json」を設定します。

● メニューから[ツール] -> [ボード:~] -> [ボードマネージャ…]を選択します。

● ダイアログで「ESP32」と検索し、[Install]をクリックします。

● メニューから[スケッチ] -> [ライブラリのインクルード] -> [ライブラリの管理…]を選択します。

● ダイアログで「M5Stack」と検索し、「M5Stack by M5Stack」をインストールします。
M5StickCの場合は、「M5StickC」と検索し、「M5StickC by M5StickC」をインストールします。

これで環境構築作業は完了です。
M5Stackのサンプルプログラム(サンプルスケッチ)を実行し、動作確認をしてみます。

● M5Stack/M5StickCをPCにUSB接続します。次に、デバイスマネージャを開き、CP210x USB to UART Bridgeのポート番号を確認します。

● メニューから[ツール] -> [ボード:~] -> [M5Stack-Core-ESP32]を選択します。
※M5StickCの場合、[M5StickC-Core-ESP32]を選択します。

● メニューから[ツール] -> [シリアルポート]をクリックし、先程確認したCOMポートを選択します。(下画像はCOM7だった場合の例)

● メニューから[ツール]をクリックし、以下のように設定されていることを確認します。

項目 設定
ボード M5Stack-Core-ESP32
ボーレート(通信速度) 921600
COMポート ②で確認したCOMポート

※M5StickCの場合、[M5StickC-Core-ESP32]

● [ファイル] -> [スケッチ例] -> [M5Stack] -> [Basics] -> [HelloWorld]を選択します。
※M5StickCの場合、[M5StickC] -> [Basics] -> [HelloWorld]

● [→]ボタンをクリックすると、コンパイルとM5Stackへの書き込みが始まるので終わるまで待ちます。
書き込みが終わると、M5Stack/M5StickCのLCDに「Hello World!」と表示されます。

【M5Stackの場合】

補足

M1 Mac + macOS Big Sur + Arduino IDEの環境では、2021年1月時点ではそのまま書き込もうとするとエラーが発生します。その場合は以下記事の追加作業が必要になります。

スポンサーリンク

M5StackとBMP280 ENV ユニットで温度・湿度・気圧測定

BMP280 ENV Unit(amazonで1000円程度で入手可能)を使うことで簡単に温度・湿度・気圧を測定できます。

実行例


Amazon:M5Stack Mini ENV Unit with DHT12 BMP280 Digital DHT-12 Temperature Humidity Aire Pressure Sensor I2C Grove Connector
※2019年8月4日現在、Amazonで900円で入手できました

前準備

● Arduino IDEのメニューから[ファイル] -> [設定] -> [追加のボードマネージャURL]に以下のURLを追加します。

https://adafruit.github.io/arduino-board-index/package_adafruit_index.json

● メニューから[スケッチ] -> [ライブラリをインクルード] -> [ライブラリを管理]を選択します。

● ダイアログで[Adafruit BMP280]と検索し、「Adafruit BMP280 Library」をインストールします。
これで事前準備は完了です。

●あとは、Arduino IDEでプログラムを書き込みます。プロジェクト一式をGithub(https://github.com/nishizumi-lab/sample/tree/master/m5stack/bmp280)にアップロードしていますのでお使いください。

Arduinoプロジェクト一式

【bmp280.ino】


※このソースコード単体では動作しません。(※プロジェクト一式に入っているヘッダファイル等も必要)

【M5Stack】M1 Mac + macOS Big Surでプログラムを書き込む方法
M1 Mac + macOS Big Sur + Arduino IDEでM5Stackにプログラムを書き込む方法について紹介します。
スポンサーリンク

M5Stackで無線接続(wi-Fi)テスト

WiFi.hライブラリを使うことで、M5Stackでwi-Fiに接続して無線通信したり簡易サーバーを構築できます。
まず、指定した「SSID」「パスワード」のwifiに接続してみます。

【サンプルコード】


【実行例】

M5stackのLCD画面にIPアドレスが表示されたら接続成功です。

【M5Stack/M5StickC入門】電子工作・IoT・ロボット制御してみよう
M5Stack/M5StickCとは?特徴、できること、環境構築について紹介し、電子工作・IoT・ロボット制御してみます。
スポンサーリンク

M5Stackで簡易サーバー作成

続いてM5stackを簡易サーバー化してみます。
これも、WiFi.hライブラリを使うことで簡単に実装できます。

【サンプルコード】


【実行例】

PCブラウザでM5Stackに割り当てられたローカルIPアドレスにアクセスし、リンクを押したら画面の色が変化します。

スポンサーリンク

M5StackをDMZに配置し、グローバル接続できるようにする

M5StackをDMZに配置し、グローバル接続できるようにします。
WiFi.config() でローカルIPアドレス等を指定(固定)し、WiFi.begin() で接続を開始します。
あとは、ルーターのDMZ設定などで固定したローカルIPアドレスを設定すれば、グローバルネット(WAN側)からグローバルIPアドレス(ルーターのもの)でアクセスできます。

スマホやPCブラウザで以下のURLにアクセスすればM5Stackにアクセスできます。

http://xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxはルーターのグローバルIPアドレス

【サンプルコード】


DMZについては以下ページでも紹介しています。

【ルーター】NATやDMZでローカルサーバーをグローバルからアクセスできるようにする方法
ルーターでNATやDMZでローカルサーバーをグローバルからアクセスできるようにする方法についてまとめました。
【M5Stack】wifiに接続して無線通信・簡易サーバー構築
M5Stack(Arduino)でwifiに接続して無線通信したり簡易サーバーを構築する方法について紹介します。
スポンサーリンク

M5Stackで超小型百葉箱を作成して外部ネットからモニタ(なんちゃってIoT的な応用例)

これまで環境センサユニットと簡易サーバー作成についてそれぞれ以下の記事で紹介してきました。
今回はそれらのコードを組み合わせた応用例として、M5Stackで超小型百葉箱を作成し、外部からグローバル接続でモニタできるようにしてみます。

【サンプルコード】
少しリッチな見た目にするために、charts.jsを使ってアナログメーターを画面に作り、そこで温度、湿度、大気圧の値を表示させます。


【実行例】
グローバルネット経由でiPhoneのSafariブラウザから超小型百葉箱の測定値(温度、湿度、大気圧)モニタできました。

【M5Stack】超小型百葉箱を作って無線LANにつなぐ
M5Stackで超小型百葉箱を作って無線LANにつなぐ方法について紹介します。
スポンサーリンク

CAN通信(標準フォーマット)で送受信

CAN(Controller Area Network)通信とは、ドイツのBosch社が開発したシリアル通信プロトコルです。
自動車や工場内の電子機器の通信プロトコルなどによく使われています。
M5Stack+Commuモジュールを用いれば、CAN通信を行うことができ、それらの通信を受信したり、逆に送信して電子機器に指令を与えるようなことができます。

CAN通信の標準フォーマットでは、11bitの識別IDと0~8byteのデータフレームで、データをやり取りします。
CAN通信の通信仕様については以下ページで紹介しています。

【CAN通信】原理・ビットレート・データ長・主な用途など
CAN通信の「原理」「メリット」「デメリット」についてまとめました。
説明
ID 識別子(Identifier)の略。データ内容や送信ノードを識別する他、通信調停の優先順位を決定する。標準フォーマットでは11ビット長でIDを構成するため、IDの範囲は0x0~0x7FFとなり、2048種類の識別ができる。ただし、上位7ビットを全てリセッシブ(ID:0b1111111XXXX)にすることは禁止されています。
DLC データフレームに格納するデータのbyte数を指定。0~8byteの範囲で指定でき、例えば8byteのデータを送信したい場合はDLC=8となります。
データフレーム CAN通信で送信したいデータを格納するフレームで0~8byteのデータを格納できる。
参考 m5stack公式Github MCP_CAN_lib/examples
機材名 数量
M5Stack Gray(約4500円) 2
Commuモジュール(約1500円) 2

利用するには「MCP_CAN_lib」というライブラリをArduino IDEに追加する必要があります。

【Arduino IDE】ライブラリ「MCP_CAN_lib」をインストール
Arduino IDEにライブラリ「MCP_CAN_lib」をインストールする方法を解説します。

サンプルコード

2台のM5Stack+CommuモジュールでCAN通信を行うサンプルコードです。

■commu_can_receiver.ino(受信側)


■commu_can_transmitter.ino(送信側)


プロジェクト一式はGithub(https://github.com/nishizumi-lab/sample/tree/master/m5stack/commu)に公開しています。

実行結果

スポンサーリンク

CAN通信(拡張フォーマット)で送受信

CAN通信の拡張フォーマットでは、29bitの識別IDと0~8byteのデータフレーム、データをやり取りします。

説明
ID 識別子(Identifier)の略。データ内容や送信ノードを識別する他、通信調停の優先順位を決定します。拡張フォーマットでは標準ID11ビットと拡張ID18ビットを併せて29ビット長で、IDの範囲は0x0~0x1FFFFFFFとなり、約540万種類の識別ができます。標準フォーマット同様、上位7ビットを全てリセッシブ(ID:0b1111111XXXX…)にすることは禁止されています。
DLC データフレームに格納するデータのbyte数を指定。0~8byteの範囲で指定でき、例えば8byteのデータを送信したい場合はDLC=8となります。
データフレーム CAN通信で送信したいデータを格納するフレームで0~8byteのデータを格納できる。
詳細 【CAN通信】原理・ビットレート・データ長・主な用途など

サンプルコード

2台のM5Stack+CommuモジュールでCAN通信を行うサンプルコードです。

■commu_can_receiver.ino(受信側)


■commu_can_transmitter.ino(送信側)


プロジェクト一式はGithub(https://github.com/nishizumi-lab/sample/tree/master/m5stack/commu)で公開しています。

実行結果

スポンサーリンク

M5StickC×RoverCでメカナムホイールロボットを作成

RoverCはM5StickCと組み合わせて制御できるメカナムホイールロボット(全方向へ移動可能な四輪駆動ロボット。通称、「全方向移動ロボット」)です。
メカナムホイールロボットは、「ホイールの車軸に対して、45度の角度で樽形の小型ローラーが配置された特殊なホイール」で走行するため、全方向へ移動可能となる仕組みです。

具体的には、以下写真(右側)のような感じでRoverC本体上部にM5StickCを差し込んでやります。

【M5StickC装着前】
ジョイパッド(左)、RoverC(メカナムホイールロボット)

【M5StickC装着後】

M5StickCとRoverCは両方ともバッテリーが内蔵されているため、これだけで動作可能なメカナムホイールロボットが完成です。
写真(左側)にもジョイパッド + M5StickCがありますが、これでメカナムホイールロボットを制御できます。
これが無くても、メカナムホイールロボット単体(M5StickC+RoverC)で自律移動させることも可能ですし、Wi-Fiに接続して、無線通信でパソコンやスマホなどからメカナムホイールロボットを制御させることも可能です。

【裏面】
ジョイパッド(左)、RoverC(メカナムホイールロボット)の裏側をみると内蔵バッテリーがむき出しで見えます。
RoverCのホイールをみると、「ホイールの車軸に対して、45度の角度で樽形の小型ローラーが配置」されていることがわかります。これにより、全方向へ移動可能となります。
ただし、 一般的にメカナムホイールは、不整地(凹凸状の床面)での走行が難しいと言われています。

サンプルコード

RoverC(メカナムホイールロボット)単体で前後左右に移動するプログラムです。

【sample01/sample01.ino】

">

【sample01/RoverC.h】

">

【sample01/RoverC.cpp】

">

プロジェクト一式はGithub(https://github.com/nishizumi-lab/sample/tree/master/m5stick-c/01_roverc/sample01)で公開しています。

【M5Stick C】RoverCの使い方・制御方法・サンプルプログラム集
M5Stick CとRoverCでオムニホイール型の四輪ロボットを制御する方法について紹介します。
【M5Stack】CommuモジュールでCAN通信
M5Stack(Arduino)とCommuモジュールでCAN通信する方法について紹介します。
【M5Stack/M5StickC入門】電子工作・IoT・ロボット制御してみよう
M5Stack/M5StickCとは?特徴、できること、環境構築について紹介し、電子工作・IoT・ロボット制御してみます。
M5Stack
スポンサーリンク
西住工房

コメント