Hallo ihr Lieben,
heute muß ich euch mal wieder ein paar Fragen stellen. In meinem Projekt der Haussteuerung bin ich eigentlich so weit durch und es läuft auch alles wie gewollt. In der Phase kommen einem dann Ideen, was man noch alles machen könnte und so begann ich meine ESP32 Module auch per WiFi mit Anweisungen/Befehlen zu füttern. Auch dieses klappt prima. Der Server und der ESP32 verstehen sich und der ESP führt die Anweisungen nach kurzer Rückfrage, ob das so richtig verstanden wurde, aus.
Nun arbeite ich daran dies auch über den seriellen Monitor der Arduino IDE zu können. Leider treten dabei ein paar Probleme auf.
Problem 1:
Gebe ich im seriellen Monitor "Befehl" ein und drücke Enter, zeigt mir das anhängende Skript 100te male auch "Befehl" an, aber manchmal eben auch nur "efehl". Es fehlt also das erste Zeichen.
In dem kleinen Beispielskript funktioniert das noch recht gut. In meinem großen Skript tritt dieser Fehler recht häufig auf, ich vermute durch die Laufzeit des Skripts.
Problem 2:
Wie man in dem Beispielskript sehen kann, sollte die Ausgabe des Empfangenen Befehls eigentlich so aussehen...
Befehl!
Das "!" setzte ich mutwillig dahinter, weil in der "if" am Schluß nie "Befehl" erkannt wurde. Es mußte also noch was in dem String sein, das die Auswertung auf "true" verhindert und wie man in der Ausgabe im seriellen Monitor dann auch sieht...
Befehl
!
müßte am Ende des Strings noch ein Zeilenumbruch stehen.
Dies beides führt mich nun zu folgen Fragen:
Wie kann ich das empfangen stabiler machen, der ESP soll mich ja schließlich verstehen. Sollte der Fehler mit dem nicht empfangenen Zeichen an Laufzeiten liegen, Eventuell das Empfangen von Befehlen auf einen Interrupt legen? Oder dies über den zweiten Prosessorkern laufen lassen, der noch recht ungenutzt rumlungert? Wenn ja wie? Bisher habe ich sowas noch nicht gemacht.
Die Zweite Frage wäre, wie kann ich dem empfangenen String hinten das letzte Zeichen, also den Zeilenumbruch weg löschen.
Hier das kurze Beispielskript...
void setup() {
Serial.begin(115200);
delay(100);
}
void loop() {
int incomingByte;
String serialString;
incomingByte = Serial.read();
serialString = Serial.readString();
Serial.print("Seriell empfangen: ");
Serial.println(incomingByte, DEC);
Serial.print(serialString);
Serial.println("!");
if (serialString=="Befehl"){
Serial.println("Befehl erkannt");
}
}
Vielleicht noch als Hinweis, ich setze hier vor einem Mac, da diese ja gern mal einen Unterschied machen im Umgang mit Zeilenumbrüchen. Nur falls es relevant sein sollte. Funktionieren muß es natürlich mit beidem Mac und PC.
Entschuldigt meine Unwissenheit, vermutlich ist das Problem den Zeilenumbruch hinten weg zu löschen ganz einfach, ich komme aber gerade nicht drauf und mir fällt auch gerade nicht mal ein, wonach ich da suchen sollte. (Manchmal kommt man ja auch die einfachsten Sachen nicht)
Liebe Grüße
Susann