Arduino Polska Forum
Komunikacja z http przez esp8266 - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Sieciowe Protokoły i Urządzenia (https://forum.arduinopolska.pl/dzial-sieciowe-protoko%C5%82y-i-urz%C4%85dzenia)
+--- Wątek: Komunikacja z http przez esp8266 (/watek-komunikacja-z-http-przez-esp8266)



Komunikacja z http przez esp8266 - domik - 25-06-2018

Witam wszystkich forumowiczów! (oficjalne przywitanie, nowy jestem  Big Grin )

Borykam się ostatnio z pewnym problemem, mianowicie próbuję wysłać dane do sql za pośrednictwem skryptu php oraz metody GET.

Ale po kolei. 
Skrypt php działa (testowane w przeglądarce): /sensors.php?a=x     // x - liczba, u mnie typu int.
ESP łączę bez problemów z wifi oraz serwerem:
Kod:
AT+CWMODE=3


OK
AT+CWJAP="test","pass"


OK
AT+CIFSR

+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"1a:fe:34:4e:c5:8e"
+CIFSR:STAIP,"192.168.1.13"
+CIFSR:STAMAC,"18:fe:34:4e:c5:8e"

OK
AT+CIPSTART="TCP","strona.cba.pl",80

CONNECT

OK
AT+CIPSEND=216

>

Do tego momentu wszystko jest w porządku, wysyłając żądanie otrzymuję albo błąd 400 (jeżeli źle sformułuję żądanie), albo zero odpowiedzi od serwera:

Kod:
GET /sensors.php?a=15 HTTP/1.1\r\n
Host: strona.cba.pl\r\n
User-Agent: ESP8266_HTTP_Client\r\n
Connection: keep-alive\r\n\r\n
Myślałem że to przez to, że w Arduino IDE monitor portu nie wysyła poprawnie \r\n, niestety po zaimplementowaniu tych komend do programu na Arduino dalej jestem w tym samym miejscu, tzn. łączy się z siecią i serwerem.

Ma ktoś może pomysł co tutaj jest źle?
Poniżej kod programu:
Kod:
#include <stdlib.h>
#include <SoftwareSerial.h>

SoftwareSerial monitor(10, 11); // RX: D11 TX: D10
void setup()
  {
     monitor.begin(115200);
     connect();
  }

void loop()
  {    
     String data = "GET /sensors.php?a=15 HTTP/1.1\r\nHost: http://strona.cba.pl:80\r\nConnection: keep-alive\r\n\r\n";
     
     monitor.println("AT+CIPSTART=\"TCP\",\"strona.cba.pl\",80");
     delay(1000);
     monitor.print("AT+CIPSEND=");
     monitor.println(2*data.length());
     delay(1500);
     monitor.println(data);
     delay(2000);
     monitor.println("AT+CIPCLOSE");
     delay(3000);    
  }

void connect(){
 delay(1000);
 monitor.println("AT+CWMODE=3");
 delay(2000);
 monitor.println("AT+CWJAP=\"test\",\"pass\"");
 delay(5000);
}
Wiem wiem, wszędzie delay... Na razie chcę zrobić tak żeby działało, później zrobię to na wątkach  Big Grin Big Grin

Pozdrawiam!


RE: Komunikacja z http przez esp8266 - kaczakat - 25-06-2018

Czym się komunikujesz z siecią i skąd wiesz, że jesteś na serwerze? Zajrzyj tu: https://forum.arduinopolska.pl/watek-problem-z-kodem?highlight=sql , kod testowałem i działa wewnątrz mojej sieci, sprawdza czy Arduino jest na serwerze i dopiero wtedy wysyła linijkę do PHP. Jest dla ESP8266 jako samodzielne urządzenie.


RE: Komunikacja z http przez esp8266 - domik - 01-07-2018

Wiedziałem ponieważ otrzymywałem komunikaty typu:
"400 Bad Request
Serwer: nginx"
dokładnie nie pamiętam ale jeszcze była data itd.
Ostatecznie zrobiłem tak jak Ty, tzn wysyłam na serwer bezpośrednio z esp, a dane z arduino wysyłam przez port szeregowy do esp.
Działa aż miło, jednak w wolnej chwili będę próbował jeszcze z sterowaniem przez komendy, ale na razie jest w porządku.

Dzięki za pomoc,
Pozdrawiam!