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);

  }
}