Stránka 1 z 2
PHP přestalo přijímat data z Arduina
Napsal: 19 lis 2017, 22:46
od TomTP
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.
Re: PHP přestalo přijímat data z Arduina
Napsal: 20 lis 2017, 06:15
od martinius96
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.
Re: PHP přestalo přijímat data z Arduina
Napsal: 20 lis 2017, 07:51
od TomTP
Díky. Ale stále nic
(jedu přes wifi - ESP8266, to by na to ale nemělo mít žádný vliv)
Re: PHP přestalo přijímat data z Arduina
Napsal: 20 lis 2017, 09:42
od TomTP
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
Re: PHP přestalo přijímat data z Arduina
Napsal: 02 pro 2017, 09:35
od pavel1tu
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 ?
Re: PHP přestalo přijímat data z Arduina
Napsal: 02 pro 2017, 10:08
od pavel1tu
Vyřešeno, nejsem programátor
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ší ...
Re: PHP přestalo přijímat data z Arduina
Napsal: 02 pro 2017, 11:50
od martinius96
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);}
?>
Re: PHP přestalo přijímat data z Arduina
Napsal: 01 led 2018, 14:34
od pavel1tu
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 ....
Re: PHP přestalo přijímat data z Arduina
Napsal: 01 led 2018, 15:40
od martinius96
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.
Re: PHP přestalo přijímat data z Arduina
Napsal: 01 led 2018, 17:28
od pavel1tu
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