ブログの日記にて三路スイッチのIOT化について書いたのですが、時々ご覧になる方が
いる様なので、リレー側の簡易コードをESP-NOWで書きましたので参考にして頂けたら幸いです。
三路スイッチ以外にもイロイロと使い道はあるのですが、その辺は日記の方で模索していきます。
#実行に必要なリソース
ArduinoIDE開発環境
ESP32/ESP8266
ESP-NOWで三路スイッチモドキを作る(スイッチ側)
"espnow_pack.h" : 記事「ESP-NOWの送受信関数群とサンプルです」で紹介
#機能
ESP-NOWで「/TOGGLE」「/ON」「/OFF」のテキストコマンドを受け付けます。
「/TOGGLE」 RELAYPINの出力を反転する
「/ON」 RELAYPINの出力を1にする
「/OFF」 RELAYPINの出力を0にする
##ソースでは#defineでRELAYPINを2に設定してあります##
##本機のMACアドレスはコンパイルログもしくは起動時のSTA MAC:ログにて確認できます。
ESPNOWRelay.ino
#if defined(ESP8266)
#include <ESP8266WiFi.h> // ESP8266
#else
#include <WiFi.h> // ESP32
#endif
#define RELAYPIN 2
#include "espnow_pack.h"
#define ESP_NOW_CH 0
int RELAYSTATUS;
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() );
pinMode( RELAYPIN, OUTPUT );
RELAYSTATUS = 0;
digitalWrite( RELAYPIN, RELAYSTATUS );
}
void loop() {
delay(1);
if( esp_now_receive!=true ) return;
esp_now_receive = false;
Serial.printf( "recv:%s\n", esp_now_receive_data );
if( strcmp( "/TOGGLE", esp_now_receive_data )==0 ){
RELAYSTATUS = ((RELAYSTATUS==1)?0:1);
digitalWrite( RELAYPIN, RELAYSTATUS );
}
if( strcmp( "/ON", esp_now_receive_data )==0 ){
RELAYSTATUS = 1;
digitalWrite( RELAYPIN, RELAYSTATUS );
}
if( strcmp( "/OFF", esp_now_receive_data )==0 ){
RELAYSTATUS = 0;
digitalWrite( RELAYPIN, RELAYSTATUS );
}
}
あとがき
どなたか岡山:倉敷近辺でオッサンでも加入可能なそんなArduino系な集まり誘ってくれませんか? (ぷ