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
StringinputString="";// a String to hold incoming data
2
boolstringComplete=false;// whether the string is complete
3
4
voidsetup(){
5
Serial.begin(9600);
6
Serial1.begin(9600);
7
8
inputString.reserve(200);
9
}
10
11
voidloop()
12
{
13
serialEvent();
14
}
15
16
voidserialEvent()
17
{
18
while(Serial1.available())
19
{
20
charinChar=(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
voidsetup(){
2
Serial.begin(9600);
3
}
4
5
voidloop(){
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
StringinputString="";// a String to hold incoming data
2
boolstringComplete=false;// whether the string is complete
3
4
voidsetup()
5
{
6
Serial.begin(9600);
7
inputString.reserve(200);
8
9
pinMode(2,OUTPUT);
10
}
11
12
voidloop()
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
voidserialEvent(){
38
while(Serial1.available())
39
{
40
charinChar=(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
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).
Jens schrieb:> hier der nicht funktioniere ESP code:
Was sollte da weshalb passieren? Und was passiert statdessen?
> if (inputString == "hi", 2)
Ist in der String-Klasse der == Operator so überladen, dass das geht?
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
StringinputString="";// a String to hold incoming data
2
boolstringComplete=false;// whether the string is complete
3
4
voidsetup()
5
{
6
Serial.begin(9600);
7
inputString.reserve(200);
8
9
pinMode(2,OUTPUT);
10
digitalWrite(2,HIGH);
11
}
12
13
voidloop()
14
{
15
if(stringComplete==true)
16
{
17
if(inputString=="hi")
18
{
19
for(inti=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
voidserialEvent(){
33
while(Serial.available())
34
{
35
charinChar=(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
voidsetup()
2
{
3
Serial1.begin(9600);
4
Serial.begin(9600);
5
}
6
7
voidloop()
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