tamox.net
  
 ESP32  published on 2024/Aug/11

ESP32を用いて宅配ボックスへ応用
WiFi UDP通信を適用
 
 

Photo1

蓋が閉まっているとき(リードスイッチが接しているとき),送信器、受信器ともに緑LEDがON

Photo2


 
蓋が開いているとき(リードスイッチが離れるたとき),送信器、受信器ともに赤LEDがON 

 

蓋が閉じられたとき(リードスイッチが接している),送信器、受信器ともに緑LEDがON
赤色LEDは、蓋が開けられた形跡により、送信器、受信器ともに赤色LEDはONのまま 

 
送信側のリセットスイッチ(黄色の枠)を押すことにより、赤LEDはOFF 

 
 
受信器(親機)の回路図

 
送信器(子機)の回路図  
 
 IDE code
//skech_jul30s 送信器側コード

#include <WiFi.h>
#include <WiFiUdp.h>

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

static WiFiUDP wifiUdp;
static const char *kRemoteIpadr = "192.168.10.203";
static const int kRmoteUdpPort = 10000;
static const int kLocalPort = 5000;
bool WiFi_FLG;
bool alter=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(21, OUTPUT);

  pinMode(32, INPUT); //lead switch
  pinMode(34, INPUT); //reset switch
}

void loop(){

 if (alter ==1){
  Serial.println(WiFi_FLG);
  if ( WiFi_FLG == true ) {
   wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort);
   if (digitalRead(32) == LOW ) {
    //Serial.println("L");
    wifiUdp.print("L");
    wifiUdp.endPacket();

    digitalWrite(23, LOW);
    delay(20);
    digitalWrite(21, HIGH);
    delay(20);
   }  
   if (digitalRead(32) == HIGH ) {
    wifiUdp.print("R");
    wifiUdp.endPacket();

    digitalWrite(23, HIGH);
    delay(20);
    digitalWrite(21, HIGH);
    delay(20);
   }
   if(digitalRead(34) == HIGH){
    alter =0;
   }
  }
 }


 if (alter ==0){
   Serial.println(WiFi_FLG);
   if ( WiFi_FLG == true ) {
    wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort);
    if (digitalRead(32) == LOW ) {
     alter = 1;//変化しない
     //Serial.println("L");
     wifiUdp.print("L");
     wifiUdp.endPacket();

     digitalWrite(23, LOW);
     delay(20);
     digitalWrite(21, HIGH);
     delay(20);
     alter = 1;
    }
    if (digitalRead(32) == HIGH ) {
     wifiUdp.print("H");
     wifiUdp.endPacket();

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

  }

 }
}

//送信側



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

const char ssid[] = "WS203"; // SSID
const char password[] = "0123456789"; // password
const int localPort = 10000; // ポート番号
const IPAddress ip(192, 168, 10, 203); // ServerのIPアドレス
const IPAddress gateway(192, 168, 10, 203); // 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);
   pinMode(33, OUTPUT);
}

void loop() {

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

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

  if ( cnt > 100){
    digitalWrite(23, LOW);
    udp.begin(localPort);
  }
  delay(20);
}