e-Paperを利用したカレンダーの製作(STM32)　試作編

# はじめに

前回までの実験結果などから実現性が見えてきたので、完成品を目指して試作を行い、結果以下のような仕様としました。

・e-Paperの描画時にかなり電流(12mA程度)を消費することから、コイン電池駆動は難しいことが判明、LiPoバッテリー(200mAh)駆動に変更
・STM32Lシリーズの中でモデル選定を行った結果、必要最低限レベルでSTM32L072KZT6を選択(192K フラッシュ、20KB RAM、 LQFP 32ピン)
・e-PaperのDriver HATはスタンバイ時の電流消費が大き目の為、Driver HATの回路+独自にロードスイッチを入れてe-Paperの電源を制御することに。(e-Paperをスタンバイすれば消費電力抑えられるかと思いましたが、DC-DCコンの部分が動作不安定になりましたので、ロードスイッチで電源をOFFにしたほうが確実のようです。)
・電波時計の受信状況はLED(緑・赤)のインジケータで状況を表現するようにしました。
・カレンダーは当月を表示しつつ、前月・翌月も小さく表示するように。また9か月表示機能も持たせることに。
・LiPoバッテリーの充電はTP4056の安価な充電基基板を利用。

# 全体構成

全体構成を絵にするとこのようになります。

![キャプションを入力できます](https://camo.elchika.com/35f4bbd85195fba21b6bbfe707152f5cc01ef9db/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f33373462353565302d346432392d343635352d393532312d626234366638376561653639/)

# 回路図

kiCADで作図しました。説明を入れておきます。

![キャプションを入力できます](https://camo.elchika.com/7c80e04131bc6c2dae7df036f3631257db5b7420/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f31316638376430342d383739632d346362322d393062642d326138353935336164343636/)

# ソフトウエア

現時点のソースをこちらに保管しました。VSCodeでPlatformIO利用を想定のものです。

https://github.com/keitanak/E-PaperCalendar


## Arduinoへのボード登録
今回はSTM32のチップをそのまま利用することから、Arduinoにボード登録を行う必要があります。VSCode + Platform IOの場合は、以下のようになります。

以下のパスにSTM32ボード定義が保管されています。
C:\Users\<ユーザ名>\.platformio\platforms\ststm32\boards

jsonファイルで自分用のボード定義を作成して保管します。これでPlatformIOの中でボードとして選択が可能になります。

```json:genericSTM32L072KZT.json
{
  "build": {
    "cpu": "cortex-m0plus",
    "extra_flags": "-DSTM32L0 -DSTM32L072xx",
    "f_cpu": "32000000L",
    "framework_extra_flags": {
      "arduino": "-D__CORTEX_SC=0"
    },
    "mcu": "stm32l072kzt6",
    "product_line": "STM32L072xx",
    "variant": "STM32L0xx/L072K(B-Z)T_L082K(B-Z)T"
  },
  "debug": {
    "default_tools": [
      "stlink"
    ],
    "jlink_device": "STM32L072KZ",
    "openocd_target": "stm32l0",
    "svd_path": "STM32L07x.svd"
  },
  "frameworks": [
    "arduino",
    "cmsis",
    "libopencm3",
    "stm32cube"
  ],
  "name": "STM32L072KZT (20k RAM. 192k Flash)",
  "upload": {
    "maximum_ram_size": 20480,
    "maximum_size": 196608,
    "protocol": "stlink",
    "protocols": [
      "jlink",
      "cmsis-dap",
      "stlink",
      "blackmagic",
      "serial",
      "dfu"
    ]
  },
  "url": "https://www.st.com/ja/microcontrollers-microprocessors/stm32l072kz.html",
  "vendor": "ST"
}
```


PlatformIO画面

![キャプションを入力できます](https://camo.elchika.com/5cfef6f86b93f89f28908354b65dda327917b494/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f38666531346561352d633135392d343434312d393663662d323764653534613036363033/)


ボード定義作成にあたり参考にさせていただいたページです
https://qiita.com/shuji4649/items/6f86d65fc1442101d06d


## 動作中のクロック変更
消費電力を抑えるために、クロック変更の方法を前回調査しました。実際に動作させてみると、電子ペーパーの描画の際にはあまりに遅くなります、そのため描画時のみクロックはデフォルトに戻して動作させることにしました。
稼働中にクロック変更はどうかと思いましたが、意外と問題ありませんでした。シリアル通信だけはおかしくなるので、事前に停止して再開する処理を入れています。



# 試作時写真

![キャプションを入力できます](https://camo.elchika.com/2a3d4781187ca31413a8f02dfa608658ee532721/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f33656431313064342d356430662d346161372d626265302d653361343965363230613065/)

![キャプションを入力できます](https://camo.elchika.com/001587b113029112b753e998aeeb9e400429c574/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f30653261613030312d306365342d346137612d613730372d333736623038636338343263/)

![キャプションを入力できます](https://camo.elchika.com/5c1ca2bbc4154886fe7d27e21cc273bf6a061f6e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f66346432656634392d626338312d343062612d393034312d376365643531663033363939/)

# 消費電力

DVMで確認してみると、画面描画時は20mA程度流れます。
スタンバイ時はこのように20μAぐらいですね、いろいろ回路をつけたので、少しづつ電流が積み重なったようです。
200mAhの電池でどのぐらい持つか長期の評価が必要ですね。

![キャプションを入力できます](https://camo.elchika.com/3a3e656d5c967349d65c36d91cf614631e8ad5a2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f35363461623735302d326162392d346234612d623637392d336463386435323762363935/)


# 今後の予定
しばらく動作させていて、動作も安定してきたので、この内容で基板オーダーしてみようと思います。
フォトフレームとかに入れて飾れるといいのですが。



# 追記(2025/5/10)

少し長期でバッテリーの減りを確認しました。
当初はそれほどの電力消費でもなかったのですが、少したってからやけに電流の消費が増えました。
調べてみると、LiPo充電回路の消費のようです、そこで、この部分は別のモジュールに変更することにしました。

## 当初(TP4056モジュール)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/d6026f07-2add-4ef3-9990-21ea58f01022.png)


## 入れ替え後
このモジュールに入れ替えてみました。
[LiPo Amigo](https://www.switch-science.com/products/8691?pr_prod_strat=e5_desc&pr_rec_id=630f003a4&pr_rec_pid=7724084625606&pr_ref_pid=7692746358982&pr_seq=uniform)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/585fa7f1-8e09-46ce-9504-545584b4c257.png)