EPD Driver

M5PAPERは、4.7インチの電子ペーパーディスプレイを搭載し、その解像度は540x960で、16階調のグレースケール表示をサポートしています。初期化の過程で、インスタンスが作成され初期化が完了しました。以下の画面駆動を利用することで、内容描画のデータを画面に送信できます。

begin()

機能です:

I2Cバスを初期化

原型関数です:

m5epd_err_t begin(int8_t sck, int8_t mosi, int8_t miso, int8_t cs, int8_t busy, int8_t rst = -1)

使用示例:

#include <M5EPD.h>

void setup() {
    M5.EPD.begin(M5EPD_SCK_PIN, M5EPD_MOSI_PIN, M5EPD_MISO_PIN, M5EPD_CS_PIN,
                 M5EPD_BUSY_PIN);
}

void loop() {}

Clear()

機能です:

画面内容をクリア

パラメータです 記述します
true 使用UPDATE_MODE_INIT模式初始化屏幕
false 清除8951缓存区

原型関数です:

m5epd_err_t Clear(bool init = false)

使用示例:

#include <M5EPD.h>

void setup() {
    M5.begin();
    M5.EPD.Clear(true);
}

void loop() {}

SetRotation()

機能です:

画面の回転角度を設定/通常は90°に設定

原型関数です:

m5epd_err_t SetRotation(uint16_t rotate = IT8951_ROTATE_0)

使用示例:

#include <M5EPD.h>

void setup() {
    M5.begin();
    M5.EPD.Clear(true);
    M5.EPD.SetRotation(90);
}

void loop() {}

GetRotate()

機能です:

画面の回転角度を読み取る

原型関数です:

uint8_t GetRotate(void)

GetDirection()

機能です:

画面の方向を読み取る

原型関数です:

uint8_t GetDirection(void)

UpdateFull()

機能です:

指定のモードで、バッファー内のデータを全画面にリフレッシュ

原型関数です:

m5epd_err_t UpdateFull(m5epd_update_mode_t mode)

UpdateArea()

機能です:

指定のモードで、バッファー内のデータを画面の指定領域にリフレッシュ

原型関数です:

m5epd_err_t UpdateArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h, m5epd_update_mode_t mode)

UpdateCount()

機能です:

リフレッシュ回数を取得

原型関数です:

uint16_t UpdateCount(void)

ResetUpdateCount()

機能です:

リフレッシュ回数をリセット

原型関数です:

void CheckAFSR(void)

CheckAFSR()

機能です:

8951の忙碌状態を検出

原型関数です:

m5epd_err_t CheckAFSR(void)

SetColorReverse()

機能です:

色反転を設定

原型関数です:

void SetColorReverse(bool is_reverse)

WriteFullGram4bpp()

機能です:

一フレームのデータを完全に書き込む/1ピクセル当たり4bit

原型関数です:

m5epd_err_t WriteFullGram4bpp(const uint8_t *gram)

WritePartGram4bpp()

機能です:

指定の領域に局部データを書き込む/1ピクセル当たり4bit

原型関数です:

m5epd_err_t WritePartGram4bpp(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint8_t *gram)

FillPartGram4bpp()

機能です:

指定の領域を指定のデータで塗りつぶす

原型関数です:

m5epd_err_t FillPartGram4bpp(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t data)

Canvas

本ライブラリは、図形描画を行うためのクラスを利用し、その中に多種多様の描画APIが用意されています(文字列、矩形、三角形、円形、画像データ等の描画を含む)。利用前に、Canvasのインスタンスを作成し、画面駆動を渡す必要があります。下記のコードを参考にしてください。

#include <M5EPD.h>

M5EPD_Canvas canvas(&M5.EPD);

刷新模式

利用時、リフレッシュモードのパラメータを渡す必要があります。本ライブラリ中、いくつかの異なるリフレッシュモードが定義されています。以下にそれらの特徴を説明します。


