diese antennen habe ich getestet:

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
}
}
Lesezeichen