Posílání dat do databáze

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
krtek
Příspěvky: 5
Registrován: 16 lis 2018, 19:47
Reputation: 0

Posílání dat do databáze

Příspěvek od krtek » 16 lis 2018, 20:03

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;
}
?>

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 16 lis 2018, 23:22

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áš

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

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

Příspěvek od martinius96 » 17 lis 2018, 22:56

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);

       
   }
}

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

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

Příspěvek od martinius96 » 18 lis 2018, 03:00

Tá lomka za php súborom by nemala byť...

Kód: Vybrat vše

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

krtek
Příspěvky: 5
Registrován: 16 lis 2018, 19:47
Reputation: 0

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

Příspěvek od krtek » 18 lis 2018, 21:28

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

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

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

Příspěvek od pavel1tu » 19 lis 2018, 19:05

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();
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 17 hostů