Stránka 1 z 1

Posílání dat do databáze

Napsal: 16 lis 2018, 20:03
od krtek
Dobrý den, snažím se pomocí arduina uno a wifi modulu esp 8255 posílat data do webové databáze. Postupovala jsem podle tohoto návodu https://arduino.cz/programovani-webovyc ... o-arduino/ kde arduino používám jako klienta (místo ethernet shieldu používám wifi). Ale stále mi nezapisuje hodnoty - na serial monitoru mi vypisuje OK.
Pokud, ale napíši do prohlížeče https://mujweb.cz/logger.php/?hodnota=1000 data se načtou.

Můj kód:

Kód: Vybrat vše







// připojení knihoven
#include <OneWire.h>
#include <SPI.h>
#include <ESP8266WiFi.h>


const char* ssid = "SSID";
const char* password = "heslo";
char host []= "mujweb.cz";
WiFiClient client;


void setup() {

  Serial.begin(115200);
  delay(10);

  senzoryDS.begin();

  delay(5000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi pripojena");  
  Serial.println("IP adresa: ");
  Serial.println(WiFi.localIP());
}



void loop() {
   if(client.connect(host, 80)){
       delay(1000);
       Serial.println("OK");
       client.print("GET http://mujweb.cz/logger.php/?hodnota=");
       client.print("125");
       client.print(" HTTP/1.1\r\n"); //tohle ve verzi na arduino.cz neni, zkousela jsem hledat dalsi zdroje
       client.println("Host: mujweb.cz");
       client.println("Accept: text/html, application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
       client.println("Connection: close");
       client.println();
       client.stop();
       delay(5000);

       
   }
}
php script:

Kód: Vybrat vše

<?php 
$server = "localhost";
$user = "user";
$pass = "heslo";
$db = "data";
$mysqli = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL
if($mysqli and isset($_GET['hodnota'])){ //pokud GET obsahuje 'hodnota', pokračuj
$hodnota = sanitize($_GET['hodnota']);
$sql = "INSERT INTO data (hodnota) VALUES (".$hodnota.")"; //sestavení SQL
$doSql = $mysqli->query($sql); //vykonání SQL
if($doSql){ //test úspěchu
echo 'Zápis byl úspěšný';
}
else{
echo 'Něco se nepovedlo';
}
}
else{
echo "Neco je špatně";
}
function sanitize($input){ //ořízne řetězec
$input = htmlspecialchars($input);
$input = htmlentities($input);
$input = strip_tags($input);
$input = trim($input);
return $input;
}
?>

Re: Posílání dat do databáze

Napsal: 16 lis 2018, 23:22
od jankop
Přiznám se, že naprosto nerozumím tvému problému. O čem vlastně hovoříš? Co má tvůj pokus o webového klienta společného s odkazem na programování webových rozhraní? Podle mě prezentuješ program pro ESP8266(8255), jakou roli tam vlastně hraje Arduino Uno? Co do čeho vlastně nahráváš

Re: Posílání dat do databáze

Napsal: 17 lis 2018, 22:56
od martinius96
Problém máš v GET requeste...
NodeMCU sa pripojí na: mujweb.cz --> toto prebehne úspešne, preto ti vypíše OK.
Následne robíš request na: mujweb.czhttp://mujweb.cz/logger.php/?hodnota=125
Takéto sieťové umiestnenie samozrejme neexistuje.

Možno máš chybu i v MySQLi dopyte, používam inú paradigmu, takže tam presne neviem potvrdiť/vyvrátiť chybu. Riešenie tvojho problému bude zrejme nastaviť správnu cestu. Ďalším možným problémom môže byť aj nesprávny počet medzier pri používaní client.print a client.println.
Tvoj kód pre ESP bude vyzerať cca následovne - ak vychádzam z tvojho vzorového programu, v ktorom máš i tak asi dosť veľké medzery, keďže používaš OneWire zbernicu, neinicializuješ pin, nečítaš zo zbernice a odosielaš statickú hodnotu. Asi nerozumieš na čo sa ktorá knižnica používa.

Kód: Vybrat vše

// připojení knihoven
#include <OneWire.h>
#include <SPI.h>
#include <ESP8266WiFi.h>

const char* ssid = "SSID";
const char* password = "heslo";
char host []= "mujweb.cz";
WiFiClient client;

void setup() {

  Serial.begin(115200);
  delay(10);

  senzoryDS.begin();

  delay(5000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi pripojena");  
  Serial.println("IP adresa: ");
  Serial.println(WiFi.localIP());
}

void loop() {
   if(client.connect(host, 80)){
       delay(1000);
       Serial.println("OK");
       client.print("GET /logger.php/?hodnota=");
       client.print("125");
       client.print(" HTTP/1.1\r\n"); //tohle ve verzi na arduino.cz neni, zkousela jsem hledat dalsi zdroje
       client.println("Host: mujweb.cz");
       client.println("Accept: text/html, application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
       client.println("Connection: close");
       client.println();
       client.stop();
       delay(5000);

       
   }
}

Re: Posílání dat do databáze

Napsal: 18 lis 2018, 03:00
od martinius96
Tá lomka za php súborom by nemala byť...

Kód: Vybrat vše

  client.print("GET /logger.php?hodnota=");

Re: Posílání dat do databáze

Napsal: 18 lis 2018, 21:28
od krtek
Ha, už to posílá :) děkuji za pomoc chyba byla v odřádkování.

Ps. OneWire knihovna patřila k něčemu jinému mám trochu bordel v kódu

Re: Posílání dat do databáze

Napsal: 19 lis 2018, 19:05
od pavel1tu
Na WWW serveru s pomalejší odezvou mi to někdy blblo ...
Pomohlo dát před ten client.stop třeba 1000ms pauzu, aby se stihla vypsat odpověď serveru, než se to utne ....

Jen zkušenost - dělal mi to jeden FREEhosting už nevím který, doma to neblbne (BananaPI)

Kód: Vybrat vše

       client.println("Connection: close");
       client.println();
       delay(3000);
       client.stop();