・自分が持っているのは、M5 Stack BASIC v2.7
・いろいろ触ってみる。
目次
開発環境のセットアップ(Arduino IDE)
・Arduino IDEをインストール
・Arduino IDEはデフォルトではM5 Stackに非対応。
M5 Stackのボード定義をする必要がある。
これには、ピンの定義、firmの書き込み方法などが含まれる。
File → Preferences → Additional boards manager から上記URLを追加。
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
↑M5Stack公式のボード定義URL
・Tools → Boards → Boards manager → M5Stackと検索 → インストール
・Tools → Manage Libraries.. → M5Stackと検索 → インストール
・M5StackをPCに接続 → COMポート → Select Other Board and Port → “M5Core – M5Stack”を選択
※”M5Stack BASIC v2.7″以外は、選択するものが異なるっぽい。
これでセットアップ完了。
簡単なスケッチ例
Hello Worldを表示
・とりあえず画面に”Hello World”と表示。
#include <M5Stack.h>
void setup() {
M5.begin(); //ハードウェアの初期化、周辺機能の有効化
M5.Lcd.print("Hello World");
}
void loop() {
}
画面表示のプロパティ設定
・画面の背景色、テキスト色、テキストサイズ、テキスト配置など。
#include <M5Stack.h>
void setup() {
M5.begin(); //M5Stackハードウェアの初期化
M5.Lcd.fillScreen(WHITE); //ディスプレイ背景色の設定
M5.Lcd.setTextColor(BLUE); //テキスト色の設定
M5.Lcd.setTextSize(2); //テキストサイズの設定
//テキストの開始位置を設定(左上基準)
M5.Lcd.setCursor(10, 0); //ピクセルで(x,y)
M5.Lcd.print("Test"); //テキスト表示
//(x,y)で指定した座標でx方向は中央揃えでテキスト表示。あとはfont size : 4
M5.Lcd.drawCentreString("Hello!", 160, 100, 4);
}
void loop() {
}
ボタンの設定
・ボタンAを押すと、画面に”A”と表示。ボタンB/Cも同様の動作。
#include <M5Stack.h>
void setup() {
M5.begin(); //M5Stackハードウェアの初期化
M5.Lcd.printf("Push the button!\n"); //printfだと変換指定子つかえる。\nは改行
}
void loop() {
M5.update(); //ボタンの状態を更新
if (M5.BtnA.wasReleased()) { //ボタンがAが押された時
M5.Lcd.printf("A\n"); //Aを表示
}
if (M5.BtnB.wasReleased()) { //ボタンがBが押された時
M5.Lcd.printf("B\n"); //Bを表示
}
if (M5.BtnC.wasReleased()) { //ボタンがCが押された時
M5.Lcd.printf("C\n"); //Cを表示
}
}
GPIO 出力設定
・2pinの論理を100ms毎に切り替える。(3.3V出力)
#include <M5Stack.h>
void setup() {
M5.begin(); //M5Stackハードウェアの初期化
M5.Power.begin(); //バッテリー動作の場合はこれを入れる。
pinMode(2, OUTPUT); // 2pinをGPIO出力モードに設定
}
void loop() {
digitalWrite(2, HIGH); // 2pinをHIGHにする。
delay(100); // 100ms
digitalWrite(2, LOW); // 2pinをLOWにする。
delay(100); // 100ms
}
GPIO入力設定
・2pinの入力状態(HIGH/LOW)を1秒ごとに読みだして、画面に表示。
#include <M5Stack.h>
void setup() {
M5.begin(); //M5Stackハードウェアの初期化
M5.Power.begin(); //バッテリー動作の場合はこれを入れる。
pinMode(2, INPUT); // 2pinをGPIO入力モードに設定
}
void loop() {
int buttonState = digitalRead(2); // 2pinの論理を読み取る
if (buttonState == HIGH) {
M5.Lcd.printf("2pinはHIGHです。\n"); //画面にテキスト表示
} else if (buttonState == LOW){
M5.Lcd.printf("2pinはLOWです。\n"); //画面にテキスト表示
} else {
M5.Lcd.printf("2pinは異常値が入力されてます。\n"); //画面にテキスト表示
}
delay(1000); // 1000ms待機
}
シリアルモニタ
・ArduinoIDEのシリアルモニタから送信したテキストをM5Stack画面上に表示。
・書き込み時間 : 38s
#include <M5Stack.h>
void setup() {
M5.begin(); //M5Stackハードウェアの初期化
M5.Power.begin(); //バッテリー動作の場合はこれを入れる。
Serial.begin(115200); //ビットレート設定
}
void loop() {
M5.update(); //ボタンの状態を更新
if (M5.BtnA.wasReleased()) { //ボタンがAが押された時
M5.Lcd.printf("A\n");
Serial.println("A"); //Arduino IDE上のシリアルモニタへ送信
}
if (Serial.available() > 0){
String str = Serial.readStringUntil('\n');
M5.Lcd.printf("recieved -> %s\n",str);
}
}
A/D入力
・pin35をA/Dポートとして使用
・pin35に外部から0~3.3Vの電圧を入力して、A/D読み値を画面表示
・結構、入力電圧と表示電圧のずれがある。入力に対して、-0.16V程度。
・書き込み時間 : 45s
#include <M5Stack.h>
#define ANALOG_PIN 35 // 35pinを"ANALOG_PIN"という名前で定義
void setup() {
//初期化して、テキスト表示
M5.begin();
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(10, 20);
M5.Lcd.println("ADC Value:");
//12bit分解能に設定 2^12 = 4096
analogReadResolution(12);
}
void loop() {
int adcValue = analogRead(ANALOG_PIN); //35pinのAD値を読みだして、変数に代入(0-4095)
float voltage = adcValue * (3.3 / 4095.0); // AD読み値を電圧に変換
//四角形を表示。順番に説明すると
//X座標, Y座標, 四角形の幅, 四角形の高さ, 色
M5.Lcd.fillRect(10, 50, 200, 30, WHITE);
M5.Lcd.setCursor(10, 50);
M5.Lcd.setTextColor(BLACK);
// %d : int型の表示、%.2f : float型の小数第2位まで表示
M5.Lcd.printf("%d (%.2fV)", adcValue, voltage);
delay(500); // 500ms待機
}
D/A出力
・pin26をD/A出力ポートとして使用
・pin26に 0V → 3.3V → 0Vで変化する三角波を出力
・pin25でDACを動かすと、パタパタ音が聞こえる。
・for分の中にDAC値の画面表示などの処理を入れると、周期が長くなる。
・書き込み時間 : 40s
#include <M5Stack.h>
#define DAC_PIN 26 // 26pinを"DAC_PIN"という名前で定義
void setup() {
M5.begin();
}
void loop() {
//10.24s周期の0V → 3.3V → 0Vで変化する三角波を出力
//0V → 3.3Vに変化。20ms * 256 = 5.12sかかる。
for (int value = 0; value <= 255; value++) {
dacWrite(DAC_PIN, value); //25pinに値を書き込む
float voltage = value * (3.3 / 255.0);
delay(20);
}
//3.3V → 0Vに変化。20ms * 256 = 5.12sかかる。
for (int value = 255; value >= 0; value--) {
dacWrite(DAC_PIN, value);
float voltage = value * (3.3 / 255.0);
delay(20);
}
}
エラー例
・stray ‘\343’ in program
→プログラム中に全角のスペースや記号が入っている。