Forum: Mikrocontroller und Digitale Elektronik ESP8266 auf HTTP GET-Befehl antworten - wie?


von MOBA 2. (Gast)


Lesenswert?

Hallo Leute,

ich versuche vergeblichst, auf einen GET-Befehl per ESP8266 zu 
antworten.
Ich nutze eine  XMega am ESP via UART. Die Kommunikation funktioniert 
beidseitig via TCP/IP suoer, allerdings nur einseitig via HTTP 
PUT/GET-Befehle.

Ich habe eine APP mittels MIT-App-Inventor, dieser kann nur PUT/GET, 
kein TCP/IP. Per PUT kann ich alles senden, entschlüsseln und 
verarbeiten. Allerdings wenn ich einen GET-Befehl sende, und dann Daten 
sende, passiert nichts, bzw. die App enthält diese nicht. Ich denke mal 
das liegt daran, dass ich das Protokoll nicht einhalte.

Bsp: Ich sende per PUT den Befehl: "a35". Dann antwortet der XMega mit 
"LichtAN". Der Ablauf ist so:

App:   PUT "a35"
App:   GET
XMEGA: "AT+CIPSEND,0,7:LichtAN"

Die Antwort beim XMega klappt bei TCP/IP per VB-Programm. Was mache ich 
bei HTTP GET falsch?!

von Georg A. (georga)


Lesenswert?

> Allerdings wenn ich einen GET-Befehl sende, und dann Daten
> sende, passiert nichts, bzw. die App enthält diese nicht.

Mag daran liegen, dass das HTTP-GET eben kein PUT/POST ist ;) GET holt 
nur. Die einzige Information, die man übermitteln kann (von HTTP-Tags 
ala Cookie, etc abgesehen), wird in der URL kodiert.

von Felix C. (felix_c13)


Lesenswert?

Hallo

Verate uns doch erstmal womit dein ESP programmiert wird. Arduino, 
NodeMCU, Sming, SDK direkt?

Marius D. schrieb:
> Die Kommunikation funktioniert
> beidseitig via TCP/IP suoer, allerdings > nur einseitig via HTTP
> PUT/GET-Befehle.

Hä?? Wer kommuniziert mit wem? Und was macht die App genau?

Marius D. schrieb im Beitrag #4476192
> Per PUT kann ich alles senden,
> entschlüsseln und
> verarbeiten.
> Allerdings wenn ich einen GET-Befehl
> sende, und dann Daten
> sende, passiert nichts, bzw. die App
> enthält diese nicht. Ich denke mal
> das liegt daran, dass ich das Protokoll > nicht einhalte.

Also erstmal, du versucht anscheinend etwas über HTTP zu steuern. Dann 
musst du doch wissen wie du das genau willst.

Marius D. schrieb im Beitrag #4476192
> Bsp: Ich sende per PUT den Befehl: "a35". Dann antwortet der XMega mit
> "LichtAN". Der Ablauf ist so:
>
> App:   PUT "a35"
> App:   GET
> XMEGA: "AT+CIPSEND,0,7:LichtAN"
>
> Die Antwort beim XMega klappt bei TCP/IP per VB-Programm. Was mache ich
> bei HTTP

Also direkt per AT-Befehle? Was ist ein VB-Programm?

Generell de ke ich das Arduino gut zu sein scheint, aber vorerst musst 
du uns ein paar mehr Infos geben.

Gruss Felix

von Steven M. (8023)


Lesenswert?

VB wird wohl visual basic bedeuten...

gibt der ESP den ein OK zurück? also sendet er die daten auch weg?

falls du die aktuelle AT drauf hast, kannst du auch CIPSENDEX 
benutzen... dann brauchst du keine zeichen mehr zählen... der sendet 
dann, wenn die angegebenen zeichen erreicht sind, oder mit \0 terminiert 
wird
1
boolean sendData(String Data, char respond[])
2
{
3
  esp8266.println("AT+CIPSENDEX=200");  //für 200 bytes
4
  if (esp8266.findUntil(respond, ">"))
5
  {
6
    esp8266.println(Data);
7
    esp8266.print("\\0");
8
    // Serial.println("SEND: " + Data);
9
    if (esp8266.findUntil(respond, "ERROR"))
10
    {
11
      return true;
12
    }
13
    else
14
    {
15
      debug("ESP DATA SEND ERROR: " + Data);
16
      return false;
17
    }
18
  }
19
  
20
}
21
22
sendData("Daten", "OK");
zum bleistift...


btw;
http://netio.davideickhoff.de/editor  mit der kann man auch ne menge 
anstellen.... und die frisst fast alles

: Bearbeitet durch User
von MOBA 2. (Gast)


Lesenswert?

Hallo Leute,

vielen Dank für die Antworten. Hier mal etwas zu meiner Erklärung:

1. Ich nutze einen XMega (programmiert in C, ganz normal via 
AtmelStuido7).
Arduino mag ich absolut nicht.

2. Der ESP01 hat die Standard-SDK 1.4.0 und ist via UART am XMega 
angeschlossen

3. Das VB (VisualBasic-PC Programm), dient zur Steuerung des XMega. Es 
sendet per TCP/IP Daten an den ESP und Empfängt auch welche 
(funktioniert alles).

4. Zzgl. zur mobilen Steuerung habe ich eine APP mit dem Google MIT 
AppInventor zusammengeklickt. Dieser kann nur HTTP-Befehle (HTTP GET, 
POST, PUT, and DELETE). Senden mache ich mit HTTP PUT, dann bekomme ich 
rel. viel am µC, meine ESP-Lib macht den Rest und selektiert die 
Nutzdaten, auch beim GET-Befehl.

Wenn ein GET-Befehl kommt, detectiert dies die lib, und der MC antwortet 
mit einem reinen AT+CIPSEND.... Befehl. Also wie auch bei dem TCP/IP 
(was dort funktioniert). Bei der App kommt nichts an, abgesendet und das 
OK bekomme ich vom ESP.

Ich denke, dass ich nicht einfach mit AT+CIPSEND=Nutzdaten antworten 
kann, sondern irgendwie ein anderes Format nutzen muss.

von Sascha (Gast)


Lesenswert?

Oh, CIPSENDEX ist für mein momentanes Projekt auch sehr nützlich.

Wo hast du die Info darüber her? In den Tutorials die ich mir so 
ergoogelt habe war immer CIPSEND0,7 etc.

von Steven M. (8023)


Lesenswert?

Sascha schrieb:
> Oh, CIPSENDEX ist für mein momentanes Projekt auch sehr nützlich.
>
> Wo hast du die Info darüber her? In den Tutorials die ich mir so
> ergoogelt habe war immer CIPSEND0,7 etc.

die changelogs/docs beim hersteller...

http://bbs.espressif.com/viewforum.php?f=51

>> http://bbs.espressif.com/viewtopic.php?f=51&t=1022

;)

: Bearbeitet durch User
von MOBA 2. (Gast)


Lesenswert?

Ich hätte auch gerne einen Lösungsvorschlag :|

von MOBA 2. (Gast)


Lesenswert?

Hat keiner eine Idee?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.