typedef enum
{                             //   Ghosting  Update Time  Usage
    UPDATE_MODE_INIT    = 0,  // * N/A       2000ms       显示屏初始化,
    UPDATE_MODE_DU      = 1,  //   Low       260ms        适合单色菜单,文本输入, 触摸反馈 1bit黑白,存在残影。
    UPDATE_MODE_GC16    = 2,  // * Very Low  450ms        适合高质量图像显示 先黑闪后刷新
    UPDATE_MODE_GL16    = 3,  // * Medium    450ms        适合白色背景的文本显示 不黑闪
    UPDATE_MODE_GLR16   = 4,  //   Low       450ms        适合白色背景的文本显示 不黑闪
    UPDATE_MODE_GLD16   = 5,  //   Low       450ms        适合白色背景的文本和图形显示 不黑闪
    UPDATE_MODE_DU4     = 6,  // * Medium    120ms        降低对比度,适合需要快速翻页切换的情况 1bit黑白 稍微比DU快一点,残影相对DU较大
    UPDATE_MODE_A2      = 7,  //   Medium    290ms        适合菜单,触摸反馈,抗锯齿文字 2bit灰度,存在残影
    UPDATE_MODE_NONE    = 8   //                          上传至8951缓存区 不刷新,可以积累上传多次,然后一次刷新所有内容。
} m5epd_update_mode_t;        // 以上标注了`*`符号的为较为常用的刷新模式

リフレッシュ品質のよいものは、以下、以下、以下、等ですUPDATE_MODE_GC16,UPDATE_MODE_GL16 , UPDATE_MODE_GLR16 , UPDATE_MODE_GLD16
M5Paper採用の電子ペーパーディスプレイは、16階調のグレースケール表示をサポートし、以下APIのパラメータの有効範囲は

image2gray tool

createCanvas()

機能です:

Canvasの作成(描画を始める前、Canvasのインスタンスを用いて描画領域を作成する必要があります)

原型関数です:

void *createCanvas(int16_t width, int16_t height, uint8_t frames = 1)

使用示例:

#include <M5EPD.h>

M5EPD_Canvas canvas(&M5.EPD);

void setup() {
    M5.begin();
    M5.EPD.SetRotation(90);
    M5.EPD.Clear(true);
    M5.RTC.begin();
    canvas.createCanvas(500, 300);  // Create a 500*300 drawing area. 创建500*300的绘制区域
}

void loop() {}

deleteCanvas()

機能です:

Canvasを削除し、メモリを解放

原型関数です:

void deleteCanvas(void)

使用示例:

#include <M5EPD.h>

M5EPD_Canvas canvas(&M5.EPD);

void setup() {
    M5.begin();
    M5.EPD.SetRotation(90);
    M5.EPD.Clear(true);
    M5.RTC.begin();
    canvas.createCanvas(500, 300);  // Create a 500*300 drawing area. 创建500*300的绘制区域
    canvas.deleteCanvas();  // Delete the drawing area. 删除绘制区域
}

void loop() {}

推送Canvas

描画APIを使ってコンテンツの描画が完了したら、pushAPIを使って描画領域を画面にプッシュします。プッシュ後は画面駆動でリフレッシュ描画に時間がかかります。描画が完了するまでシャットダウン作業は避けます。

// Re-implement functions

frameBuffer()

機能です:

Canvasのバッファーポインタを取得

原型関数です:

void *frameBuffer(int8_t f = 1)

pushCanvas()

機能です:

Canvasを画面の0,0位置にプッシュし、指定のリフレッシュモードを指定

Canvasを画面の指定領域にプッシュし、指定のリフレッシュモードを指定

原型関数です:

void pushCanvas(m5epd_update_mode_t mode)

void pushCanvas(int32_t x, int32_t y, m5epd_update_mode_t mode)

使用示例:

#include <M5EPD.h>

