Arduino Uno mit EPS8266 Shield

Hallo Community,

ich verwende einen Arduino Uno und dazu noch einen Wlan Shield(EPS8266).
Mit dem WLAN Shield möchte UDP Befehle empfangen um die einzelnen Pins vom Arduino Uno anzusteuern.
Die Netzwerkverbindung klappt. Sobald ich nun den Code erweitere um einen Pin vom Arduino anzusteuern klappt die WLAN Verbindung nicht mehr. Das Problem verstehe ich da das Board Shield ausgewählt ist und vermutlich der Pin (Beispiel. 9) vom board angesteuert wird.
Wie kann ich nun den Pin vom Arduino ansteuern bzw. wie das Shield einen Befehl an den Arduino sendet.
Im Anhang ist mein Programm und bitte um ein Beispielprogramm wie ich das hinbekomme.

Vielen Dank

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

const char* ssid = "*****";
const char* password = "******";

WiFiUDP Udp;
unsigned int localUdpPort = 4210;  // local port to listen on
char incomingPacket[255];  // buffer for incoming packets
char  replyPacket[] = "Hi there! Got the message :-)";  // a reply string to send back


void setup()
{  
Serial.begin(115200);
Serial.println();

Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
 delay(500);
 Serial.print(".");
}
Serial.println(" connected");

Udp.begin(localUdpPort);
Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
}


void loop()
{
int packetSize = Udp.parsePacket();
if (packetSize)
{
 // receive incoming UDP packets
 Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
 int len = Udp.read(incomingPacket, 255);
 if (len > 0)
 {
   incomingPacket[len] = 0;
 }
 Serial.printf("UDP packet contents: %s\n", incomingPacket);

 // send back a reply, to the IP address and port we got the packet from
 Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
 Udp.write(replyPacket);
 Udp.endPacket();
}
}

Dein Sketch ist fast nicht zu lesen. In einem Mobilgerät überhaupt nicht.
Setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.

Damit wird dieser für alle besser lesbar.

Und poste bitte Hyperlinks (anklickbar) der Artikel, die du verwendest.

Besser?

cro_shooter:
Besser?

Sehr gut so.

Dein Problem liegt vermutlich darin, du hast die serielle Verbindung über die Pins D0 und D1 des Uno hergestellt.

Das macht def. Probleme, da diese Pins im Uno für die USB-Schnittstelle reserviert sind.
Und ein weiteres Problem könnte die Spannungsversorgung sein.

Wie versorgst du den ESP mit de 3,3 Volt ?
Die 3,3 Volt des Uno reichen da nicht aus, da dieser zu wenig Strom liefert.

Am besten du postest ein Schaltbild, wie du alles verbunden hast.

Dann sehen wir mehr und müssen nicht rumraten.

P.S.
Das was du verwendest ist kein Shield, sondern ein Breakout-Board oder einfach Modul.

Arduino ist mit USB zum PC verbunden. Ja du hast recht.
Wie könnte es sonst gelöst werden?

Das mit der 3,3 Volt Versorgung hatte ich schon geschrieben.
Du musst da eine eigene Versorgung anschließen.

Die serielle Verbindung kannst du mittels SoftwareSeriel aufbauen. Das ist eine spezielle Library wenn die serielle Hardware-Schnittstelle nicht verwendet werden kann.

Gut das mit den 3,3V werde ich hinbekommen.

Kannst du mir ein Beispielprogramm zeigen mit dieser speziellen Libary?

cro_shooter:
Kannst du mir ein Beispielprogramm zeigen mit dieser speziellen Libary?

Das ist nix spezielles.
Die Lib wird mit der IDE geliefert und enthält auch das benötigte Beispiel.

Ich schaffe es nun über UDP Befehle an das WLAN Modul zu senden und weiter an den Arduino weiterzugeben.
Leider kommen beim Arduino irgendwelche Zahlenwerte an und zu viel. Dachte dass da nur einer ankommt. Im Anhang ein Bild.

Kann mir da jemand helfen?

Hier der Code am Arduino:

#include <SoftwareSerial.h>

SoftwareSerial ESPserial(2, 3); // RX, TX

// Buffer für Datenpaket
int incomingPacket;  // Buffer für Empfangen

void setup() 
{
  // Start Hardware Kommunikation serieller Monitor
  Serial.begin(9600);

  // Start Software Kommunikation RX TX
  ESPserial.begin(57600);

  // Ausgabe Kommunikation aktiv
  Serial.println("Kommunikation gestartet");
}

void loop() 
{
  if(ESPserial.available())
  { 
      Serial.println("Serielle Daten empfangen");
      Serial.println(ESPserial.read());
  }
}

Hier der Code vom WLAN Modul

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <SoftwareSerial.h>

//Wlan Konfiguration
const char* ssid = "*********";
const char* password = "********";

// Start Wlan UDP
WiFiUDP Udp;

// UDP Port
unsigned int localUdpPort = 4210;  // local port to listen on

// Buffer für Datenpaket
char incomingPacket[255];  // Buffer für Empfangen

//Arduino Pins für Kommunikation
SoftwareSerial ESPserial(2, 3); // RX, TX

void setup()
{    
  // Start Serieller Monitor
  Serial.begin(9600);
  Serial.println();
  
  // Ausgabe der Verbindung
  delay(500);  
  Serial.printf("Verbindung zu %s wird aufgebaut ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" Verbunden");

  // Ausgabe der IP und des Port
  Udp.begin(localUdpPort);
  Serial.printf("IP-Adresse lautet: %s, UDP Port lautet: %d\n", WiFi.localIP().toString().c_str(), localUdpPort);

  // Start Software Kommunikation RX TX
  ESPserial.begin(57600);
}


void loop()
{  
  int packetSize = Udp.parsePacket();

  // Verarbeiten der Pakete
  if (packetSize)
  {
    // Ausgabe des Angekommen Pakets
    Serial.printf("Empfangen %d Bytes von %s, Port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }

    // Ausgabe des Paketes
    Serial.printf("UDP Packet beinhaltet: %s\n", incomingPacket);
    
    if (incomingPacket == "060")
    {
      ESPserial.write(2);
      Serial.printf("senden 2\n");
    }

    if (incomingPacket == "061")
    {
    ESPserial.write(1);
    Serial.printf("senden 1\n"); 
    }   
  }
}

Ich würde die empfangenen Daten 1:1 an den Uno durchreichen und da erst die Auswertung vornehmen. Dann brauchst du nicht jedesmal den ESP8266 flashen.

Und sowas geht eh nicht:
incomingPacket == "060“

Bzw. gehen tut das schon, macht aber nicht was du denkst. Mach dich mal schlau über Vergleiche von char arrays, strstr z.B.

Kannst du mir mit dem Weitergeben ein Programmbeispiel zeigen?
Bin Neuling in diesem Bereichen.

Danke