M5Stack CoreInkでできること 〜ディスプレイに文字を表示する

先日、「M5Stack CoreInk開発キット」用の環境構築を行いました(記事は こちら)。

問題なく動作することが確認できたので、早速スケッチをつくってみようと思います。
今回は、一定時間毎に温度を測定し、その結果をディスプレイに表示する「デジタル温度計」をつくります。


「M5Stack CoreInk」のGROVEポートに「ENV IIIユニット」をつなぎます。


スケッチは以下のとおりです。

#include "M5CoreInk.h"
#include "UNIT_ENV.h"

SHT3X sht30;

Ink_Sprite InkPageSprite(&M5.M5Ink);

void setup() {
  M5.begin(true, true, true); // InkEnable, wireEnable, SpeakerEnable
  if(!M5.M5Ink.isInit()) {
    Serial.printf("Ink Init faild");
  }
  M5.M5Ink.clear();
  if(InkPageSprite.creatSprite(0, 0, 200, 200, true)!=0) {
    Serial.printf("Ink Sprite creat faild");
  }
}

void loop() {
  if(sht30.get()!=0) {
    return;
  }
  float temp = sht30.cTemp;
  float humi = sht30.humidity;
  char strTemp[6], strHumi[6];
  sprintf(strTemp, "%.2f", temp);
  sprintf(strHumi, "%.2f", humi);
  Serial.printf("Temperature: %.2f, Humidity: %.2f\n", temp, humi);
  InkPageSprite.clear();
  InkPageSprite.drawString(20,  20, "Temperature", &AsciiFont8x16);
  InkPageSprite.drawString(20,  40, strTemp, &AsciiFont24x48);
  InkPageSprite.drawString(20, 100, "Humidity", &AsciiFont8x16);
  InkPageSprite.drawString(20, 120, strHumi, &AsciiFont24x48);
  InkPageSprite.pushSprite();
  delay(15000);
}

15秒毎に温度と湿度を測定し、その結果をディスプレイに表示しています。

折角なので、日本語フォントも表示してみようと思います。
こちら のページにアクセスし、「Code」>「Download ZIP」で「efontライブラリ(1.0.8)」をダウンロードします。
ダウンロードしたデータを解凍し、「Arduino/libraries」の下に設置します。
(ライブラリマネージャを使ってインストールすることもできますが、私が実施した時には最新バージョンが「1.0.7」になっていました。このバージョンをつかうとコンパイル時にエラーが発生してしまったため、今回は上記の手順でライブラリをインストールしています。)

スケッチは以下のとおりです。

#include "M5CoreInk.h"
#include "UNIT_ENV.h"
#include "efontEnableJaMini.h"
#include "efont.h"
#include "efontM5StackCoreInk.h"

SHT3X sht30;

Ink_Sprite InkPageSprite(&M5.M5Ink);

void setup() {
  M5.begin(true, true, true); // InkEnable, wireEnable, SpeakerEnable
  if(!M5.M5Ink.isInit()) {
    Serial.printf("Ink Init faild");
  }
  M5.M5Ink.clear();
  if(InkPageSprite.creatSprite(0, 0, 200, 200, true)!=0) {
    Serial.printf("Ink Sprite creat faild");
  }
}

void loop() {
  if(sht30.get()!=0) {
    return;
  }
  float temp = sht30.cTemp;
  float humi = sht30.humidity;
  char strTemp[6], strHumi[6];
  sprintf(strTemp, "%.2f", temp);
  sprintf(strHumi, "%.2f", humi);
  Serial.printf("Temperature: %.2f, Humidity: %.2f\n", temp, humi);
  InkPageSprite.clear();
  printEfont(&InkPageSprite, "温度", 20, 20, 1, 0);
  printEfont(&InkPageSprite, strTemp, 20, 40, 3, 0);
  printEfont(&InkPageSprite, "°C");
  printEfont(&InkPageSprite, "湿度", 20, 100, 1, 0);
  printEfont(&InkPageSprite, strHumi, 20, 120, 3, 0);
  printEfont(&InkPageSprite, "%");
  InkPageSprite.pushSprite();
  delay(15000);
}

日本語フォントも表示することができました。


なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。


このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。