2016-11-05 1 views
0

Ich experimentiere mit Arduino und ESP8266-Modul, und jetzt versuche ich, einige Sensordaten an einen TCP-Server zu senden. Zu diesem Zweck verwende ich den AT + CIPSTART-Befehl (um eine TCP-Verbindung herzustellen) und AT + CIPSEND, um die Daten zu senden.ESP8266: So senden Sie TCP-Nachrichten mit AT + CIPSEND Befehl

Wenn ich es mit Serial Monitor testen, funktioniert es gut. Nach Eingabe des CIPSEND-Befehls kann ich Text in ein Terminal schreiben und diese Nachricht/Text wird an den TCP-Server gesendet.

Wenn ich versuche, es in Arduino Skizze zu machen, dann sendet es eine leere Nachricht. Die Verbindung funktioniert, aber ich sehe keine Daten.

Wie kann ich einen Nachrichtentext (msg) mit meinem TCP-Paket senden? Hier

ist ein Code-Snippet

// ESP8266 Client 
String cmd = "AT+CIPSTART=\"TCP\",\"";// Setup TCP connection 
    cmd += IP; 
    cmd += "\",3103"; 
    sendDebug(cmd); 
    delay(2000); 
    if(Serial.find("Error")) 
    { 
    debug.print("RECEIVED: Error\nExit1"); 
    return; 
    } 

    String msg = "test"; 
    Serial.print("AT+CIPSEND="); 
    Serial.println(msg.length()); 
    if(Serial.find(">")) 
    { 
    debug.print(">"); 
    debug.print(msg); 
    Serial.print(msg); 
    } 
    else 
    { 
    sendDebug("AT+CIPCLOSE");//close TCP connection 
    } 
    if(Serial.find("OK")) 
    { 
    debug.println("RECEIVED: OK"); 
    } 
    else 
    { 
    debug.println("RECEIVED: Error\nExit2"); 
    } 
} 
+0

Haben Sie AT + CIPMUX = 0 gesendet, um mitzuteilen, dass nur eine Verbindung besteht? Gibt es nach Ihrer AT + CIPSEND = Len etwas anderes als '>' zurück? Könnten Sie ein Protokoll veröffentlichen? – leetibbett

Antwort

0

Zunächst einmal wählen, wie viel Zeichen oder Byte benötigt wird, zu übertragen. Es ist besser, die SoftwareSerial-Bibliothek zu verwenden, um eine Verbindung mit ESP8266 herzustellen und AT-Befehle zu senden.

Angenommen, Sie möchten 5 Bytes senden. Geben Sie die folgenden AT-Befehle ein und geben Sie eine Verzögerung von mehr als 100 Millisekunden vor dem Senden der Daten ein. Hier ist "\ r" Wagenrücklauf und "\ n" ist neue Zeile. Nach der Aufnahme kann ESP8266 verstehen, dass Sie den Befehl beendet haben.

esp.print("AT+CIPSEND=5\r\n"); 
delay(1000); 
esp.print("Hello"); 

Ihr Code funktioniert nicht, weil Sie den ungeschminkten Übertragungsmodus verwenden. Um also ein Paket zu vervollständigen, müssen Sie 2048 Bytes übertragen, die Sie nicht schreiben.