m5stack
基本的にはESP32と同じでArduinoと同じ開発環境でプログラミングが可能で,Wifi,Bluetoothも利用できます.さらに,液晶,ボタン,スピーカーがセットになっています.加速度センサが内蔵されたものもありますし,バッテリーシールドなどの利用して機能をパワーアップすることも可能です.
本当にいろいろなことができますが,GPIOのピンが一部使いにくいなどの欠点があります.(PWMを使うとスピーカーにノイズが乗るピンがあったりします.)
本当にいろいろなことができますが,GPIOのピンが一部使いにくいなどの欠点があります.(PWMを使うとスピーカーにノイズが乗るピンがあったりします.)
うまく書き込めなかったり,書き込みに時間がかかりすぎる場合について
Lチカ(デジタル出力)
基本的にスケッチはArduino,ESP32などと同じです.ただ,PINアサインだけ注意が必要です.以下はLED2個を点灯させるスケッチです.
#include <M5Stack.h>
int led1 = 16;
int led2 = 17;
void setup(){
m5.begin();
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop() {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
delay(1000);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(1000);
}
M5stack Grayで確認したところ,「2,3,5,16,17,19,21、22,26」はLチカできました.
GPIO1はつきっぱなし.
35、36は入力用なのでLチカできない.
25は反応なし(アナログ入力用? 25はスピーカとつながってるのでそもそもNGか.)
なぜか,23,18もできない.(理由がわかったら,また書きます.)
GPIO1はつきっぱなし.
35、36は入力用なのでLチカできない.
25は反応なし(アナログ入力用? 25はスピーカとつながってるのでそもそもNGか.)
なぜか,23,18もできない.(理由がわかったら,また書きます.)
PWM出力(アナログ出力)
PWM出力の書き方は普通のArduinoのとは少し違います.ESP32と同じ書き方ですが,ch0を使うとスピーカーからノイズがでますので,ch1以降を使いましょう.
#include <M5Stack.h>
int led1 = 16;
int led2 = 17;
//PWMの設定
const int PWM_Hz = 5000; //PWM周波数
const int PWM_level = 8; //PWMの段階(8ならMAX255,10なら1023)
void setup(){
m5.begin();
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
//モータのPWMのチャンネル、周波数の設定
ledcSetup(1, PWM_Hz, PWM_level);
ledcSetup(2, PWM_Hz, PWM_level);
//モータのピンとチャンネルの設定
ledcAttachPin(led1, 1);
ledcAttachPin(led2, 2);
}
void loop() {
for (int i=0; i <= 255; i++){
ledcWrite(1, i);
ledcWrite(2, i);
delay(10);
}
}
ボタンの使い方
m5stackには3つのボタンがついています.それぞれ左からA,B,Cとなっています.
#include <M5Stack.h>
int led1 = 16;
int led2 = 17;
void setup(){
m5.begin();
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop() {
if (M5.BtnA.wasPressed()) {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
if (M5.BtnB.wasPressed()) {
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}
m5.update();
}
LCD関連
LCDに文字を表示することができます.
#include <M5Stack.h>
void setup(){
m5.begin();
}
void loop() {
M5.Lcd.setTextSize(16);//文字の大きさ
M5.Lcd.setCursor(70,48); //文字の位置
M5.Lcd.print("TEST");//表示する文字
}
アナログ入力
センサの値をLCDに表示するスケッチです.m5stackだと,PCにつないでシリアルモニタで値をチェックしなくていいので便利です.
#include <M5Stack.h>
int sensor = 26;
void setup(){
pinMode(sensor, INPUT);
m5.begin();
}
void loop() {
M5.Lcd.fillScreen(0x0000);//画面を真っ黒にする(これがないと文字に文字が重なって数字が読めない)
int value = analogRead(sensor);
M5.Lcd.setTextSize(16);//文字の大きさ
M5.Lcd.setCursor(70, 48); //文字の位置
M5.Lcd.print(value);//表示する文字
M5.update();
delay(200);
}
ピンは26,35,36を使うと簡単にできる.ピンアサイン上ではアナログ入力できるピンでもできないピンがあるように思う.これも引き続き調査します.
スピーカー
m5stackはスピーカーも内蔵されているため,簡単に音も出せます.
ただ,結構うるさいです.
ただ,結構うるさいです.
#include <M5Stack.h>
void setup() {
M5.begin();
}
void loop(){
if(M5.BtnA.wasPressed()){
M5.Speaker.tone(300, 200);
}
if(M5.BtnB.wasPressed()){
M5.Speaker.tone(400, 200);
}
if(M5.BtnC.wasPressed()){
M5.Speaker.tone(400, 500);
}
M5.update();
}