M5Stackでは、ライブラリ、APIが充実していますので、やりたいことがライブラリですでに用意されていることが多いです。
ライブラリの数も多いので、いろんなサイトで調べるのも大変なので、APIの一覧を用意しました。合わせて、APIの公式サイトのリンクも書いてあります。
まずは、この一覧表で、必要なAPIを目途付けしてから、公式サイトなどでサンプルコードなどを調べてもらえば、効率的です。
私は、M5GOを使ってます。M5Stack本体に加え、様々なセンサがセットになっていますので、まずはこのセットで十分かと思います。
API一覧
システム
API | 説明 |
begin() | LCD、TFカード、シリアルポート、 I2Cの有効化/無効化を設定します。 |
update() | ボタン A / B / C の読み取り状態を 更新します。 |
powerOFF() | M5の電源をオフします。 廃止予定: Power::deepSleep()を使用してください。 |
スピーカー
API | 機能 |
begin() | スピーカーを初期化します。 |
end() | スピーカーをミュートし、出力を終了します。 |
tone() | 指定した音と長さでスピーカーを鳴らします。 |
LCD 画面表示
スクリーンの解像度は 横320 x 高さ240 で、左上が原点(0, 0)です。
色コードはあらかじめ定義があり、これらを利用することができます。
色定義 中身 説明 R G B
TFT_BLACK 0x0000 黒 0 0 0
TFT_NAVY 0x000F ネイビー 0 0 128
TFT_DARKGREEN 0x03E0 濃い緑 0 128 0
TFT_MAROON 0x7800 マロン 128 0 0
TFT_PURPLE 0x780F パープル 128 0 128
TFT_OLIVE 0x7BE0 オリーブ 128 128 0
TFT_LIGHTGREY 0xC618 薄い灰色 192 192 192
TFT_DARKGREY 0x7BEF 濃い灰色 128 128 128
TFT_BLUE 0x001F 青 0 0 255
TFT_GREENYELLOW 0xB7E0 黄緑 180 255 0
TFT_GREEN 0x07E0 緑 0 255 0
TFT_YELLOW 0xFFE0 黄色 255 255 0
TFT_ORANGE 0xFDA0 オレンジ 255 180 0
TFT_PINK 0xFC9F ピンク 255 255 16
TFT_CYAN 0x07FF シアン 0 255 255
TFT_DARKCYAN 0x03EF 濃いシアン 0 128 128
TFT_RED 0xF800 赤 255 0 0
TFT_MAGENTA 0xF81F マゼンダ 255 0 255
TFT_WHITE 0xFFFF 白 255 255 255
API | 機能 |
M5.Lcd.begin() | 使用できるように初期化を行います。 M5.begin( )でLCDの初期化を行わない場合は、ディスプレイを使う前にこの関数を呼んでください。 |
M5.Lcd.sleep() | ディスプレイを省エネモードに移行させます 1)スリープを解除するには、wakeup()関数を呼んでください。 2)M5StackのLCDバックライトは別に制御しているため、必要に応じてsetBrightness( )関数で調整してください。 |
M5.Lcd.wakeup() | ディスプレイを省エネモードから復帰させます 1)M5StackのLCDバックライトは別に制御しているため、必要に応じてsetBrightness( )関数で調整してください。 |
M5.Lcd.setBrightness() | ディスプレイのバックライトを調整します。 1)バックライトはPWM(44.1KHz)で制御されています。 2)バックライトを多用するとバッテリー消費に直接的な影響があります。 |
M5.Lcd.progressBar() | 進捗を表すバーを表示します。 1)色は青色(0x09F1)で表現されます。 2)追加分しか描画しないため、あらかじめ背景を消しておいてください。 |
M5.Lcd.qrcode() | QRコードを生成します。 1)文字数に合わせて適切なQRコードバージョンを指示してください。 |
M5.Lcd.drawBitmap() | ビットマップを描画します。 1)カラーコードは上位より赤5ビット、緑6ビット、青5ビットの計16ビットであらわされます。 |
M5.Lcd.drawBmpFile() | ファイルからビットマップを読み込み、描画します。 1)サイズ、ビット数によっては展開できないことがあります。 |
M5.Lcd.drawJpg() | メモリからJPEGデータを読み込み、描画します。 1)サイズ、ビット数、フォーマット(プログレッシブ等)によっては展開できないことがあります。 |
M5.Lcd.drawJpgFile() | ファイルからJPEGデータを読み込み、描画します。 1)サイズ、フォーマット(プログレッシブ等)によっては展開できないことがあります。 |
M5.Lcd.fillScreen() | 引数で指定した色で画面を塗りつぶします。 |
M5.Lcd.setTextColor() | 文字の色や文字の背景色を引数で指定した色に変更します。 |
M5.Lcd.setCursor() | カーソルの位置を設定します。 |
M5.Lcd.setTextSize() | 描画する文字サイズを指定します |
M5.Lcd.drawPixel() | 指定した位置に指定色のピクセルを描画します。 |
M5.Lcd.drawChar() | 指定した始点から終点まで指定色の直線を描画します。 |
M5.Lcd.drawFastVLine() | XからYまで垂直に線を引きます。 |
M5.Lcd.drawFastVLine() | XからYまで水平に線を引きます。 |
M5.Lcd.drawLine() | 指定した始点から終点まで指定色の直線を描画します。 |
M5.Lcd.drawTriangle() | 指定した3点を結ぶ三角形を指定色で描画します。 |
M5.Lcd.fillTriangle() | 指定した3点を結ぶ三角形を指定色で塗りつぶして描画します。 |
M5.Lcd.drawRect() | 指定の点から指定の幅と高さの四角形を指定色で描画します。 |
M5.Lcd.fillRect() | 指定の左上の点(x,y)と幅と高さの四角形を指定色で塗りつぶして描画します。 |
M5.Lcd.drawRoundRect() | 左上の点(x,y)と幅と高さを指定して、かど丸の四角形を描画します。 |
M5.Lcd.fillRoundRect() | 左上の点(x,y)と幅と高さを指定して、塗りつぶされた かど丸の四角形を描画します。 |
M5.Lcd.drawEllipse() | 左上の点(x,y)と幅と高さを指定して、楕円を描画します。 |
M5.Lcd.fillEllipse() | 左上の点(x,y)と幅と高さを指定して、塗りつぶされた楕円を描画します。 |
M5.Lcd.color565() | 関数で使用する色コード(rgb565)に変更します。 |
M5.Lcd.setRotation() | 画面を回転させます。 1)M5Stackのディスプレイ制御は90°回転された制御になっており、M5.Lcd.begin()の中で setRotation(1)が実行されています。 2)0~3 は回転、4~7 は画面反転し、回転します。 |
M5.Lcd.invertDisplay() | 画面をネガポジ反転させます。 |
M5.Lcd.loadFont() | 独自のフォントを読み込みます |
M5.Lcd.unloadFont() | 独自のフォントの使用を終えます |
M5.Lcd.fontsLoaded() | 独自のフォントを読み込んでいるかを返します |
M5.Lcd.drawString() | 文字を描画します。 |
M5.Lcd.printf() | 指定の文字列を描画します。 書式指定は通常のC言語フォーマットに沿った指定ができます。 |
M5.Lcd.print() | 指定の文字列を描画します。 |
ボタン
API | 機能 |
M5.BtnA.read() | この関数はボタンの状態を直接読み出します。 1: pressed, 0: released. |
M5.BtnA.isPressed() | この関数は最後にM5.Button.read()を呼び出した時のボタンの状態を読み出します。1: pressed, 0: released. |
M5.BtnA.wasPressed() | この関数はボタンが押される度に一度だけ1を返します。 1: pressed, 0: released. |
M5.BtnA.pressedFor() | この関数は引数で指定した時間以上ボタンが押し続けられたら1を返します。 1: pressed, 0: released. |
IMU Sensor MPU9250
IMUとして搭載されているMPU9250は2種類のチップを1つのモジュールに統合しています。ひとつはMPU6500という3軸のジャイロセンサーと3軸の加速度センサーのチップです。もうひとつはAK8963という3軸地磁気センサーのチップです。
API | 機能 |
initMPU9250() | MPU6500チップを初期化します。 |
initAK8963() | AK8963チップを初期化します。 |
calibrateMPU9250() | ジャイロと加速度センサーの補正値を計算します。 |
readByte() | MPU9250の指定のレジスタから1バイト分のデータを取得します。 |
readGyroData() | 3軸ジャイロセンサーの値を取得します。 |
readAccelData() | 3軸加速度センサーから値を取得します。 |
TF card
API | 機能 |
SD.begin() | TFカード機能が使用可能になります。 |
SD.open() | ファイルを開きます。 |
Power
電源関連の機能はIP5306チップに依存しています。必要に応じてデータシートIP5306を参照してください
古いM5STACKハードウェアの場合、IP5306チップが通信未対応です。機能を使う場合は制御できないケースも考慮してください。
下記の例のように、初期化、通信確認、制御の順で使用してください。
M5.Power.begin();
if(!M5.Power.canControl()) {
//can’t control.
return;
}
M5.Power.lightSleep(SLEEP_SEC(5));
API | 機能 |
begin() | Powerクラスの初期化を行います。 |
setPowerBoostOnOff() | 電源をON/OFFの方法を変更します。 USB接続時は電源をOFFにできません。 |
setPowerBoostSet() | 電源をON/OFFの方法を変更します。 USB接続時は電源をOFFにできません。 |
setPowerVin() | USBなどからの電源供給が途切たとき、 電源を再投入するかを決定します。 |
setPowerWLEDSet() | 電源LEDを付けるためのモードを設定します。 なお、M5GOのIP5306は結線されておらず、この関数では制御できません。 |
setPowerBtnEn() | 電源ボタンを受け付けるか設定します。 ボタンを受け付けない場合は、 通電状態ならば電源ボタンはCPUリセットのみを受け付けます。 非通電状態ならば、電源は投入できなくなります。 |
setLowPowerShutdownTime() | IP5306が省エネ判断をして電源OFFするまでの待ち時間を設定します。 |
setPowerBoostKeepOn() | 省エネを無効にし電源供給状態を維持します。 |
setKeepLightLoad() | 自動シャットダウン無効化機能を設定します。 (非推奨:この関数は無効化され、今後なくなります) |
setLowPowerShutdown() | 省電力時の自動シャットダウン機能を設定します。 (非推奨:この関数は無効化され、今後なくなります。setPowerBoostKeepOnを使ってください) |
setAutoBootOnLoad() | IP5306の2次側に電力消費が発生した場合に自動起動するかを設定します。 |
setCharge() | 充電制御状態を指示します。 満充電時は、有効→無効→有効とセットすることで再充電ができます。 |
isChargeFull() | 満充電かを判断します。 |
canControl() | 電源コントローラが制御可能かどうかを判断します。 古いM5Stackなど、IP5306を認識できない場合はfalseとなります。 その場合は、Powerクラスのほとんどが機能しません。 |
isCharging() | 充電状態かどうかを判断します。 |
getBatteryLevel() | バッテリー残量(%)を返します。 |
setWakeupButton() | スリープから復帰するときに監視する信号ポートを設定します。 |
reset() | CPUをリセットし、再起動します。 |
isResetbySoftware() | 現在の起動状態がCPUリセット後であるか判定します。 (reset()もしくはRTOS等から同等の処理を行うとtrueになります) |
isResetbyWatchdog() | 現在の起動状態がウォッチドッグ後であるか判定します。 |
isResetbyDeepsleep() | 現在の起動状態がdeepSleep()後であるか判定します。 |
isResetbyPowerSW() | 現在の起動状態がパワーSWからの電源投入後であるか判定します。 |
deepSleep() | 省電力モードに移行します。 指定した時間、もしくはポートに変化があった場合に起動します。 復帰した後は、次の行からの実行ではなく、CPUは再起動されます。 使用例: 5秒省エネを行い、その後に再起動します。 deepSleep(SLEEP_SEC(5)); |
lightSleep() | 省電力モードに移行します。 指定した時間、もしくはポートに変化があった場合に起動します。 復帰した後は、次の行から実行されます。 deepSleepに比べ、省電力能力に欠けます。 使用例: 5秒省エネを行い、その後に再起動します。 lightSleep(SLEEP_SEC(5)); |
powerOFF() | 電源を切ります。 省電力機能を用いて、IP5306を8秒後にOFFさせることで 回路側に供給される電源をOFFとします。 使用上の注意 強制的に電源をOFFにする手段が用意されていないため IP5306の省電力機能をつかってこの機能を実現しています。 そのためユーザが回路で電流を消費している場合には IP5306は電源OFFへの移行判断に失敗します。 |
I/O (GPIO/ADC/DAC/PWM)
詳しくは Arduino の マニュアルを見てください
便宜上、M5Stackに関連の深いものに絞って説明します
M5STACK割り当て:
pin番号 名称 割り当て先
0 G0 ダウンローダ
1 T1 UART
2 G2 側面端子(M5FIREを除く),M5-BUS
3 R1 UART
4 G4 TF
5 G5 側面端子(M5FIREを除く),M5-BUS
6 G6 SDIO
7 G7 SDIO
8 G8 SDIO
9 G9 SDIO
10 G10 SDIO
11 G11 SDIO
12 G12 LCD
13 G13 LCD
14 G14 LCD
15 G15 LCD
16 R2 UART
17 T2 UART
18 G18 TF,上面端子(SCK),M5-BUS
19 G19 TF,上面端子(MISO),M5-BUS
21 G21 GROVE-A(SDA)
22 G22 GROVE-A(SCL)
23 G23 TF,上面端子(MOSI)
25 G25 スピーカ,側面端子(M5FIREを除く),M5-BUS
26 G26 側面端子(M5FIREを除く),M5-BUS
27 G27 LCD
32 G32 LCDバックライト
33 G33 LCD
34 G34 なし
35 G35 側面端子(M5FIREを除く)
36 G36 側面端子(M5FIREを除く)
37 G37 Cボタン
38 G38 Bボタン
39 G39 Aボタン
API | 機能 |
digitalRead() | 端子の状態を読み取ります。 1)ピンモードがINPUTになっていない場合は正しい結果を返しません。 2)バスに他の回路がある場合、その影響を受けます。 |
digitalWrite() | 端子の状態を書き込みます。 1)ピンモードがOUTPUTになっていない場合は正しい結果を返しません。 2)バスに他の回路がある場合、物理的に破損する可能性があるため、注意してください。 |
pinMode() | 端子の入出力モードを設定します バスに他の回路がある場合、物理的に破損する可能性があるため、注意してください。 例えば、スピーカ(G25)端子をINPUTモードにすると、スピーカへ流れる電流により本体が発熱します。 故障の恐れがあるため、指示内容が正しいことを確認してください。 |
analogRead() | アナログ端子の値を読み取ります。 M5StackではG35,G36が使用できます。 |
dacWrite() | アナログ端子に出力指示をします。 M5StackではG25,G26が使用できます。 |
ledcSetup() | デューティ出力設定をします チャンネルとGPIOポート番号は同一ではありません。 設定を記憶するための番号だと認識するとよいでしょう。 |
ledcAttachPin() | 出力するポートを指定します。 |
ledcWrite() | 指定したデューティ値で出力します。 デューティの単位は、初期化時に設定したビットスケールに依存します。 8ビットで指示していた場合は 0xFF を指定すると100%出力になります。 |
ledcDetachPin() | 割り当てたポートを解放し、出力をやめます。 |
I2C
M5StackのGrove-Aポート(I2C)を制御するクラスです。 あらかじめ M5.Begin()でI2C通信が初期化されている必要があります。
API | 機能 |
writeCommand() | 指定のアドレスに書きこみます。 パラメータがない場合に使います。 |
writeByte() | 指定のアドレスに書きこみます。 パラメータ1つある場合に使います。 |
writeBytes() | 指定のアドレスに書きこみます。 パラメータが複数ある場合に使います。 |
readByte() | 指定のアドレスから読み込みます。 読み込み前に送信するデータがなく、返答が1バイトの場合に使います。 |
readByte() | 指定のアドレスから読み込みます。 読み込み前に送信するデータが機能アドレスのみで、返答が1バイトの場合に使います。 |
readBytes() | 指定のアドレスから読み込みます。 読み込み前に送信するデータがなく、返答が複数ある場合に使います。 |
readBytes() | 指定のアドレスから読み込みます。 読み込み前に送信するデータが機能アドレスのみで、返答が複数ある場合に使います。 |
M5.I2C.scanID() | I2Cバス上のデバイス存在確認をおこないます。 |
まとめ
ここでは、M5stackのAPIを紹介しました。
コメント