tamox.net

  ESP32  published on 2024/Aug/16
ESP32を用いて無線スイッチを作成
WiFi UDP通信を適用
リレーでAC100Vを制御
スイッチの切り忘れ防止のため、ボタンスイッチに切り替えタイマー動作のペアーを作成

受信器(親機)の回路図  

 
 
 
送信器(子機)の回路図 

 
 
  IDE code
//skech_aug16a 受信器側コード
#include <WiFi.h>
#include <WiFiUdp.h>

const char ssid[] = "WS202"; // SSID
const char password[] = "0123456789"; // password
const int localPort = 10000; // ポート番号
const IPAddress ip(192, 168, 10, 202); // ServerのIPアドレス
const IPAddress gateway(192, 168, 10, 202); // gatewayのIPアドレス
const IPAddress subnet(255, 255, 255, 0); // サブネットマスク
WiFiUDP udp;
static int cnt = 0;



void setup() {
  Serial.begin(115200);

  WiFi.softAP(ssid, password);
  delay(100);
  WiFi.softAPConfig(ip, gateway, subnet);

  Serial.println("Starting UDP");
  udp.begin(localPort);

  pinMode(23, OUTPUT);

}



void loop() {
 if(udp.parsePacket()){
   cnt = 0;
   char i = udp.read();
   if (i == 'L') {
     digitalWrite(23, LOW);
   }
   if (i == 'H') {
     digitalWrite(23, HIGH);
   }
 }

 cnt++;
 Serial.println(cnt,DEC);

 if ( cnt > 900){        //900:15min
   digitalWrite(23, LOW);
 }
   delay(1000);
 }

//---------------------------------------------
//skech_aug16b 送信器側コード
#include <WiFi.h>
#include <WiFiUdp.h>

const char ssid[] = "WS202"; // SSID
const char password[] = "0123456789"; // password

static WiFiUDP wifiUdp;
static const char *kRemoteIpadr = "192.168.10.202";
static const int kRmoteUdpPort = 10000;
static const int kLocalPort = 5000;
bool WiFi_FLG;
static int cnt = 0;



void setup() {
  int i;

  Serial.begin(115200);
  WiFi_FLG = true;
  i = 0;
  WiFi.begin(ssid, password);
  while ( WiFi.status() != WL_CONNECTED) {
  i++;
  if ( i > 30 ) {
    WiFi_FLG = false;
    break;
  }
  delay(500);
  }
  if ( WiFi_FLG == true ) wifiUdp.begin(kLocalPort);


  pinMode(23, OUTPUT);
  pinMode(33, INPUT);

  while(digitalRead(33)==0); //プッシュスイッチのスタート待ち

}



void loop(){
 cnt++;
 Serial.println(cnt,DEC);
 if (cnt > 900){ //900:15min
  digitalWrite(23,LOW);
  delay(20);
  while(digitalRead(33)==0); //再スタート
  Serial.println("***");
  cnt = 0;
 } else{
   digitalWrite(23,HIGH);
   if ( WiFi_FLG == true ) {
     wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort);
     if (digitalRead(33) == HIGH) {
     wifiUdp.print("H");
     wifiUdp.endPacket();
     }
     delay(20);
   }
   delay(500);

   digitalWrite(23,LOW);
   delay(500);

 }
}