diese antennen habe ich getestet:
Klicke auf die Grafik für eine größere Ansicht

Name:	2020_07_04_antennen.jpg
Hits:	3
Größe:	15,1 KB
ID:	35151

die kleinste reicht bis ca 70m, die grosse gut 100m, die mittlere ist seltsammerweiase die schlechteste - ca.40m

und das ist der letzter stand der software:

AP mit UDP server:
Code:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const int ledPin_rt =  D5;
const int ledPin_gn =  D6;
const int ledPin_bl =  D7;

int ledState_rt = LOW;
int ledState_gn = LOW;
int ledState_bl = LOW;

long previousMillis_rt = 0;        
long previousMillis_gn = 0;       
long previousMillis_bl = 0;

long interval_rt = 100;           
long interval_gn = 250;
long interval_bl = 50;

WiFiServer server(80);
IPAddress IP(192, 168, 4, 15);
IPAddress mask = (255, 255, 255, 0);

byte ledPin = 2;

// hier die Adresse vom Slave eintragen
IPAddress remoteIP(192, 168, 4, 114);
unsigned int remotePort = 4210;  // remote port to listen on
char befehl[10];

WiFiUDP Udp;
uint32_t aktMillis;
uint32_t prevMillis;

boolean ledStatus = false;

void setup()
{

  pinMode(ledPin_rt, OUTPUT);
  pinMode(ledPin_gn, OUTPUT);
  pinMode(ledPin_bl, OUTPUT);

  Serial.begin(115200);

  WiFi.mode(WIFI_AP);
  WiFi.softAP("Wemos_AP", "Wemos_comm");
  WiFi.softAPConfig(IP, IP, mask);
  server.begin();
  pinMode(ledPin, OUTPUT);

  Serial.println();
  Serial.println("accesspoint_bare_01.ino");
  Serial.println("Server started.");
  Serial.print("IP: ");     Serial.println(WiFi.softAPIP());
  Serial.print("MAC:");     Serial.println(WiFi.softAPmacAddress());
}

void loop()
{

  aktMillis = millis();
  if (aktMillis - prevMillis >= 100)
  {
    prevMillis = aktMillis;
    Serial.print("LED schalten auf ");
    if (ledStatus)
    {
      Serial.println("An");
      befehl[0] = 1;
    }
    else
    {
      Serial.println("Aus");
      befehl[0] = 0;
    }
    Udp.beginPacket(remoteIP, remotePort);
    Udp.write(befehl, 1);
    Udp.endPacket();
    ledStatus = !ledStatus;
  }

  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  byte request = client.read();
  Serial.println("********************************");
  Serial.print("From the station: ");
  Serial.println(request);
  client.flush();

}

void blinken (void)
{

  unsigned long currentMillis_rt = millis();  // aktueller Wert rot
  if (currentMillis_rt - previousMillis_rt > interval_rt)
  {
    previousMillis_rt = currentMillis_rt;   // aktuellen Wert speichern
    ledState_rt = ((ledState_rt == LOW) ? HIGH : LOW); // toggeln
    digitalWrite(ledPin_rt, ledState_rt);   // LED ansteuern
  }
}
client mit UDP slave:

Code:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const int ledPin_rt =  D5;
const int ledPin_gn =  D6;
const int ledPin_bl =  D7;

int ledState_rt = LOW;
int ledState_gn = LOW;
int ledState_bl = LOW;

long previousMillis_rt = 0;        
long previousMillis_gn = 0;       
long previousMillis_bl = 0;

long interval_rt = 100;           
long interval_gn = 250;
long interval_bl = 50;

//Variablen deklarieren
//######################################
byte ledPin = 2;         //2           // Interne LED vom ESP 8266 Modul
byte Taster = 4;                    // GPIO 4 wird mit einem Taster beschaltet
byte temp, memo = 0;                // Merker für Tasterstatus & Hilfsmerker
char ssid[] = "Wemos_AP";           // SSID of your AP
char password[] = "Wemos_comm";         // password of your AP

IPAddress server(192, 168, 4, 15);  // IP address of the AP
WiFiClient client;

WiFiUDP Udp;
unsigned int localUdpPort = 4210;  // local port to listen on
char befehl[10];  // buffer for incoming packets
boolean ledStatus = false;


//Setup
//######################################
void setup()
{
  pinMode(ledPin_rt, OUTPUT);
  pinMode(ledPin_gn, OUTPUT);
  pinMode(ledPin_bl, OUTPUT);


  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  pinMode(Taster, INPUT_PULLUP);

  //Inizialisiere WIFI
  //######################################
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  Serial.println();
  Serial.println("Connection to the AP");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.println("Connected");
  Serial.println("station_bare_01.ino");
  Serial.print("LocalIP:"); Serial.println(WiFi.localIP());
  Serial.println("MAC:" + WiFi.macAddress());
  Serial.print("Gateway:"); Serial.println(WiFi.gatewayIP());
  Serial.print("AP MAC:"); Serial.println(WiFi.BSSIDstr());

  Udp.begin(localUdpPort);
  Serial.print(" connected. UDP-Server bereit an IP: ");
  Serial.println(WiFi.localIP());
  Serial.println("UDP-Server bereit.");

}


//Daten an AP senden
//######################################
void data_to_AP (byte temp) {
  client.connect(server, 80);
  digitalWrite(ledPin, LOW);
  Serial.println("********************************");
  Serial.print("Byte sent to the AP: ");
  Serial.println(temp);
  Serial.println(client.write(temp));
  client.flush();
  digitalWrite(ledPin, HIGH);
  client.stop();
}


//HAUPTPROGRAMM
//######################################
void loop()
{

  int packetSize, len;
  // UDP
  packetSize = Udp.parsePacket();
  // Da ist was da
  if (packetSize) 
  {
    Serial.print("Empfangen "); Serial.print(packetSize);
    Serial.print(" von IP "); Serial.print(Udp.remoteIP());
    Serial.print(" Port "); Serial.println(Udp.remotePort());
    len = Udp.read(befehl, 10);
    ledStatus = befehl[0]; // erstes Byte 0 oder 1
    if (ledStatus) 
    {
      //digitalWrite(LED, HIGH);
      digitalWrite(ledPin_rt, HIGH);
      Serial.println("LED einschalten");
    }
    else {
      //digitalWrite(LED, LOW);
      digitalWrite(ledPin_rt, LOW);
      Serial.println("LED ausschalten");
    }
  }
  
  /*
  temp = digitalRead(Taster);


  if (temp == LOW & memo == LOW)
  {
    Serial.print("TASTER: LOW   ");
    Serial.println(temp);
    memo = HIGH;
    data_to_AP(temp);
    Serial.println("********************************");
    Serial.println("********************************");
    Serial.println("");


  } else if (temp == HIGH & memo == HIGH)
  {
    Serial.print("TASTER: HIGH   ");
    Serial.println(temp);
    memo = LOW;
    data_to_AP(temp);
    Serial.println("********************************");
    Serial.println("********************************");
    Serial.println("");

  }
  delay(500);
  */
}

void blinken (void)
{

  unsigned long currentMillis_rt = millis();  // aktueller Wert rot
  if (currentMillis_rt - previousMillis_rt > interval_rt)
  {
    previousMillis_rt = currentMillis_rt;   // aktuellen Wert speichern
    ledState_rt = ((ledState_rt == LOW) ? HIGH : LOW); // toggeln
    digitalWrite(ledPin_rt, ledState_rt);   // LED ansteuern
  }
}