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