M5EPD_Canvas canvas(&M5.EPD);

void setup() {
    M5.begin();
    M5.EPD.Clear(true);
    M5.RTC.begin();
    canvas.createCanvas(500, 300);  // Create a 500*300 drawing area. 创建500*300的绘制区域
    canvas.setTextSize(3);
    canvas.drawString("Hello World!", 0, 0);
    canvas.drawString("Hello M5Stack!", 0, 20);
    canvas.pushCanvas(100, 100, UPDATE_MODE_DU4);  // Push the canvas to display. 推送画布到屏幕
}

void loop() {}

pushToCanvas()

機能です:

指定のCanvasに描画

原型関数です:

void pushToCanvas(int32_t x, int32_t y, M5EPD_Canvas* canvas)

常用API

fillCanvas()

機能です:

指定の色で描画領域を塗りつぶす

原型関数です:

void fillCanvas(uint32_t color)

使用示例:

#include <M5EPD.h>

M5EPD_Canvas canvas(&M5.EPD);

void setup() {
    M5.begin();
    M5.EPD.Clear(true);
    M5.RTC.begin();
    canvas.createCanvas(500, 300);  // Create a 500*300 drawing area. 创建500*300的绘制区域
    canvas.setTextSize(3);
    canvas.fillCanvas(0xFFFF);  // Fill the drawn area with black. 以黑色填充绘制区域
    canvas.pushCanvas(100, 100, UPDATE_MODE_DU4);  // Push the canvas to display. 推送画布到屏幕
}

void loop() {}

pushImage()

機能です:

Bufferデータをプッシュ

原型関数です:

void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint8_t *data) void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint8_t transp, const uint8_t *data)

readPixel()

機能です:

ピクセル点の色を読み取る

原型関数です:

uint16_t readPixel(int32_t x, int32_t y)

使用示例:

#include <M5EPD.h>

M5EPD_Canvas canvas(&M5.EPD);

void setup() {
    M5.begin();
    M5.EPD.Clear(true);
    M5.RTC.begin();
    canvas.createCanvas(500, 300);  // Create a 500*300 drawing area. 创建500*300的绘制区域
    canvas.setTextSize(3);
    canvas.fillCanvas(0xFFFF);  // Fill the drawn area with black. 以黑色填充绘制区域
    canvas.pushCanvas(100, 100, UPDATE_MODE_DU4);  // Push the canvas to display. 推送画布到屏幕
    Serial.print(canvas.readPixel(100, 100));
}

void loop() {}

drawPixel()

機能です:

ピクセル点を描画

原型関数です:

void drawPixel(int32_t x, int32_t y, uint32_t color)

fillCenterSquare()

機能です:

中心点を用いて正方形を描画

原型関数です:

void fillCenterSquare(int32_t cx, int32_t cy, uint16_t w, uint8_t color)

qrcode()

機能です:

QRコードを描画

原型関数です:

void qrcode(const char *string, uint16_t x = 50, uint16_t y = 10, uint16_t width = 220, uint8_t version = 6)

void qrcode(const String &string, uint16_t x = 50, uint16_t y = 10, uint16_t width = 220, uint8_t version = 6)

getBufferSize()

機能です:

現在のCanvas画像のBufferのサイズを読み取る

原型関数です:

uint32_t getBufferSize(void)

ReverseColor()

機能です:

色反転を設定

原型関数です:

void ReverseColor(void)

ReversePartColor()

機能です:

局部の色反転を設定

原型関数です:

void ReversePartColor(int32_t x, int32_t y, int32_t w, int32_t h)

operator()

機能です:

Canvasのコピー

原型関数です:

void operator=(const M5EPD_Canvas &src)

setDriver()

機能です:

画面駆動を設定

原型関数です:

void setDriver(M5EPD_Driver *driver)

JPG/BMP/PNG

機能です:使用Bmp文件数据绘制图像

