コンテンツにスキップ

M5: C 言語による開発(基本)

サンプル

基本構造

初期化処理を setup() 関数に、繰り返し処理を loop() 関数に記述します。

#include <Arduino.h>

void setup()
{
    // 初期化処理を記述
}

void loop()
{
    // ループ処理を記述
}

APIs

参考) M5Stack Developer Center

M5 デバイスを制御するためのライブラリは機種ごとに分かれているため、適切なライブラリを選択して使用する必要があります。以下はその一部です。使用できる機能だけでなく、インクルードするヘッダファイルや使い方も微妙に異なっていたりするので、人のソースを参考にする場合は特に注意しましょう。

M5Unified

参考) 5Unifiedライブラリの始め方

標準のライブラリを使用する場合、複数の機種に対応するプログラムを作るには機種マクロで処理を切り分ける必要がありますが、ハードウェアの違いを吸収し統一して使用できるようにした 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();
}

その他