先日、「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の使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
リンク
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。
リンク