bool drawBmpFile(fs::FS &fs, const char *path, uint16_t x, uint16_t y);
bool drawBmpFile(fs::FS &fs, String path, uint16_t x, uint16_t y);

機能です:使用Jpg文件数据绘制图像

bool drawJpgFile(fs::FS &fs, const char *path, uint16_t x = 0,
                uint16_t y = 0, uint16_t maxWidth = 0, uint16_t maxHeight = 0,
                uint16_t offX = 0, uint16_t offY = 0,
                jpeg_div_t scale = JPEG_DIV_NONE);

bool drawJpgFile(fs::FS &fs, String path, uint16_t x = 0,
                uint16_t y = 0, uint16_t maxWidth = 0, uint16_t maxHeight = 0,
                uint16_t offX = 0, uint16_t offY = 0,
                jpeg_div_t scale = JPEG_DIV_NONE);

機能です:使用Png文件数据绘制图像

bool drawPngFile(fs::FS &fs, const char *path, uint16_t x = 0, uint16_t y = 0,
                uint16_t maxWidth = 0, uint16_t maxHeight = 0,
                uint16_t offX = 0, uint16_t offY = 0,
                double scale = 1.0, uint8_t alphaThreshold = 127);

bool drawPngFile(fs::FS &fs, String path, uint16_t x = 0, uint16_t y = 0,
                uint16_t maxWidth = 0, uint16_t maxHeight = 0,
                uint16_t offX = 0, uint16_t offY = 0,
                double scale = 1.0, uint8_t alphaThreshold = 127);

機能です:使用内存Jpg数据绘制图像

bool drawJpg(const uint8_t *jpg_data, size_t jpg_len, uint16_t x = 0,
                uint16_t y = 0, uint16_t maxWidth = 0, uint16_t maxHeight = 0,
                uint16_t offX = 0, uint16_t offY = 0,
                jpeg_div_t scale = JPEG_DIV_NONE);

機能です:使用Jpg的Url/网络资源数据绘制图像

bool drawJpgUrl(String url, uint16_t x = 0,
                        uint16_t y = 0, uint16_t maxWidth = 0, uint16_t maxHeight = 0,
                        uint16_t offX = 0, uint16_t offY = 0, jpeg_div_t scale = JPEG_DIV_NONE);

機能です:使用Png的Url/网络资源数据绘制图像

bool drawPngUrl(const char *url, uint16_t x = 0, uint16_t y = 0,
            uint16_t maxWidth = 0, uint16_t maxHeight = 0,
            uint16_t offX = 0, uint16_t offY = 0,
            double scale = 1.0, uint8_t alphaThreshold = 127);

使用示例:

#include <M5EPD.h>
#include <WiFi.h>


void setup()
{
    M5.begin();
    M5.EPD.SetRotation(90);
    M5.EPD.Clear(true);
    WiFi.begin("WIFI-SSID", "WIFI-PASSWORD");

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    canvas.createCanvas(540, 960);
    canvas.setTextSize(3);
    canvas.drawJpgUrl("https://m5stack.oss-cn-shenzhen.aliyuncs.com/image/example_pic/flower.jpg");
    canvas.pushCanvas(0,0,UPDATE_MODE_GC16);
}

void loop()
{
}

Text

以下は、常用のテキスト描画APIです。

setTextColor()

機能です:

文字色を設定

原型関数です:

void setTextColor(uint16_t color)

void setTextColor(uint16_t fgcolor, uint16_t bgcolor)

setTextSize()

機能です:

文字のサイズを設定

原型関数です:

void setTextSize(uint8_t size)

setTextWrap()

機能です:

文字の改行を設定

原型関数です:

void setTextWrap(boolean wrapX, boolean wrapY = false)

setTextDatum()

機能です:

文字のベースラインを設定

原型関数です:

void setTextDatum(uint8_t datum)

setTextPadding()

機能です:

