tamox.net

  ESP32  published on 2024/Aug/10
ESP32を用いて無線スイッチを作成
WiFi UDP通信を適用
リレーでAC100Vを制御
IPAdrressを変更することにより、グループ同士で別々にON/OFF動作することを確認 

親機と子機の一対一の接続でしかできない。親機と子機をニ個はできない
タイマー動作 を付加したものはこちらを参照してください

Aruino nano/nRF2401の場合 電波到達距離の関係で実用にたえなかった。
Tweiliteは、利用できている。
Tweilite一つとESP32二個がほぼ同額。(ESP32は、基板とか、USBケーブルの負担が増すがあまりあり。)

   
   
 送信器側のスイッチをON  送信器側のスイッチをOFF





受信器(親機)の回路図  

 
 
 
送信器(子機)の回路図 

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

const char ssid[] = "WS204"; // SSID
const char password[] = "0123456789"; // password
const int localPort = 10000; // ポート番号
const IPAddress ip(192, 168, 10, 204); // ServerのIPアドレス
const IPAddress gateway(192, 168, 10, 204); // 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 > 100){
    digitalWrite(23, LOW);   //送信が途切れたとき、リレーを落とす
   }
   delay(100);
}
//---------------------------------------------
//skech_jul24b 送信器側コード
#include <WiFi.h>
#include <WiFiUdp.h>

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

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


static void WiFi_setup() {
 Serial.begin(115200);
 WiFi.begin(ssid, password);
 Serial.println(WL_CONNECTED);
 Serial.println(WiFi.status());
  while ( WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  wifiUdp.begin(kLocalPort);
  WiFi_FLG = true;
}


void setup() {
  WiFi_setup();
  pinMode(23, OUTPUT);
  pinMode(33, INPUT);
}



void loop(){
  if ( WiFi_FLG == true ) {
   wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort);
   if (digitalRead(33) == LOW) {
    Serial.println("L");
    wifiUdp.print("L");
    wifiUdp.endPacket();
   }
  if (digitalRead(33) == HIGH) {
    wifiUdp.print("H");
    wifiUdp.endPacket();

   digitalWrite(23, HIGH);
   delay(500);
   digitalWrite(23, LOW);
   delay(500);
  }
  delay(20);
 }
}