Skip to content

Commit

Permalink
消去できない場合の暫定対策
Browse files Browse the repository at this point in the history
  • Loading branch information
bokunimowakaru committed Feb 15, 2024
1 parent 3cbd910 commit a071ea6
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 5 deletions.
25 changes: 20 additions & 5 deletions core_ink/ex05_hum_graph/ex05_hum_graph.ino
Original file line number Diff line number Diff line change
Expand Up @@ -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); // 棒グラフ描画用の設定
Expand Down Expand Up @@ -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);
Expand All @@ -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
}

Expand Down
77 changes: 77 additions & 0 deletions core_ink/ex05_hum_graph/lib_ink_test.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#include <M5CoreInk.h> // 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(); //
}
}

0 comments on commit a071ea6

Please sign in to comment.