M5: C 言語による開発(基本)
サンプル
基本構造
初期化処理を setup()
関数に、繰り返し処理を loop()
関数に記述します。
#include <Arduino.h>
void setup()
{
// 初期化処理を記述
}
void loop()
{
// ループ処理を記述
}
APIs
M5 デバイスを制御するためのライブラリは機種ごとに分かれているため、適切なライブラリを選択して使用する必要があります。以下はその一部です。使用できる機能だけでなく、インクルードするヘッダファイルや使い方も微妙に異なっていたりするので、人のソースを参考にする場合は特に注意しましょう。
- M5Stack Core : m5stack/M5Stack
- M5Stack Core2 : m5stack/M5Core2
- M5StickC : m5stack/M5StickC
- M5StickC-Plus : m5stack/M5StickCPlus
- M5Paper : m5stack/M5EPD
- ATOM : m5stack/M5Atom
- ATOM-S3 : m5stack/M5AtomS3
M5Unified
標準のライブラリを使用する場合、複数の機種に対応するプログラムを作るには機種マクロで処理を切り分ける必要がありますが、ハードウェアの違いを吸収し統一して使用できるようにした M5Unified ライブラリができました。
#include <Arduino.h>
#include <M5Unified.h>
void setup()
{
auto cfg = M5.config();
M5.begin(cfg); // M5デバイスの初期化
}
void loop()
{
delay(1000);
}
文字の描画
LCD の場合
#include <M5Stack.h>
void setup()
{
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
M5.Lcd.setCursor(10, 10);
M5.Lcd.setTextSize(2);
M5.Lcd.print("Hello, M5Stack");
}
M5Paper の場合 (参考: EPD Driver)
#include <M5EPD.h>
void setup()
{
M5.begin();
M5EPD_Canvas canvas(&M5.EPD);
canvas.createCanvas(500, 300); // キャンバスを作成 (500×300px)
canvas.setTextSize(3);
canvas.drawString("Hello M5Paper!", 0, 20);
canvas.pushCanvas(100, 100, UPDATE_MODE_DU); // キャンバスを画面に反映
}
画像の描画
LCD の場合
M5Paper の場合
#include <M5Stack.h>
#include <M5EPD.h>
void draw()
{
M5EPD_Canvas canvas(&M5.EPD);
canvas.createCanvas(540, 960);
canvas.drawBmpFile(SD, "/inaba.bmp", 0, 0);
canvas.pushCanvas(0, 0, UPDATE_MODE_GC16);
}
無線 LAN 接続
#include <Arduino.h>
#include <WiFi.h>
void wifiConnect()
{
WiFi.begin(WIFI_SSID, WIFI_PASSPHRASE);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
}
HTTP 通信
#include <Arduino.h>
#include <M5Stack.h>
#include <HTTPClient.h>
void printUrl(const char *url)
{
HTTPClient http;
http.begin(url);
int statusCode = http.GET();
if (statusCode == HTTP_CODE_OK)
{
M5.Lcd.print(http.getString());
} else {
M5.Lcd.printf("%d %s\n", statusCode, http.errorToString(statusCode).c_str());
}
http.end();
}
void showImageFromUrl(const char* url, const char *filePath)
{
HTTPClient http;
http.begin(url);
int statusCode = http.GET();
if (statusCode == HTTP_CODE_OK) {
File file = SD.open(filePath, FILE_WRITE);
if (file) {
http.writeToStream(&file);
file.close();
} else {
M5.Lcd.printf("write failed.");
}
M5.Lcd.clear();
M5.Lcd.drawJpgFile(SD, filePath);
} else {
M5.Lcd.printf("HTTP GET failed: %s\n", http.errorToString(statusCode).c_str());
}
http.end();
}