Serielle kommunikation in beiden Richtungen

Gast #6844418
Lesenswert?

Hi Forum,

ich wollte einen Wemos D1 mini und einen Arduino nano every miteinander 
kommunizieren lassen. Was ich bis jetzt geschafft habe, ist vom ESP aus 
was Seriell schreiben und das vom nano auszulesen.
In die andere Richtung bekomm ich das jedoch nicht hin.
Mein Wunsch ist, dass ich Daten hin und her senden kann.
Ich habe schon einige Test Codes, die ich im Internet gefunden habe 
probiert, jedoch ohne erfolgt.
Hier sind die beiden funktionierenden Programme

Arduino nano every
1
String inputString = "";         // a String to hold incoming data
2
bool stringComplete = false;  // whether the string is complete
3

4
void setup() {
5
  Serial.begin(9600);
6
  Serial1.begin(9600);
7

8
  inputString.reserve(200);
9
}
10

11
void loop() 
12
{
13
  serialEvent();
14
}
15

16
void serialEvent()
17
{
18
  while (Serial1.available())
19
  {
20
    char inChar = (char)Serial1.read(); // das neue Byte erhalten:
21
    inputString += inChar;     // zum inputString hinzufügen:
22

23
    if (inChar == '\n') // wenn das eingehende Zeichen ein Zeilenumbruch ist, ein Flag setzen, damit die Hauptschleife
24
      stringComplete = true;
25
  }
26

27
  if (stringComplete) {  // print the string when a newline arrives:
28
    Serial.println(inputString);
29

30
    inputString = "";   // clear the string:
31
    stringComplete = false;
32
  }
33
}

ESP
1
void setup() {
2
Serial.begin(9600);
3
}
4

5
void loop() {
6
Serial.println("Hi");
7
}

was ich jetzt probiert hatte, ist das ganze vom nano, sprich das 
serialEvent auf den ESP zu bringen, nur statt die empfangenen Daten 
Seriell auszugeben, wollte ich einfach die on-Board LED blinken lassen.

Könnte mir da jemand weiterhelfen?
Danke schonmal im vorraus!
Mfg

hier der nicht funktioniere ESP code:
1
String inputString = "";         // a String to hold incoming data
2
bool stringComplete = false;  // whether the string is complete
3

4
void setup()
5
{
6
  Serial.begin(9600);
7
  inputString.reserve(200);
8

9
  pinMode(2, OUTPUT);
10
}
11

12
void loop()
13
{
14
  if (inputString == "hi", 2)
15
  {
16
    digitalWrite(2, HIGH);
17
    delay(200);
18
    digitalWrite(2, LOW);
19
    delay(200);
20
    digitalWrite(2, HIGH);
21
    delay(200);
22
    digitalWrite(2, LOW);
23
    delay(200);
24
    digitalWrite(2, HIGH);
25
    delay(200);
26
    digitalWrite(2, LOW);
27
    delay(200);
28
    digitalWrite(2, HIGH);
29
    delay(200);
30
    inputString = ""; // String leeren
31

32
      //   Serial.println("hi");
33
  }
34
  serialEvent();
35
}
36

37
void serialEvent() {
38
  while (Serial1.available())
39
  {
40
    char inChar = (char)Serial1.read(); // das neue Byte erhalten:
41
    inputString += inChar;     // zum inputString hinzufügen:
42

43
    if (inChar == '\n') // wenn das eingehende Zeichen ein Zeilenumbruch ist, ein Flag setzen, damit die Hauptschleife
44
      stringComplete = true;
45
  }
46
}
Gast #6845039
Lesenswert?

Und wenn du "Hi" sendest, solltest dur auch "Hi" empfangen wollen und 
nicht "hi"; Computer sind da pingelig.

Und den empfangenen String am besten auch nur auswerten, wenn 
stringComplete true ist, sonst gibt es eines Tages Missverständnisse 
("Hilfe!" wird dann auch erstmal als "Hi" verstanden. Aber nur manchmal, 
was die Fehlersuche erschwert).
Gast #6845469
Lesenswert?

grundschüler schrieb:
> Jens schrieb:
>> if (inputString == "hi", 2)
>
> überprüf das mal. Was soll ", 2" bewirken?

Hi,

Ich hab versehentlich den Falschen Code gepostet(Peinlich). Hatte einen 
anderen, wo ich was austesten wollte. Ich hatte das mit strncmp versucht 
zu vergleichen, deshalb die ,2.

Nosnibor schrieb:
> Und wenn du "Hi" sendest, solltest dur auch "Hi" empfangen wollen und
> nicht "hi"; Computer sind da pingelig.

Ah okay, ist logisch. Hatte gedacht groß und klein Schreibung ist 
unwichtig. Habs geändert, jedoch ohne erfolg.

Nosnibor schrieb:
> Und den empfangenen String am besten auch nur auswerten, wenn
> stringComplete true ist

Alles klar, ist drin.

Hier jetzt noch mal der nicht funktionierende aktuelle ESP Code
1
String inputString = "";         // a String to hold incoming data
2
bool stringComplete = false;  // whether the string is complete
3

4
void setup()
5
{
6
  Serial.begin(9600);
7
  inputString.reserve(200);
8

9
  pinMode(2, OUTPUT);
10
  digitalWrite(2, HIGH);
11
}
12

13
void loop()
14
{
15
  if (stringComplete == true)
16
  {
17
    if (inputString == "hi") 
18
    {
19
      for (int i = 0; i < 5; i++)
20
      {
21
        digitalWrite(2, LOW);
22
        delay(200);
23
        digitalWrite(2, HIGH);
24
        delay(200);
25
      }
26
      inputString = ""; // String leeren
27
    }
28
  }
29
  serialEvent();
30
}
31

32
void serialEvent() {
33
  while (Serial.available())
34
  {
35
    char inChar = (char)Serial.read(); // das neue Byte erhalten:
36
    inputString += inChar;     // zum inputString hinzufügen:
37

38
    if (inChar == '\n') // wenn das eingehende Zeichen ein Zeilenumbruch ist, ein Flag setzen, damit die Hauptschleife
39

40
      stringComplete = true;
41
  }
42
}

und der vom Nano
1
void setup() 
2
{
3
Serial1.begin(9600);
4
Serial.begin(9600);
5
}
6

7
void loop()
8
{
9
Serial1.println("hi");
10
Serial.println("hi");
11
delay(500);
12
}

Lothar M. schrieb:
> Was sollte da weshalb passieren? Und was passiert statdessen?

Eigentlich sollte die On-Board LED Blinken, was sie jedoch nicht tut.

Mfg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren