M5Atomの使い方
※このページは,コミュニケーションロボティクス研究室および神奈川工科大学 電気電子工学科/ホームエレクトロニクス開発学科の研究室チュートリアル用のページです。
※※ ✅がチェック課題です。
https://scrapbox.io/files/63dc6a907ac8fc001e8a1516.png
1. M5 Atom Liteが使えるようになるまでの手順
講義資料:一日でわかるArduino入門.pdf
クイックスタート https://docs.m5stack.com/ja/arduino/arduino_ide
ドキュメント Atom Lite:https://docs.m5stack.com/ja/core/ATOM%20Lite
Step:1 Arduino IDEをインストール
「Windows Win 10 and newer, 64 bits」をクリックしてインストール
途中で寄付やメールアドレスを求められますが「JUST DOWNLOAD」をクリックすれば回避することができます。
サイトごと日本語翻訳するとダウンロード時の"JUST DOWNLOAD"の文字が消えることがあるので注意
Step:2 ボード情報のインストール
2-1 「基本設定(Preference)」ボードマネージャのURL(下記)を追加
https://static-cdn.m5stack.com/resource/arduino/package_m5stack_index.json
2-2 ↑を追加後に、ボードマネージャから「 M5Stack by M5sStack」をインストール
M5 で検索して「 M5Stack by M5sStack」を指定(詳細は「ボードマネージャの追加」参照)
※ドライバがうまく認識されない場合 → 手動でドライバ(これ)をインストール 
フォルダを指定してのドライバインストールを2回繰り返す必要があります(伝統)
Step:3 各種ライブラリのインストール
3-1 ライブラリマージャーから 「 M5Atom by M5sStack」をインストール
3-2 その他のライブラリのインストール
このページの課題では、下記のライブラリを使用する
M5Atom (3-1 でインストール済み)
fastLED
Step:4 サンプルプログラムを実行
4-1 「ファイル」→「スケッチ例」→「M5Atom」→「Basic」→「Button」からサンプルプログラムを開く
https://gyazo.com/14fbbb5d8dbe1476354d565cedd295f6
4-2 「▷(デバッグの開始)」アイコンの横にあるウィンドウをクリックし、「他のボードとポートを選択」を開く
ボード:「M5Atom」
COMポート:M5 Atom Lite を接続しているポートを指定
※COMポート番号がわからないときは「COMポート番号の確認方法(USB Serial編)」を参考にしてください
https://gyazo.com/8d265445e2275981c5d3d1d27054fe97
4-3 プログラムの確認
M5 Atom Liteのボタンを押してLEDの色が変わればOK
以上でM5 Atom Liteの使用環境が整いました。
2. サンプルプログラム
✅ 1. M5Atom LiteでLチカ①
◯参考回路:
https://gyazo.com/16d4a55a57222752e10b04ff07051947
※実習では上の回路と一日でわかるArduino入門.pdfのpp.16-17を参考にして、G25ポートに吸い込み、吐き出しの両方の方式で2つのLEDを接続した回路を制作すること。
code: Blink.ino
/* Blink.ino by yama
M5 Atom LiteのGPIOポートにLEDを接続し1秒ごとに点滅させるサンプルコードです。
Atom Liteの基本動作、GPIOポートの制御、ループ処理が学べます。
*/
#include "M5Atom.h" // M5Atom用ライブラリを読み込み。M5.begin() などの関数を使うために必要。
#define LED_BUILTIN 25 // G25ポート(GPIO 25)をLED_BUILTINという名前で定義
// setup関数は、M5Atomの起動時に一度だけ実行される
void setup()
{
M5.begin(true, true, true); // M5Atom本体の初期化。引数は以下の通り:
// 第1引数: シリアル通信初期化(Serial.begin)
// 第2引数: ディスプレイ初期化(AtomのLEDマトリクス)
// 第3引数: I2C初期化
delay(10); // 初期化後の安定化のために10ミリ秒待機
pinMode(LED_BUILTIN, OUTPUT); // G25 番ピンを「出力モード」に設定(LED制御用)
}
// loop関数は、M5Atomが動作している間ずっと繰り返し実行される
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // G25 にHIGH(3.3V)を出力 → LEDを点灯
delay(1000); // 1000ミリ秒(1秒)待機
digitalWrite(LED_BUILTIN, LOW); // G25 にLOW(0V)を出力 → LEDを消灯
delay(1000); // 再び1秒待機
}
2. M5Atom LiteでLチカ② ボタンで点滅速度が変化
code: Blink.ino
#include "M5Atom.h"
#define LED_BUILTIN 25 //LED_BUILTINにポートG25 定義
void setup()
{
M5.begin(true, true, true);
delay(10);
pinMode(LED_BUILTIN, OUTPUT); //LED_BUILTIN(ポートG25)を出力に設定
}
uint8_t FSM = 0;
void loop()
{
if (M5.Btn.wasPressed())
{
FSM++;
if (FSM >= 4)
{
FSM = 0;
}
}
switch (FSM)
{
case 0:
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
break;
case 1:
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(500); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(500); // wait for a second
break;
case 2:
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(500); // wait for a second
break;
case 3:
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(50); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(50); // wait for a second
break;
default:
break;
}
delay(50);
M5.update();
}
✅ 3. フォトリクレクタ読み取り①
※データの確認の仕方は一日でわかるArduino入門.pdf のpp.23を参照してください。
◯フォトリクレクタ LBR-127HLD を用いた参考回路:
回路図とブレッドボードの配線図
https://gyazo.com/79c036173c59e978c4a80399c04e58ae   https://gyazo.com/e27aa2ee47b589485c2d11b7e1123f87
code: M5Atom_PhotoReflector.ino
/* M5Atom_PhotoReflector.ino by yama
M5 Atom Lite の アナログ入力ピンG33に接続されたセンサから電圧値を読み取り、シリアルモニタに出力するプログラムです。
下記の機能が学べます。
・センサの出力電圧の読み取り(analogReadによるAD変換)
- M5Atom Lite の ADC(アナログ-デジタル変換器)は 12bit精度(0〜4095) の整数値として読み取れます。
- 0: 0V, 4095: 3.3V(またはADCの最大電圧)
・PCとのシリアル通信
- 出力値はArduino IDE上のシリアルモニタ、シリアルプロッタで読み込めます。
*/
#include "M5Atom.h" // M5Atom用ライブラリの読み込み(初期化などに使用)
void setup()
{
M5.begin(true, true, true); // M5Atomの初期化
// (Serial, ディスプレイ, I2Cの有効化)
delay(10); // 初期化後の安定化のために10ミリ秒待機
Serial.begin(115200); // シリアル通信の開始(ボーレート115200bps)
}
void loop() {
// アナログピン33(G33)の値を読み取る(0〜4095の範囲)
int sensorValue = analogRead(33);
// シリアルモニタにセンサー値と範囲情報を出力
Serial.print("Sensor:"); // 出力例:「Sensor:1234」
Serial.print(sensorValue);
Serial.print(",Min:0"); // 最小値(A/D変換の下限を表示)
Serial.print(",Max:4095"); // 最大値(12bit ADCの上限を表示)
Serial.println(); // 改行(次の出力を新しい行に)
delay(1); // 読み取り間隔(1ms待機。安定性向上と過負荷防止。もっと長くしてもよい)
}
✅ フォトリクレクタ読み取り② (課題のヒント)
※回路は「1. M5Atom LiteでLチカ①」、「 3. フォトリクレクタ読み取り①」で用いたものを組み合わせて制作すること。
code: M5Atom_PhotoReflector2.ino
/* M5Atom_PhotoReflector2.ino by yama
上にあるM5Atom_PhotoReflector.inoの応用プログラムです。
センサ(G33に接続)の値に基づき、LED(G25に接続)の明るさをPWM制御で変化させます。
PWM制御はLEDの明るさを変えるだけでなくサーボモータの位置制御、DCモーターの速度制御にも使えます。
下記の機能が新しく学べます。
・PWM制御
*/
#include "M5Atom.h" // M5Atomシリーズの初期化・LED制御のためのライブラリをインクルード
// --- ピン定義 ---
const int analogInPin = 33; // アナログ入力ピン:G33(センサー接続)
const int analogOutPin = 25; // PWM出力ピン:G25(LEDなどを接続)
// --- アナログ値の格納用変数 ---
int sensorValue = 0; // センサーから読み取ったアナログ値(0〜4095)
int outputValue = 0; // スケーリング後のPWM出力値(0〜255)
// --- PWM設定値 ---
const int pwmChannel = 0; // 使用するPWMチャネル番号(ESP32は0〜15まで使用可能)
const int pwmFreq = 5000; // PWMの周波数(Hz)。ここでは5kHzに設定
const int pwmResolution = 8; // PWMの分解能(ビット)。8ビット=0〜255の出力が可能
void setup()
{
M5.begin(true, true, true); // M5Atomの初期化(Serial/I2C/ディスプレイすべて有効)
Serial.begin(115200); // シリアル通信の開始(モニター出力用)
delay(10); // 初期化のための短い遅延
// --- PWMの初期設定 ---
ledcSetup(pwmChannel, pwmFreq, pwmResolution); // PWMチャネルに周波数と分解能を設定
ledcAttachPin(analogOutPin, pwmChannel); // 指定ピン(GPIO25)にPWMチャネルを割り当て
}
void loop() {
// --- センサー値の読み取り ---
sensorValue = analogRead(analogInPin); // GPIO33からアナログ値を読み取り(0〜4095)
// --- 読み取った値をPWM用にスケーリング ---
outputValue = map(sensorValue, 0, 4095, 0, 255); // 12bit → 8bitへ変換(0〜255の明るさに変換)
// --- LEDへPWM出力(明るさ調整)---
ledcWrite(pwmChannel, outputValue); // 設定チャネルにPWM出力値を書き込む(LEDの明るさ調整)
// --- シリアルモニタへ出力 ---
Serial.print("Output:"); // 出力のラベル表示
Serial.println(outputValue); // 出力値(0〜255)を表示
Serial.print(",Output Max:255"); // 出力の最大値を明示
//Serial.print(",Sensor:"); // 以下はコメントアウトされた行(デバッグ用に再利用可能)
//Serial.print(",Sensor Max:4095");
//Serial.print(sensorValue);
Serial.print(",Min:0"); // 最小値を明示
Serial.println(); // 改行のみ(出力の整形)
delay(1); // 次の読み取りまでの短い待機(過負荷防止・安定動作)
}
課題: 暗くなると点灯し、明るくなると消える自動照明を製作せよ。
下記の2通りを考えること。
✅ ① ある一定の暗さになると,LEDが点灯する照明
✅ ② 暗さに応じて,しだいにLEDが明るくなる照明
実習で使用するフォトリフレクタ
フォトリフレクタ(反射型フォトセンサ) LBR-127HLD
※M5Atom liteを使う時の注意点(中級以上向け)
機能によって使用できるポートが決まっている ※参考:ATOM Lite、Matrix、Echo GPIO比較
センサ入力(アナログ入力/AD変換):analogRead()
G32,G33のみOK
Wifi,Bluetoothを使用していないときはG25,G26もOKの
モータ制御(DA変換,PWM出力): dacWrite()
G25,G26のみOK
ESP32Servo は 他でもOK
LEDのPWM調光(ledcWrite() )はすべてのポートでOK (サーボも動く)
digitalRead(),digitalWrite()もすべてのポートでもOK
ポートの許容電流について
IOH(High-level source current) IOポートは20mA、電源供給ピンは40mAまでを推奨
ESP32-PICO-D4 のデータシートから確認できる(ESP32-PICOシリーズのデータシート英語版の方が読みやすい)
参考:ESP32のデータシートの読み方
※※ 参考 Atom matrixを使う場合
ドキュメント
Atom Matrix:https://docs.m5stack.com/#/en/core/atom_matrix
GitHub - m5stack/M5Atom: M5Stack Atom Arduino Library
ディスプレイ表示設定用のツールもここにある Atom pixel tool
M5Atom MatrixでLチカ
code: Atom_Matrix_LED_Display.ino
#include "M5Atom.h"
void setup() {
// void M5Atom::begin(bool SerialEnable , bool I2CEnable , bool DisplayEnable )
M5.begin(true, false, true);
}
void loop() {
for (uint32_t i = 0; i < 25;i++){
M5.dis.drawpix(i, 0x0000ff);
delay(50);
}
for (uint32_t i = 0; i < 25;i++){
M5.dis.drawpix(i, 0x00ff00);
delay(50);
}
for (uint32_t i = 0; i < 25;i++){
M5.dis.drawpix(i, 0xff0000);
delay(50);
}
for (uint32_t i = 0; i < 25; i++)
{
M5.dis.drawpix(i, 0x000000);
delay(50);
}
}
https://gyazo.com/71c7de59f100448c29cdb7f29fbd171b
Communication Robotics Lab.