文字のマージンを設定

原型関数です:

void setTextPadding(uint16_t x_width)

setTextArea()

機能です:

文字の出力領域を設定し、printfを用いてその領域内に文字を出力。文字は自動的に改行します。

原型関数です:

void setTextArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)

setTextFillMargin()

機能です:

文字列の背景色の塗りつぶしのマージンを設定

原型関数です:

void setTextFillMargin(uint16_t left, uint16_t right, int16_t top, int16_t bottom)

setTextLineSpace()

機能です:

printfで文字列を出力時、自動改行の行間隔を設定

原型関数です:

void setTextLineSpace(uint8_t space)

loadFont()

機能です:

ファイルシステムからTTFフォントファイルをロード、SPIFFSとSDをサポート

原型関数です:

esp_err_t loadFont(String path, fs::FS &ffs)

loadFont()

機能です:

指针からバイナリ配列を読み込みTTFファイルをロード(大型TTFファイルはサポートされない)

原型関数です:

esp_err_t loadFont(const uint8_t *memory_ptr, uint32_t length)

unloadFont()

機能です:

TTFファイルをアンロード

原型関数です:

esp_err_t unloadFont()

createRender()

機能です:

指定サイズのTTFレンダラーを作成、キャッシュサイズはオプション。大型のキャッシュはより多くのレンダリング済みのフォントをキャッシュでき、大量の文字をレンダリング時の性能を大幅に改善できる。キャッシュは字形の使用頻度を優先順位にして字形の格納を自動的に調整する。

原型関数です:

esp_err_t createRender(uint16_t size, uint16_t cache_size = 1)

destoryRender()

機能です:

指定サイズのTTFレンダラーを破棄

原型関数です:

esp_err_t destoryRender(uint16_t size)

preRender()

機能です:

指定の文字を事前にレンダリングしてキャッシュに保存

原型関数です:

esp_err_t preRender(uint16_t code)

isRenderExist()

機能です:

指定サイズのレンダラーの存在を確認

原型関数です:

bool isRenderExist(uint16_t size)

getNumOfRender()

機能です:

既存のレンダラーの数を取得

原型関数です:

uint32_t getNumOfRender(void)

useFreetypeFont()

機能です:

TTFレンダラーの使用を設定/解除

原型関数です:

void useFreetypeFont(bool isuse = true)

drawNumber()

機能です:

整数を描画

原型関数です:

int16_t drawNumber(long long_num, int32_t poX, int32_t poY, uint8_t font)

int16_t drawNumber(long long_num, int32_t poX, int32_t poY)

drawFloat()

機能です:

浮動小数点数を描画

原型関数です:

int16_t drawFloat(float floatNumber, uint8_t decimal, int32_t poX, int32_t poY, uint8_t font)

int16_t drawFloat(float floatNumber, uint8_t decimal, int32_t poX, int32_t poY)

drawString()

機能です:

文字列を描画

原型関数です:

int16_t drawString(const char *string, int32_t poX, int32_t poY, uint8_t font)

int16_t drawString(const char *string, int32_t poX, int32_t poY)

int16_t drawString(const String &string, int32_t poX, int32_t poY, uint8_t font)

int16_t drawString(const String &string, int32_t poX, int32_t poY)

decodeUTF8()

機能です:

UTF8文字列をデコード/Unicode値を返却

原型関数です:

uint16_t decodeUTF8(uint8_t *buf, uint16_t *index, uint16_t remaining)

uint16_t decodeUTF8(uint8_t *buf, uint16_t *index, uint16_t remaining, uint8_t *length)

drawChar()

機能です:

文字を描画

原型関数です:

int16_t drawChar(uint16_t uniCode, int32_t x, int32_t y)

int16_t drawChar(uint16_t uniCode, int32_t x, int32_t y, uint8_t font)

void drawChar(int32_t x, int32_t y, uint16_t c, uint32_t color, uint32_t bg, uint8_t size)

