PHP přestalo přijímat data z Arduina

TomTP
Příspěvky: 37
Registrován: 19 lis 2017, 22:28
Reputation: 0

PHP přestalo přijímat data z Arduina

Příspěvek od TomTP » 19 lis 2017, 22:46

Ahoj, řeším problém se kterým si už nevím rady. Pokud by se našel někdo kdo by mě nasměroval, budu velmi vděčný. Mám server NAS Synology, na něm běží PHP 5.6, webový server, MariaDB 5 a phpMydamin. Z arduin si po domácí wifi sítě loguji spousty hodnot, které si pak zobrazuji na vytvořených www PHP stránkách. Vše fungovalo……až do provedení NASem požadované aktualizace PHP, webového serveru, phpMydamin a MardiaDB 5. Od té doby se mi z arduin nezapsal žádný záznam. Pokud vložím záznam do DB tabulky pomocí přímého linku v prohlížeči PC či mobilu, např. „http://192.168.0.103/Arduino/Vysilac_01 ... teplota=20“, záznam se v pořádku zapíše. Vzhledem k tomu, že na arduinech se nic neměnilo, problém musí být na straně NASu. Jediná logická věc mi přijde, že již z nějakého důvodu neplatí do té doby platné "zápatí" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 jehož smyslu moc nerozumím.

K zápisu arduina do php mám použit tento kód:

if(client.connect(192.168.0.103, 80)){
Serial.println("Pripojeno k NASu") ;
String postStr2 = "GET http://192.168.0.103/Arduino/Vysilac_01/logger.php?";
postStr2 +="teplota=";
postStr2 += String(t);
postStr2 +="&vlhkost=";
postStr2 += String(h);
client.print(postStr2);
client.println("Host: http://192.168.0.103");
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();
}

Díky za každou radu, co mě někam posune.

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

Re: PHP přestalo přijímat data z Arduina

Příspěvek od martinius96 » 20 lis 2017, 06:15

Ja to používam takto:

Kód: Vybrat vše

  if (client.connect(server, 80)) {               // AK SA NAPOJI NA SERVER NA PORTE 80 (HTTP)
    sensors.requestTemperatures();                //VYZIADANIE HODNOT ZO SENZOROV
    Serial.println("Pripojenie uspesne na webserver"); //VYPIS NA SERIOVU LINKU
    client.print("GET /add.php?temp1=");         //ZAČIATOK HTTP REQUEST --> client.print GET METODOU s oznacenim premennej, do ktorej pridame hodnotu v URL
    client.print(sensors.getTempCByIndex(0));    // VYPIS HODNOTY 1. SENZORU NA INDEXE 0 DO URL
    client.print("&temp2=");                     //TEXTOVE DOPLNENIE DRUHEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL
    client.print(sensors.getTempCByIndex(1));    // VYPIS HODNOTY 2. SENZORU NA INDEXE 1 DO URL
    client.print("&hum1=");                      //TEXTOVE DOPLNENIE TRETEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL
    client.print(dht12.readHumidity());          // VYPIS VLHKOMERU DO LINKU, HODNOTA, KTOREJ SA ROVNA PREMENNA HUM1
    client.print("&pres1=");                     //TEXTOVE DOPLNENIE STVRTEJ PREMENNEJ DO KTOREJ UVEDIEME COMU SA ROVNA TAKTIEZ V URL
    client.print((bmp.readPressure() / 100) + 30, 120481927710843373493975903614); // VYPIS BAROMETRA DO LINKU + PRIPOCITANA KONSTANTA NA ZAKLADE NADMORSKEJ VYSKY PRE SPRAVNY PREPOCET NA RELATIVNY TLAK
    client.println(" HTTP/1.1");                 // UKONCENIE REQUESTU ZALOMENIM RIADKA A DOPLNENIM HLAVICKY HTTP S VERZIOU
    client.println("Host: www.mojastranka.sk"); // ADRESA HOSTA, NA KTOREHO BOL MIERENY REQUEST (NIE PHP SUBOR)
    client.println("Connection: close");         //UKONCENIE PRIPOJENIA ZA HTTP HLAVICKOU
    client.println();                            //ZALOMENIE RIADKA KLIENTSKEHO ZAPISU
    client.stop(); 
    }
Skús to takto a malo by to ísť :-) Je to cez Ethernet shield W5100 asi rovnako ako u teba.

TomTP
Příspěvky: 37
Registrován: 19 lis 2017, 22:28
Reputation: 0

Re: PHP přestalo přijímat data z Arduina

Příspěvek od TomTP » 20 lis 2017, 07:51

Díky. Ale stále nic :(
(jedu přes wifi - ESP8266, to by na to ale nemělo mít žádný vliv)

TomTP
Příspěvky: 37
Registrován: 19 lis 2017, 22:28
Reputation: 0

Re: PHP přestalo přijímat data z Arduina

Příspěvek od TomTP » 20 lis 2017, 09:42

VYŘEŠENO.
Špatná syntaxe:
client.println("Host: http://192.168.0.103")
Správná syntaxe:
client.println("Host: 192.168.0.103")

S podivem je, že do update webového serveru to dlouhé měsíce nevadilo :roll:

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

Re: PHP přestalo přijímat data z Arduina

Příspěvek od pavel1tu » 02 pro 2017, 09:35

Já se u tohoto teď zasekl - když zavolám write.PHP z prohlížeče, do tabulky mi to zapíše, když ho zavolám z arduina, tak nic.
Taky se mi na Synology nedaří vytvořit dalšího uživatele pro databázi, musím to testovat s root

Neřešil jsi to ?

Můžeš mi poslat kod arduina i PHP ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

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

Re: PHP přestalo přijímat data z Arduina

Příspěvek od pavel1tu » 02 pro 2017, 10:08

Vyřešeno, nejsem programátor :-D

1) za write.php jsem měl navíc lomítko "write.php/?"
2) Mě to doma funguje bez ukončení " " HTTP/1.1", jemu ne ...

