ESP8266 jak odeslat data

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

ESP8266 jak odeslat data

#1 Příspěvek od Le_Ze »

Zdravím.
Mam vytvořený servr a jsem připojený k routru.
Takto si zvladnu z ESP8266 stahnoud data jak přes python, lazarus,PHP.

Kód: Vybrat vše

void loop() 
{
 WiFiClient client = server.available();
 if (!client) {
 return;
 }
 client.println("Jsem tu");
}

Jak ale na to, když chci data odeslat z ESP8266 na raspi?
Je jiný zpusob, než PHP?
Ja to zkoušel přes ten PHP a nějak mi to nefunguje.
Kde muže byt kopanec?

Kód: Vybrat vše

const char* host = "http://192.168.1.91";
WiFiClient client;


void loop() {
  if (client.connect(host,8888)) {
      client.print("POST /update HTTP/1.1\n");
      client.print("Host: /nacti.php\n");
      client.print("test");   
  }
  else
  {
  Serial.println("nepovedlo se");
  }
  client.stop();
  delay(30000);
}
Uživatelský avatar
Osmdesat
Příspěvky: 1537
Registrován: 19 led 2016, 00:00
Bydliště: Liberecko

#2 Příspěvek od Osmdesat »

Matně si pamatuji, že mezi sekcí záhlaví a dat musejí být dvě odřádkování. No a samozřejmě na konci http přenosu musí být odřádkování také. No a hlavička host je jen název domény, ne soubor, jak tam píšeš. Jak potom v php skriptu čteš přijatá data (pole $_POST asi nic obsahovat nebude, kdyžs to neposlal v url-formátování arg1=bla1&arg2=bla2...)?
WifiClient bere asi snad jen adresu, bez protokolové předpony (http://)?
Takže by tam bylo:

Kód: Vybrat vše

const char* host = "192.168.1.91"; 
 WiFiClient client;


 void loop() {
   if (client.connect(host,8888)) {
       client.print("POST /update/nacti.php HTTP/1.1\n");
       client.print("Host: 192.168.1.91\n\n");
       client.print("test\n");   
   }
   else
   {
   Serial.println("nepovedlo se");
   }
   client.stop();
   delay(30000);
 }


Ale jestli je chyba opravdu v tomhle, nemohu zaručit.
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#3 Příspěvek od FHonza »

Kód: Vybrat vše

HTTPClient http;

http.begin("http://192.168.1.88:8888/nacti.php");
http.addHeader("Content-Type", "text/plain");
int navrat = http.POST("Zprava od ESP");
String data = http.getString();
http.end();


Takhle ve zkratce mi to funguje.
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#4 Příspěvek od Le_Ze »

@FHonza
Mi ne.
V tom nacti.php mam toto

Kód: Vybrat vše

<?php
$soubor = fopen("./Disk1/text.txt", "w");
fwrite($soubor, "$_POST");
fclose($soubor);
?>

A do toho text.txt se uklada misto Zprava od ESP tak Array
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#5 Příspěvek od FHonza »

Jestli si dobře pamatuju, tak $_POST je vždy asociativní pole. A php převede pole na text jako řetězec "Array". Zkus

Kód: Vybrat vše

implode($_POST);
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#6 Příspěvek od Le_Ze »

fwrite($soubor, implode($_POST));

Textak furt prazdný.
Timto zpusobem člověk nevi, kde je problem, jestli na straně ESP8266, nebo PHP.

Jsem zkusil wiresharka a filtr ip.addr == 192.168.1.20
a hledal něco, co odesila, a nic.

ip.addr == 192.168.1.20 and http.request.method == "POST"
Vubec nic nevypsal.

Asi bude rozumnější to řešit přes client.print, kde vidim, že se to vypisuje a pak to jen řešit na straně PHP.

Kód: Vybrat vše

void loop()
{
 WiFiClient client = server.available();
 if (!client) {
 return;
 }
 client.println("Jsem tu");
}

Kód: Vybrat vše

<?php
$homepage = file_get_contents('http://192.168.1.20');
echo $homepage;
$soubor = fopen("./Disk1/text.txt", "w");
fwrite($soubor, "$homepage");
fclose($soubor);
?>

Toto funguje, ale tu PHP stranku musim spustit ja.
Takže nějak pořešit, aby tu PHP stranku spustila ta ESP8266.
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#7 Příspěvek od FHonza »

Tu stránku "spustí" dotaz na server (ať už GET nebo POST). V první řadě bych se podíval důkladně na obsah superglobální proměnné $_POST při zpracování dotazu. Vypiš si na straně serveru někam do logu (nebo prostě kamkoli) obsah pomocí metody var_dump, případně print_r.
Ten příklad, jak jsem psal, mi funguje. Myslím si, že je něco špatně při zpracování na straně serveru.
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#8 Příspěvek od Le_Ze »

FHonza píše:Vypiš si na straně serveru někam do logu (nebo prostě kamkoli) obsah pomocí metody var_dump, případně print_r.

Tak v PHP zrovna moc neumím :|
Toto jde mimo mně.
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#9 Příspěvek od FHonza »

Jestli provozuješ Windows, tak Ti zítra můžu napsat krátký testovací prográmek pro WAMPServer.
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#10 Příspěvek od Le_Ze »

Zkusim počkat na kamoše, možna poradi, pokud ne, ozvu se.
Dik.
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#11 Příspěvek od Le_Ze »

Tak toto poslal kamoš

Kód: Vybrat vše

$req_dump = print_r($_REQUEST, TRUE);
$fp = fopen('./Disk1/request.log', 'a');
fwrite($fp, $req_dump);
fclose($fp);

V souboru mam

Kód: Vybrat vše

Array
(
)
Array
(
)
Array
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#12 Příspěvek od FHonza »

zkus ještě $_POST místo $_REQUEST
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#13 Příspěvek od Le_Ze »

To same ale napadla mně takova prasarna.
O kousek výše jsem dal to co mi funguje.

Takže vytvořit toho klienta.
V něm zavolat tu php stranku.
HTTPClient http;
http.begin("http://192.168.1.88:8888/nacti.php");

a pak mu tam vlepit client.println("Jsem tu");

:D
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#14 Příspěvek od FHonza »

A jakou hodnotu Ti vrací

Kód: Vybrat vše

int navrat = http.POST("Zprava od ESP");
?

Večer se na to ještě jednou podívám u sebe a dám vědět.
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#15 Příspěvek od Le_Ze »

1852798249
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“