textWidth()

機能です:

テキストの幅を取得 原型関数です:

int16_t textWidth(const char *string, uint8_t font)

int16_t textWidth(const char *string)

int16_t textWidth(const String& string, uint8_t font)

int16_t textWidth(const String& string)

Drawing

以下は常用の描画API。

// Parent functions drawing

drawCircle()

機能です:

円を描画

原型関数です:

void drawCircle(int32_t x0, int32_t y0, int32_t r, uint32_t color)

drawCircleHelper()

機能です:

円描画助手

原型関数です:

void drawCircleHelper(int32_t x0, int32_t y0, int32_t r, uint8_t cornername, uint32_t color)

fillCircle()

機能です:

塗りつつまみの円を描画

原型関数です:

void fillCircle(int32_t x0, int32_t y0, int32_t r, uint32_t color)

fillCircleHelper()

機能です:

塗りつつまみの円描画助手

原型関数です:

void fillCircleHelper(int32_t x0, int32_t y0, int32_t r, uint8_t cornername, int32_t delta, uint32_t color)

drawLine()

機能です:

直線を描画

原型関数です:

void drawLine(int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t color)

void drawLine(int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint8_t thickness, uint8_t color)

drawFastVLine()

機能です:

垂直直線を迅速描画

原型関数です:

void drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color)

void drawFastVLine(int32_t x, int32_t y, int32_t h, uint8_t thickness, uint8_t color)

drawEllipse()

機能です:

椭圆を描画

原型関数です:

void drawEllipse(int16_t x0, int16_t y0, int32_t rx, int32_t ry, uint16_t color)

fillEllipse()

機能です:

塗りつつまみの椭圆を描画

原型関数です:

void fillEllipse(int16_t x0, int16_t y0, int32_t rx, int32_t ry, uint16_t color)

drawRect()

機能です:

長方形を描画

原型関数です:

void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)

fillRect()

機能です:

塗りつつまみの長方形を描画

原型関数です:

void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)

drawRoundRect()

機能です:

角丸の長方形を描画

原型関数です:

void drawRoundRect(int32_t x0, int32_t y0, int32_t w, int32_t h, int32_t radius, uint32_t color)

fillRoundRect()

機能です:

塗りつつまみの角丸長方形を描画

原型関数です:

void fillRoundRect(int32_t x0, int32_t y0, int32_t w, int32_t h, int32_t radius, uint32_t color)

drawTriangle()

機能です:

三角形を描画

原型関数です:

void drawTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint32_t color)

fillTriangle()

機能です:

绘制填充塗りつつまみの三角形を描画三角形

原型関数です:

void fillTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint32_t color)

print

以下はprintのフォーマット出力に関する関数のオーバーロード。

// Parent functions Print size_t printf(const char * format, ...) __attribute__ ((format (printf, 2, 3)))

size_t print(const __FlashStringHelper *x)

size_t print(const String &x)

size_t print(const char x[])

size_t print(char x)

size_t print(unsigned char x, int y = DEC)

size_t print(int x, int y = DEC)

size_t print(unsigned int x, int y = DEC)

size_t print(long x, int y = DEC)

size_t print(unsigned long x, int y = DEC)

size_t print(double x, int y = 2)

size_t print(const Printable& x)

size_t print(struct tm * timeinfo, const char * format = NULL)

size_t println(const __FlashStringHelper *x)

size_t println(const String &x)

size_t println(const char x[])

size_t println(char x)

size_t println(unsigned char x, int y = DEC)

size_t println(int x, int y = DEC)

size_t println(unsigned int x, int y = DEC)

size_t println(long x, int y = DEC)

size_t println(unsigned long x, int y = DEC)

size_t println(double x, int y = 2)

size_t println(const Printable& x)

size_t println(struct tm * timeinfo, const char * format = NULL)

size_t println(void)

On This Page