děkuji


PS: nevím, kamarád má na Synology jako WWW server Apache, já Nqinx a asi se to liší ...
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

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

Re: PHP přestalo přijímat data z Arduina

Příspěvek od martinius96 » 02 pro 2017, 11:50

Ja používam pre Ethernet shield taký request (HTTP) - výrez:

Kód: Vybrat vše

 if (client.connect(server, 80)) {      
    sensors.requestTemperatures();      
    client.print("GET /add.php?temp1=");  
    client.print(sensors.getTempCByIndex(0)); 
    client.print("&temp2=");  
    client.print(sensors.getTempCByIndex(1));
    client.print("&hum1="); 
    client.print(dht12.readHumidity());          
    client.print("&pres1=");                    
    client.print((bmp.readPressure() / 100) + 30, 120481927710843373493975903614); 
    client.println(" HTTP/1.1"); 
    client.println("Host: www.mojastranka.sk"); 
    client.println("Connection: close");      
    client.println();                            
    client.stop();                                   
    }
Spracovanie výsledku do MySQL databázy cez PHP (Webclient Ethernet shield):

Kód: Vybrat vše

    <?php
     include ("connect.php");
     $temp1 = $_GET["temp1"];
     $t2 = $_GET["tempinside"];
     $p = $_GET["pressure"];
     $h = $_GET["humidity"];
     if($temp1== "" || $t2=="" || $p=="" || $h=="" || $temp1== 0 || $t2==0 || $p==0 || $h==0 || $temp1< -40 || $t2< -40 || $temp1>50 || $t2>50 || $p>1050 || $p<950 || $h==0.01 || $h==0.02 || $h==0.03 || $h==95){
     	echo 'Zabránenie nesprávnemu typu/hodnote dát uložiť sa do databázy!';
     }
     else{
    $ins = mysqli_query($con,"INSERT INTO `TempOutside` (`temperature`) VALUES ('".$temp1."')") or die (mysqli_error($con)); 
    $ins2 = mysqli_query($con,"INSERT INTO `TempLivingRoom` (`temperature`) VALUES ('".$t2."')") or die (mysqli_error($con));
    $ins3 = mysqli_query($con,"INSERT INTO `PressureOutside` (`pressure`) VALUES ('".$p."')") or die (mysqli_error($con)); 
    $ins4 = mysqli_query($con,"INSERT INTO `Humidity` (`humidity`) VALUES ('".$h."')") or die (mysqli_error($con));  
       }
    ?>
NodeMCU, ukladanie teploty na internet (HTTPS) - výrez:

Kód: Vybrat vše

 sensors.requestTemperatures();    
String teplota = String (sensors.getTempCByIndex(0));
  String url = "/system/nodemcu/zapisteplotu.php?teplota=" + teplota;
  client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
Spracovanie v PHP do .txt súboru teplota od NodeMCU (prepisuje sa) - pokračujúci príklad k NodeMCU kódu!!!!:

Kód: Vybrat vše

<?php
$teplota = $_GET["teplota"];
     if($teplota==-127 || $teplota==85){
       echo 'Chyba senzora!';
      
    }else{
file_put_contents('teplota.txt', $teplota);}

?>

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

Re: PHP přestalo přijímat data z Arduina

Příspěvek od pavel1tu » 01 led 2018, 14:34

Další problém:

Po restartu mi UNO s připojeným "sendvičem" LAN modulem tak z 1/3 nenajede ten LAN modul.

- dal jsem jeden k UNU, zapojil i Rasberry, dal měřit teplotu a odeslat každé 3mmin.
- každou hodinu jsem jim vypnul na 5 min elektřinu (takovým tím mechanickým časovačem)
- po 2 dnech Arduino tak o 1/3 méně naměřených hodnot

Přestávám tomu věřit ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

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

Re: PHP přestalo přijímat data z Arduina

Příspěvek od martinius96 » 01 led 2018, 15:40

Pri Uno mi nerobil ethernet shield problem. Ale vcera som pripojil megu a zhasla.. Problem bol, ze sa pinmi lan portu dotykalo napajacieho konektoru Arduina.

Skus medzi to dat nejaky papier.. Pri Une mi to sice nerobilo ale moze sa tam nieco skratovat.

Nemas na tom wiznete nejake piny, ktore by sa ti dotykali? Casto je to problem, ze sa nejaky ohne. Neprehrieva sa ti ten Wiznet? Skus dat na neho chladic z mosfetu ci to nepomoze.

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

Re: PHP přestalo přijímat data z Arduina

Příspěvek od pavel1tu » 01 led 2018, 17:28

martinius96 píše:
01 led 2018, 15:40
Pri Uno mi nerobil ethernet shield problem. Ale vcera som pripojil megu a zhasla.. Problem bol, ze sa pinmi lan portu dotykalo napajacieho konektoru Arduina.

Skus medzi to dat nejaky papier.. Pri Une mi to sice nerobilo ale moze sa tam nieco skratovat.

Nemas na tom wiznete nejake piny, ktore by sa ti dotykali? Casto je to problem, ze sa nejaky ohne. Neprehrieva sa ti ten Wiznet? Skus dat na neho chladic z mosfetu ci to nepomoze.
Tak tohle mne nenapadlo (opravdu se to skoro dotýká), nepřehřívá se, ale lipnul jsem na něj chladič.
Na LAN Shield jsem zespoda po cele plos nalepil folii.

Uvidíme
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 12 hostů