From a071ea64279fa78143caadf82e2abf214452f7e5 Mon Sep 17 00:00:00 2001 From: Wataru KUNINO Date: Thu, 15 Feb 2024 21:52:28 +0900 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E5=8E=BB=E3=81=A7=E3=81=8D=E3=81=AA?= =?UTF-8?q?=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AE=E6=9A=AB=E5=AE=9A=E5=AF=BE?= =?UTF-8?q?=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core_ink/ex05_hum_graph/ex05_hum_graph.ino | 25 +++++-- core_ink/ex05_hum_graph/lib_ink_test.ino | 77 ++++++++++++++++++++++ 2 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 core_ink/ex05_hum_graph/lib_ink_test.ino diff --git a/core_ink/ex05_hum_graph/ex05_hum_graph.ino b/core_ink/ex05_hum_graph/ex05_hum_graph.ino index 3e85489..6087983 100644 --- a/core_ink/ex05_hum_graph/ex05_hum_graph.ino +++ b/core_ink/ex05_hum_graph/ex05_hum_graph.ino @@ -96,30 +96,38 @@ void setup(){ // 起動時に一度だけ実 } (ここまで)CoreInk側RTC起動時の処理 */ M5.begin(); // M5Stack用ライブラリの起動 + digitalWrite(LED_EXT_PIN, LOW); // LED点灯 + Serial.println("wake = "+String(wake)); // debug + + ink_test(); WiFi.mode(WIFI_STA); // 無線LANをSTAモードに設定 WiFi.begin(SSID,PASS); // 無線LANアクセスポイントへ接続 shtSetup(25,26); // 湿度センサの初期化 while(!M5.M5Ink.isInit()) delay(3000); // Inkの初期化状態確認 + // M5.M5Ink.isInit(); // Inkの初期化状態確認 if(wake != ESP_SLEEP_WAKEUP_TIMER){ // タイマー以外で起動時の処理 + Serial.println("wake = Power ON"); // debug M5.M5Ink.clear(); // Inkを消去 ink_refresh_time = 0; // 消去した時刻を0に - // InkPageSprite.clear(); // 2024/1/9 追加 1/11削除 InkPageSprite.creatSprite(0,0,200,200,0); // 描画用バッファの作成 + ink_test_cls(); // 暫定対策(画面消去) lineGraphInit(&InkPageSprite, 16, 0, 100); // グラフ初期化,縦軸範囲指定 ink_print_init(&InkPageSprite); // テキスト表示用 ink_print ink_print("Example 5 HUM",false); // タイトルの描画 }else if(ink_refresh_time >= 60*60*1000){ // 1時間に1回の処理 M5.M5Ink.clear(); // Inkを消去 ink_refresh_time = 0; // 消去した時刻を0に - // InkPageSprite.clear(); // 2024/1/9 追加 1/11削除 + InkPageSprite.clear(); // 2024/1/9 追加 1/11削除 InkPageSprite.creatSprite(0,0,200,200,0); // 描画用バッファの作成 + ink_test_cls(); // 暫定対策(画面消去) lineGraphSetSprite(&InkPageSprite, 16, 0, 100); // 棒グラフ描画用の設定 ink_print_init(&InkPageSprite); // テキスト表示用 ink_print lineGraphCls(); // グラフ画面の罫線描画 lineGraphRedraw(); // 過去グラフの再描画 ink_print("Example 5 HUM",false); // タイトルの描画 }else{ // タイマー起動時の処理 + Serial.println("wake = ESP_SLEEP_WAKEUP_TIMER"); // debug InkPageSprite.creatSprite(0,0,200,200,0); // 描画用バッファの作成 InkPageSprite.drawFullBuff(PageBuf); // RTCメモリから画像読み込み lineGraphSetSprite(&InkPageSprite, 16, 0, 100); // 棒グラフ描画用の設定 @@ -192,9 +200,10 @@ void sleep(){ // スリープ実行用の関 ink_refresh_time += millis() + SLEEP_P/1000; Serial.println(ink_refresh_time/1000); // debug - digitalWrite(LED_EXT_PIN, HIGH); // LED消灯 // ink_println("Elapsed "+String((float)millis()/1000.,1)+" Seconds"); - if(batt_mv() > 3300 && !M5.BtnPWR.wasPressed()){ // 電圧が3300mV以上のとき + int batt = batt_mv(); // 電池電圧を取得してbattに代入 + if(batt > 3300 && !M5.BtnPWR.wasPressed()){ // 電圧が3300mV以上のとき + digitalWrite(LED_EXT_PIN, HIGH); // LED消灯 /* スリープ中に GPIO12 をHighレベルに維持する(ESP32への電源供給) */ rtc_gpio_init(GPIO_NUM_12); rtc_gpio_set_direction(GPIO_NUM_12,RTC_GPIO_MODE_OUTPUT_ONLY); @@ -214,7 +223,13 @@ void sleep(){ // スリープ実行用の関 M5.shutdown(sec); // タイマー・スリープ */ } // else: - ink_println("Power OFF"); // Inkへメッセージを表示 + ink_println("Power OFF ("+String(batt)+" mV)"); // Inkへメッセージを表示 + /* スリープ中に GPIO12 をLowレベルに維持する(ESP32への電源供給を阻止) */ + rtc_gpio_init(GPIO_NUM_12); + rtc_gpio_set_direction(GPIO_NUM_12,RTC_GPIO_MODE_OUTPUT_ONLY); + rtc_gpio_set_level(GPIO_NUM_12,0); + esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); + digitalWrite(LED_EXT_PIN, LOW); // LED点灯(M5Stackサンプルどおり) M5.shutdown(); // 電源OFF } diff --git a/core_ink/ex05_hum_graph/lib_ink_test.ino b/core_ink/ex05_hum_graph/lib_ink_test.ino new file mode 100644 index 0000000..4f638a0 --- /dev/null +++ b/core_ink/ex05_hum_graph/lib_ink_test.ino @@ -0,0 +1,77 @@ +#include // M5Stack用ライブラリ組み込み +extern Ink_Sprite InkPageSprite; + +void ink_test_cls(){ + /* 全画面消去を分割して実行する(本来は不要な処理のはず) + 画面消去できない事象が発生するようになったので対策。 + deltaで消去エリアの大きさを設定。 + 200(全画面対象)だと消去できないことがある。 + */ + int delta = 25; + for(int y=0;y<200;y+=delta){ + InkPageSprite.FillRect(0,y,200,delta,1); // White + InkPageSprite.pushSprite(); // e-paperに描画 + InkPageSprite.FillRect(0,y,200,delta,0); // Black + InkPageSprite.pushSprite(); // e-paperに描画 + InkPageSprite.FillRect(0,y,200,delta,1); // White + InkPageSprite.pushSprite(); // e-paperに描画 + } +} + +void ink_test(){ + M5.update(); // M5Stack用IO状態の更新 + while(!M5.M5Ink.isInit()) delay(3000); // Inkの初期化状態確認 + if(M5.BtnUP.isPressed()){ + InkPageSprite.creatSprite(0,0,200,200,0); + // InkPageSprite.drawFullBuff(PageBuf); // RTCメモリから画像読み込み + /* 本来は下記で消去できるはず + // InkPageSprite.clear(); + // InkPageSprite.pushSprite(); // e-paperに描画 + 原因不明だが消去できないことがあるので、lib_ink_test.ino内の下記を使用 */ + while(!M5.BtnUP.isReleased()) M5.update(); + ink_test_cls(); // 暫定対策(画面消去) + lineGraphSetSprite(&InkPageSprite, 16, 0, 100); // 棒グラフ描画用の設定 + ink_print_init(&InkPageSprite); // テキスト表示用 ink_print + lineGraphCls(); // グラフ画面の罫線描画 + lineGraphRedraw(); // 過去グラフの再描画 + ink_println("Example 5 HUM"); // タイトルの描画 + ink_printPos(160); // テキスト文字位置を上から160に + ink_println("Screen Cleared (UP btn)"); // Inkへメッセージを表示 + sleep(); // PageBufを更新してスリープ + } + if(M5.BtnMID.isPressed()){ + M5.M5Ink.clear(); // Inkを消去 + InkPageSprite.creatSprite(0,0,200,200,0); + InkPageSprite.drawFullBuff(PageBuf); // RTCメモリから画像読み込み + ink_print_init(&InkPageSprite); // テキスト表示用 ink_print + ink_printPos(160); // テキスト文字位置を上から160に + ink_println("Reset Ink (MID btn)"); // Inkへメッセージを表示 + ink_println("Please release it"); // Inkへメッセージを表示 + while(!M5.BtnMID.isReleased()) M5.update(); + pinMode(0, OUTPUT); + digitalWrite(0, LOW); + delay(3000); + digitalWrite(0, HIGH); + delay(100); + while(!M5.M5Ink.isInit()) delay(3000); // Inkの初期化状態確認 + ink_printPos(160); // テキスト文字位置を上から160に + ink_println("Power is Down ("+String(batt_mv())+" mV)"); + ink_println("Please disconnect USB"); // Inkへメッセージを表示 + sleep(); // PageBufを更新してスリープ + } + if(M5.BtnDOWN.isPressed()){ + InkPageSprite.creatSprite(0,0,200,200,0); + InkPageSprite.drawFullBuff(PageBuf); // RTCメモリから画像読み込み + ink_print_setup(&InkPageSprite); // テキスト表示用 ink_print + ink_printPos(160); // テキスト文字位置を上から160に + ink_println("DOWN button is pressed"); // Inkへメッセージを表示 + ink_println("Please release it"); // Inkへメッセージを表示 + while(!M5.BtnDOWN.isReleased()) M5.update(); + ink_printPos(160); // テキスト文字位置を上から160に + ink_println("Power is Down ("+String(batt_mv())+" mV)"); + ink_println("Please disconnect USB"); // Inkへメッセージを表示 + delay(3000); + memcpy(PageBuf,InkPageSprite.getSpritePtr(),200*200/8); // RTCに保存 + M5.shutdown(); // + } +}