ひとしれずひっそり

主にソフトに関することをメモしていきます。過程をそのまま書いていたりするので間違いが含まれます。鵜呑みしない様に。

1.9インチ 91セグメント I2C電子ペーパモジュール(4)

細かいところを実装。

Wikiに以下の記載がある。

  1. When using the ink screen, it is recommended that the refresh interval be at least 180s, and refresh at least every 24 hours. If the ink screen is not used for a long time, the ink screen should be clear and stored. (Refer to the datasheet for specific storage environment requirements.)

更新は180s以上で、24時間毎にリフレッシュすることを推奨としている。
長時間使用しない場合はクリアーにする。(クリアーは全セグメントOFFでいいのか?)
データシート参照しろとあるがデータシートがどこにあるか分からない。

ということで5分毎に更新し、24時間でリフレッシュする。
リフレッシュもどういうことをするのか分からないので、全OFF、全ON、全OFFとしよう。(初期化が良いのかな?)

void display_refresh()
{
  EPD_1in9_Write_Screen(DSPNUM_1in9_off);
  delay(500);
  EPD_1in9_Write_Screen(DSPNUM_1in9_on);
  delay(500);
  EPD_1in9_Write_Screen(DSPNUM_1in9_off);
  delay(500);
}

もう一つ温度で補正する機能(フレームレートを変えてる様)もあるようなので、温度を渡せる様引数を追加して対応。

void EPD_1in9_Temperature(int temperature=20);

ここまでのコード

M5Stamp picoで1.9inch Segment e-Paper Moduleのサンプルプログラムを試して見る。からの温湿度計に · GitHub


あとはAmbientにデータを送信してソフトとしては完成。

#include <WiFiMulti.h>
#include <Ambient.h>
#include "env.h"

.
.

static WiFiMulti wifiMulti;
static WiFiClient client;
static Ambient ambient;
.
.

void init_wifi() {
  WiFi.disconnect();
  WiFi.softAPdisconnect(true);
  WiFi.mode(WIFI_STA);
  wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
#ifdef WIFI_SSID2
  wifiMulti.addAP(WIFI_SSID2, WIFI_PASSWORD2);
#endif
#ifdef WIFI_SSID3
  wifiMulti.addAP(WIFI_SSID3, WIFI_PASSWORD3);
#endif

  ambient.begin(AMBIENT_CHANNEL_ID, AMBIENT_WRITE_KEY, &client);
}

void send_data_to_ambient() {
  unsigned long start_at = millis();
  unsigned long now = start_at;

  while(now - start_at < 10000) {
    if (wifiMulti.run() == WL_CONNECTED) {
      ambient.set(2, temperature);
      ambient.set(3, humidity);
      ambient.send();
      return;
    }
    delay(100);
    now = millis();
  }
  Serial.println("Sending data to ambient is fail.");
}

ここまでのコード

M5Stamp picoで1.9inch Segment e-Paper Moduleのサンプルプログラムを試して見る。からの温湿度計に · GitHub


セグメント表示をリファクタリング
例のバッファパターンは一部間違っている様なので(1は左側で表示されていたり、不要なビットが立ってたりした。)

バッテリー表示も残量が50%を切ったら表示する様にしたが、M5Stamp picoは未対応なのか-2が返ってくる様だ。
getBatteryLevel()なのでバッテリーなしのM5Stamp picoはは未対応ということかな?

ここまでのコード

Revisions · M5Stamp picoで1.9inch Segment e-Paper Moduleのサンプルプログラムを試して見る。からの温湿度計に · GitHub