danke erstmal für die vorschläge für die auswertung der client.read funktion. Leider funktioniert das, was ich vorhatte - so nicht...
aber von anfang an:
- die kopplung von client und master mit den "WEMOS-D1_mini-teilen" funktioniert gut, die entfernung bei der die verbindung abbricht liegt auf gerader und unverbauter strecke bei ca. 150m, was absolut meinen vorstellungen entspricht.
- beim abbiegen zwischen häusern ist es etwas weniger, also um die 100m, ist aber ok...
- das signalisieren des abbruch (grünes blinken geht in rotes blinken über) funktioniert beim slave auch gut, beim master allerdings nicht...
Das höchste der gefühle was ich erreiche, ist, dass das grüne blinken aufhört, ich schaff es einfach nicht, den punkt im code zu knacken, an dem ich das so sensieren kann, dass es ins rote blinken übergeht...
Wie gesagt ist für die nutzung kein muss, wäre aber schon schöner...
wer schaut sich das bitte an?
hier der mastercode:
Code:
// https://www.arduinoforum.de/arduino-Thread-ESP8266-Daten-%C3%BCbertragen
// https://www.arduinoforum.de/arduino-Thread-2-ESP8266-miteinander-kommunizieren-lassen?page=2
// LOLIN(WEMOS)D1 mini pro
#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 = 500;
//long interval_gn = 200;
//long interval_bl = 50;
WiFiServer server(80);
IPAddress IP(192, 168, 4, 15);
IPAddress mask = (255, 255, 255, 0);
//adresse slave
IPAddress remoteIP(192, 168, 4, 114);
// überwachter port
unsigned int remotePort = 4210;
char befehl[10];
WiFiUDP Udp;
uint32_t aktMillis;
uint32_t prevMillis;
int8_t request = 0;
int8_t rt_blink;
boolean ledStatus = false;
char udp_buffer[WIFICLIENT_MAX_PACKET_SIZE + 1];
void setup()
{
pinMode(ledPin_rt, OUTPUT);
pinMode(ledPin_gn, OUTPUT);
pinMode(ledPin_bl, OUTPUT);
Serial.begin(115200);
Serial.println("code ---- /home/georg/Arduino/fahr_rad/entfernung_messen/WEMOS_mit_UDP/WEMOS_AP_mit_UDP_master_1");
//Inizialisiere WIFI
WiFi.mode(WIFI_AP);
WiFi.softAP("fahrrad_echo", "12345678");
WiFi.softAPConfig(IP, IP, mask);
digitalWrite(ledPin_bl, HIGH);
delay(500);
digitalWrite(ledPin_bl, LOW);
server.begin();
Serial.println();
Serial.println("accesspoint_fahrrad_echo");
Serial.println("Server started.");
Serial.print("IP: "); Serial.println(WiFi.softAPIP());
Serial.print("MAC:"); Serial.println(WiFi.softAPmacAddress());
}
void loop()
{
digitalWrite(ledPin_gn, LOW);
//rt_blinken();
// schalten der LEDs auf dem client
aktMillis = millis();
if (aktMillis - prevMillis >= 200)
{
prevMillis = aktMillis;
Serial.print("LED schalten auf ");
if (ledStatus)
{
Serial.println("An");
befehl[0] = 1;
// digitalWrite(ledPin_rt, LOW);
}
else
{
Serial.println("Aus");
befehl[0] = 0;
// digitalWrite(ledPin_rt, HIGH);
}
Udp.beginPacket(remoteIP, remotePort);
Udp.write(befehl, 1);
Udp.endPacket();
ledStatus = !ledStatus;
}
WiFiClient client = server.available();
if (!client)
{
return;
}
//schalten der LEDs auf dem server (echo empfang)
request = client.read();
Serial.println("********************************");
Serial.print("From the station: ");
Serial.println(request);
client.flush();
if ((request != -1) || (rt_blink == 0))
{
digitalWrite(ledPin_gn, LOW);
//digitalWrite(ledPin_rt, LOW);
delay(200);
digitalWrite(ledPin_gn, HIGH);
//digitalWrite(ledPin_rt, LOW);
delay(200);
//request = 0;
}
}
void rt_blinken (void)
{
unsigned long currentMillis_rt = millis(); // aktueller Wert rot
if (currentMillis_rt - previousMillis_rt > 200)
{
previousMillis_rt = currentMillis_rt; // aktuellen Wert speichern
ledState_rt = ((ledState_rt == LOW) ? HIGH : LOW); // toggeln
digitalWrite(ledPin_rt, ledState_rt); // LED ansteuern
//rt_blink = 0;
}
}
Lesezeichen