このガイドでは、小型で安価なCR2032コイン電池を電源とし、ATtiny402をセンサーの核、ESP32をゲートウェイとしてESP-NOWで連携させる、究極の省電力ワイヤレスセンサーの作り方を解説します。
CR2032のような小型電池で長期間(数年)駆動させるには、回路設計とプログラムの両面で徹底した省電力化が必要です。ここでは、その実現に必要な部品、回路図、そしてプログラムの要点を解説します。
1. システム構成と動作原理
このシステムは、「スリープが命」です。センサーノードは通常、完全に電力を抑えたスリープ状態にあり、イベント発生時(または定時間隔)にのみ短時間だけ起動し、データを送信したらすぐにスリープに戻ります。
ユニット | 役割 | 使用部品 |
ノード (送信機) | センサーデータの取得、ESP-NOWでの高速送信 | ATtiny402 + ESP-01 (またはESP8266モジュール) + センサー |
ゲートウェイ (受信機) | ノードからのデータ受信、Wi-Fi/インターネットへの転送 | ESP32 DevKit |
通信方式 | ESP-NOW (高速、低消費電力) | |
電源 | CR2032コイン電池 (ノードのみ) | 3V、約200mAh |
なぜCR2032とESP-NOWの組み合わせが良いのか?
- CR2032の制約: CR2032電池は容量(約200mAh)が小さいだけでなく、最大放電電流が非常に小さいという特性があります。瞬間的に大きな電流(数十mA以上)を流すと電圧が急激に降下し、マイコンがリセットされます。
- ESP-NOWの利点: ESP-NOWはWi-Fi接続認証プロセスを省略できるため、Wi-Fi接続時のような瞬間的な大電流スパイク(数百mA)がほとんど発生しません。ESP8266/ESP32を送信機として使う場合でも、ESP-NOWの方がバッテリーに優しい通信方法です。
- ATtiny402の利点: センサー監視とロジック実行に特化し、スリープ時の消費電流がナノアンペア(nA)レベルと極めて低く、CR2032の寿命を最大限に延ばします。
2. 必要な部品リスト
CR2032電源で動作させるために、通常の開発ボードではなく、単体のチップと低消費電力部品を選定します。
部品 | 詳細 | 備考 |
マイクロコントローラ | ATtiny402 | センサーロジック、スリープ管理、ESP-NOWトリガー用 |
ワイヤレス通信 | ESP-01F/S または ESP8266モジュール | ESP-NOW送信専用(ESP32でも可) |
電源 | CR2032 コイン電池 | 3V, 約200mAh。電池ホルダーも必要。 |
電圧安定化 | コンデンサ (100uF – 470uF) | 必須。ESP8266の瞬間的な電流スパイクを緩和し、リセットを防ぐ。 |
センサー | リードスイッチ (またはDHT11など) | 超低消費電力で状態監視が可能。 |
プログラム用部品 | UPDIプログラマ | ATtiny402への書き込みに必要。 (例: Arduino UNOを書き込み機として利用) |
配線/基板 | ユニバーサル基板またはPCB、細線ワイヤ |
3. 回路図と配線方法(超低消費電力ノード側)
CR2032で駆動させるための最も重要なポイントは、ATtiny402とESPモジュールの連携、そして電源周りの設計です。
🔋 CR2032と電圧安定化
CR2032の最大の弱点を補うために、大容量のコンデンサを電源ラインに並列接続します。
接続ポイント | 部品 | 役割 |
CR2032の+ / GND | 電解コンデンサ (100uF〜470uF) | ESPモジュールが送信のために瞬間的に大きな電流を要求した際、電池電圧が急降下するのを防ぎ、システムを安定させます。 |
CR2032の+ / GND | 積層セラミックコンデンサ (0.1uF) | 高周波ノイズを除去し、安定化を助けます。 |
🔌 ATtiny402とESPモジュールの接続
ATtiny402がESPモジュールのリセットピンを制御することで、必要なときだけESPモジュールを起動させます。
ATtiny402 Pin | ESP-01/ESP8266 Pin | 役割 |
VCC/GND | VCC/GND | CR2032電源に接続 (3V) |
PAx (GPIO) | RST (リセット) | ATtinyがESPモジュールを起動・停止させる。 |
PAy (GPIO) | CH_PD (チップイネーブル) | RSTピンでの制御が難しい場合、このピンで電源供給をコントロールする。 |
PAz (GPIO) | TX (送信) | ATtinyのデータ送信トリガー(今回は使わないが、将来的な拡張用) |
具体的な動作シーケンス
- 通常時: ATtiny402がスリープ状態。ESPモジュールのRSTピンをGNDに落とし、完全に停止させておく。
- イベント発生時: ATtinyがウェイクアップ。
- 起動: ATtinyがRSTピンをHighにしてESPモジュールを起動させる(約数100ms)。
- 送信: ESPモジュールが起動次第、ATtinyがトリガー信号を送り、ESP-NOWでデータを送信。
- 停止: 送信完了後、ATtinyがRSTピンをGNDに落とし、ESPモジュールを停止。ATtinyもスリープに戻る。
センサーの接続
リードスイッチなどのシンプルなセンサーは、ATtiny402のGPIOピンに接続し、 外部割り込み(INT) として設定します。
- リードスイッチ: ATtiny402のGPIOピンとGND間に接続。ピンを
INPUT_PULLUP
で設定しておけば、ドアが閉まっているときはHigh、開いたときにLowになり、割り込みを発生させます。
4. プログラムの要点(ATtiny402側)
ATtiny402のプログラムは、省電力ライブラリと割り込み駆動に徹底的にこだわります。
A. 低消費電力スリープの設定
ATtiny402をナノアンペアレベルのスリープモードに入れることが必須です。
C++
#include <avr/sleep.h>
#include <avr/wdt.h>
void enter_deep_sleep() {
// 割り込み許可
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // 最も深いスリープモード
sleep_enable();
// スリープ前に必要な処理 (電源安定化など) を行う
sleep_cpu(); // スリープ実行
sleep_disable(); // ウェイクアップ後、スリープモードを解除
}
// ウォッチドッグタイマー (WDT) で定期的なウェイクアップも設定可能
B. ESPモジュール制御ロジック
ATtiny402のGPIOピンを直接制御して、ESPモジュールをON/OFFします。
C++
const int ESP_RST_PIN = 1; // 例としてPA1
void setup() {
pinMode(ESP_RST_PIN, OUTPUT);
digitalWrite(ESP_RST_PIN, LOW); // 初期状態はESPを停止
// ... その他の初期設定
}
void trigger_esp_now_send(uint8_t sensor_data) {
// 1. ESPを起動
digitalWrite(ESP_RST_PIN, HIGH);
delay(500); // ESPモジュール起動待ち (ファームウェアによる)
// 2. ESP-NOW送信ロジックをESPモジュールに指示 (ATコマンドまたはカスタムファームウェア)
// ここでは、ESPモジュールに書き込んだカスタムファームウェアが、
// 起動時にデータを送信するように設定されている前提とします。
// 3. 送信完了待ち(適度な待ち時間またはESPから完了信号を受信)
delay(500); // 送信完了まで待機
// 4. ESPを停止
digitalWrite(ESP_RST_PIN, LOW);
}
// 割り込みハンドラ
void door_status_changed() {
// 割り込み処理を短くし、すぐにtrigger_esp_now_sendを呼び出す
trigger_esp_now_send(1); // ドアが開いたことを示すデータ
}
void loop() {
// イベントベースの割り込みを有効化
// ...
enter_deep_sleep();
}
5. 重要な注意点と最適化
A. ESPモジュールのカスタムファームウェア化
市販のESP-01/ESP8266モジュールに搭載されている純正のATファームウェアは、起動に時間がかかりすぎるため、省電力化には向きません。
カスタムファームウェア: ESP8266/ESP32をArduino環境でプログラミングし、起動後、すぐにESP-NOW送信を実行し、その後自動でスリープ/停止するロジックを組み込む必要があります。
B. 電源インピーダンスの最小化
電池ホルダーと基板、配線の接続は、できるだけ抵抗値(インピーダンス)が低くなるようにしてください。配線が細すぎたり長すぎたりすると、瞬間的な電流スパイク時に電圧降下が大きくなり、マイコンがリセットする原因となります。
C. センサーステートの維持
イベントトリガーの場合、ATtiny402がスリープからウェイクアップした後に、以前の状態を記憶しておく必要があります。
- ステート記憶: ATtiny402のEEPROMや、 RTC (Real-Time Clock) レジスタ(リセット後もデータ保持)を活用して、前回のセンサー状態(開/閉)を記録します。
- 不要な送信の防止: 状態が変化したときのみ送信処理を実行することで、無駄な電力消費を防ぎます。
この徹底した省電力設計と、ATtiny402とESP-NOWの特性を活かすことで、CR2032一つで実用的な期間(数ヶ月〜数年)動作するワイヤレスIoTデバイスの実現が可能になります。