18."03.CoreInkのサンプル"(修正)


18."03.CoreInkのサンプル"(修正)

しばらくぶりにCoreInkを接続したらボード名が消えていました。

M5Stackのボード管理

Arduino IDE 1.8.19 > ファイル > 環境設定 > 設定タブ > 追加のボードマネージャのURL欄の右端のアイコンをクリック >
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
を追加するようにコピー(Ctrl + v) > OK > OK
ツール > ボード > ボードマネージャ... > M5Stackで検索
M5Stack by M5Stack official 2.0.2に更新 > 閉じる
ツール > ボード > M5Stack Arduino > M5Stack-CoreInk を選ぶ

ライブラリの更新

Arduino-IDE > スケッチ > ライブラリをインクルード > ライブラリを管理... > "CoreInk"で検索
M5-CoreInk by Hades 0.0.3
は最新のものでした。

Wio Terminalで天気予報を表示させようと思い、以前作ったCoreInkのスケッチを再動作させたら、エラーになってしまいました。他も調べたらエラーになったのはCoreInkで03-05,07,09,11-14,16の10個もありました。
ここでは、"03.M5Stak CoreInkのサンプル"を修正します。

Button

PowerDown() でエラー
shutdown() に変更しました。

// 機能ボタン・上面ボタン・電源onボタンでoffの表示
// 2022/2/16変更 API変更 PowerDown() -> shutdown()
#include "M5CoreInk.h"                   // CoreInkを使用 
Ink_Sprite InkPageSprite(&M5.M5Ink);     //
void ButtonTest(char* str) {             // 画面表示の関数
  InkPageSprite.clear();                 //
  InkPageSprite.drawString(35, 59, str); // (x,y)に文字列を描く
  InkPageSprite.pushSprite();            // 画面更新
  delay(2000);                           // 2秒待つ
}
void setup() {
  M5.begin();                         // E-Ink,RTC,I2C,ブザーを初期化
  if ( !M5.M5Ink.isInit()) {          // 初期化出来なければ
    Serial.printf("Ink Init faild");  // PCのシリアルモニタにエラー表示
  }
  M5.M5Ink.clear();                   // 画像クリア ここまではお決まり
  delay(1000);                        // 1秒待つ
  if ( InkPageSprite.creatSprite(0, 0, 200, 200, true) != 0 ) {
    // 画像領域が作成できなければ
    Serial.printf("Ink Sprite creat faild");  // PCのシリアルモニタにエラー表示
  }
}
void loop() {
  if ( M5.BtnUP.wasPressed()) ButtonTest("Btn UP Pressed");     //ボタンを上に回したら表示
  if ( M5.BtnDOWN.wasPressed()) ButtonTest("Btn DOWN Pressed"); //ボタンを下に回したら表示
  if ( M5.BtnMID.wasPressed()) ButtonTest("Btn MID Pressed");   //ボタンを押し込んだら表示
  if ( M5.BtnEXT.wasPressed()) ButtonTest("Btn EXT Pressed");   //上面ボタンを押したら表示
  if ( M5.BtnPWR.wasPressed()) {    // 電源ボタンを押したら(電源off)
    ButtonTest("Btn PWR Pressed");  // 表示関数へ
    //M5.PowerDown();//しばらくすると上面緑LED消灯。表示は薄くならない。電源onは電源ボタンを押す。
    M5.shutdown();  // しばらくすると上面緑LED消灯。表示は薄くならない。電源onは電源ボタンを押す。
  }
  M5.update();                      // ボタンとブザーを更新
}
* フラッシュメモリの13%を使用。

RTC_BM8563

M5.rtc.GetData(&RTCDate) でエラー
"Data" → "Date" に2点修正しました。
サンプルファイル名と同じファイルで作っていたので途中ごちゃごちゃになってしまったのかもしれません。

// 日付と時刻構造体の表示
// 2022/2/16 誤記2点修正 Data → Date
#include "M5CoreInk.h"                // CoreInkを使用
Ink_Sprite InkPageSprite(&M5.M5Ink);  //
RTC_TimeTypeDef RTCtime;              // 定義
RTC_DateTypeDef RTCDate;              // 定義
char timeStrbuff[64];                 // 64文字の配列の宣言

void flushTime() {           // 現在時刻を画面表示
  M5.rtc.GetTime(&RTCtime);  // RTC時刻構造体を取得
  //M5.rtc.GetData(&RTCDate);  // RTC日付構造体を取得
  M5.rtc.GetDate(&RTCDate);  // RTC日付構造体を取得
  sprintf(timeStrbuff, "%d/%02d/%02d %02d:%02d:%02d",
          RTCDate.Year, RTCDate.Month, RTCDate.Date,
          RTCtime.Hours, RTCtime.Minutes, RTCtime.Seconds); //文字列を作る
  InkPageSprite.drawString(10, 100, timeStrbuff);  // (x,y)に文字列を描く
  InkPageSprite.pushSprite();                      // 画面更新
}

void setupTime() {           // 年月日時分秒構造体設定
  RTCtime.Hours = 12;        // 時
  RTCtime.Minutes = 13;      // 分
  RTCtime.Seconds = 14;      // 秒
  M5.rtc.SetTime(&RTCtime);  // RTC時刻構造体を設定
  RTCDate.Year = 2022;       // 年
  RTCDate.Month = 2;         // 月
  RTCDate.Date = 16;         // 日
  //M5.rtc.SetData(&RTCDate);  // RTC日付構造体を設定
  M5.rtc.SetDate(&RTCDate);  // RTC日付構造体を設定
}

void setup() {
  M5.begin();                         // E-Ink,RTC,I2C,ブザーを初期化
  if ( !M5.M5Ink.isInit()) {          // 初期化出来なければ
    Serial.printf("Ink Init faild");  // PCのシリアルモニタにエラー表示
    while (1) delay(100);             // ずっと待つ
  }
  M5.M5Ink.clear();                  // 画像クリア
  delay(1000);                       // 1秒待つ
  if ( InkPageSprite.creatSprite(0, 0, 200, 200, true) != 0 ) {//画像領域が作成できなければ
    Serial.printf("Ink Sprite creat faild");  //PCのシリアルモニタにエラー表示
  }
  setupTime();                       // 記入した時刻に設定
}
void loop() {
  flushTime();                       // 現在時刻を表示する関数へ
  delay(15000);                      // 15秒ごとに時刻更新(最小間隔)
}
* フラッシュメモリの13%を使用。