ブログの日記にて三路スイッチのIOT化について書いたのですが、時々ご覧になる方が
いる様なので、スイッチ側の簡易コードをESP-NOWで書きましたので参考にして頂けたら幸いです。
スイッチ側は押しボタンを想定して電源ONで1メッセージ投げてDeepSleepに移行する仕組みです。
電源ON⇒1メッセージ投げ⇒DeepSleepの所要時間は100mSec以下なので、余分な回路が無ければ
電池運用で階段の照明スイッチや玄関チャイムとして数年は使えると思います。
#実行に必要なリソース
ArduinoIDE開発環境
ESP32/ESP8266
ESP-NOWで三路スイッチモドキを作る(リレー側)
"espnow_pack.h" : 記事「ESP-NOWの送受信関数群とサンプルです」で紹介
#機能
ESP-NOWで「/TOGGLE」のテキストコマンドを送信します。
esp_now_send_mac_address に送信先MACアドレスを設定します。
0xff,0xff,0xff,0xff,0xff,0xff はbroadcast送信されるのでコノママでも動く・と言えば動きます。
##リレー側のMACアドレスはコンパイルログもしくは起動時のSTA MAC:ログにて確認して転記します。
if defined(ESP8266)
#include <ESP8266WiFi.h> // ESP8266
#else
#include <WiFi.h> // ESP32
#endif
#include "espnow_pack.h"
#define ESP_NOW_CH 0
const uint8_t esp_now_send_mac_address[6] = { 0xff,0xff,0xff,0xff,0xff,0xff }; //送信先アドレス
void setup(){
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
if( esp_now_begin( ESP_NOW_CH )!=0 ){
Serial.println("ESP-NOW Init Failed");
ESP.restart();
}
Serial.printf("\n\nSTA MAC: %s\n", WiFi.macAddress().c_str() );
char *COMMAND = "/TOGGLE";
esp_now_send_data( (uint8_t *)esp_now_send_mac_address, (uint8_t *)COMMAND, (strlen(COMMAND)+1) );
ESP.deepSleep(1000 * 1000000 ); //1000秒ほどDeepSleepに移行する(復帰用の配線が無ければDeepSleepしたままです)
}
void loop() {
}
あとがき
どなたか岡山:倉敷近辺でオッサンでも加入可能なそんなArduino系な集まり誘ってくれませんか? (ぷ