thx, Moppi,
das wesentliche - meldung und rückmeldung in verständlichen und auf dem fahrrad auch "erfahrbaren" signalen - funktioniert nun. hier der AP
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;
//int LED_rt = 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);
//adresse vom slave
IPAddress remoteIP(192, 168, 4, 114);
// remote port to listen on
unsigned int remotePort = 4210;
char befehl[10];
WiFiUDP Udp;
uint32_t aktMillis;
uint32_t prevMillis;
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);
//Inizialisiere WIFI
WiFi.mode(WIFI_AP);
WiFi.softAP("fahrrad_echo", "12345678");
WiFi.softAPConfig(IP, IP, mask);
digitalWrite(ledPin_bl, HIGH);
delay(500);
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()
{
// schalten der LEDs auf dem client
aktMillis = millis();
digitalWrite(ledPin_bl, LOW);
if (aktMillis - prevMillis >= 500)
{
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;
}
//schalten der LEDs auf dem server (echo empfang)
byte request = client.read();
Serial.println("********************************");
Serial.print("From the station: ");
Serial.println(request);
client.flush();
if ((request == 1) || (request == 255))
{
digitalWrite(ledPin_rt, LOW);
digitalWrite(ledPin_gn, LOW);
delay(100);
// LED_rt = LOW;
}
digitalWrite(ledPin_gn, LOW);
delay(100);
//LED_rt = LOW;
//if (LED_rt == LOW)
{
digitalWrite(ledPin_gn, HIGH);
digitalWrite(ledPin_rt, LOW);
}
}
void rt_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
}
}
und hier der client
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 echoPin = 4; // GPIO 4 wird mit einem "echoPin" beschaltet
byte temp, memo = 0; // Merker für echoPin status & Hilfsmerker
char ssid[] = "fahrrad_echo"; // SSID of your AP
char password[] = "12345678"; // 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;
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);
pinMode(echoPin, INPUT_PULLUP);
digitalWrite(ledPin_bl, HIGH);
delay(500);
digitalWrite(ledPin_bl, LOW);
digitalWrite(ledPin_rt, LOW);
//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());
//Inizialisiere UDP
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);
Serial.println("********************************");
Serial.print("Byte sent to the AP: ");
Serial.println(temp);
Serial.println(client.write(temp));
client.flush();
client.stop();
}
void loop()
{
digitalWrite(ledPin_rt, LOW);
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(ledPin_rt, LOW);
digitalWrite(ledPin_gn, LOW);
Serial.println("LED einschalten");
//LED_rt = LOW;
taste_druecken();
}
else
{
digitalWrite(ledPin_rt, LOW);
digitalWrite(ledPin_gn, LOW);
Serial.println("LED ausschalten");
//LED_rt = LOW;
taste_loslassen();
}
}
{
digitalWrite(ledPin_gn, HIGH);
digitalWrite(ledPin_rt, LOW);
}
}
void taste_druecken (void)
{
//digitalWrite(ledPin_rt, LOW);
digitalWrite(echoPin, HIGH);
temp = digitalRead(echoPin);
data_to_AP(temp);
Serial.println(temp);
}
void taste_loslassen (void)
{
//digitalWrite(ledPin_rt, LOW);
digitalWrite(echoPin, LOW);
temp = digitalRead(echoPin);
data_to_AP(temp);
Serial.println(temp);
}
void rt_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
}
}
und das video...
Lesezeichen