• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Komunikacja z http przez esp8266
#1
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!
 
Odpowiedź
#2
Czym się komunikujesz z siecią i skąd wiesz, że jesteś na serwerze? Zajrzyj tu: https://forum.arduinopolska.pl/watek-pro...hlight=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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
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!
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości