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

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, 17:45

Pri UNO mi to nerobilo problem. Ale včera som ho chcel vyskúšať na Mege, zatlačil som ho, dal do USB a nič, ani LED-ka sa nerozsvietila. Tak som dal medzi to obyč. Kancelársky papier a v pohode. Ešte si spomínam na jeden tutoriál, keď sa pridával extra kondík, kvôli vytuhnutiu. Ale ja sa musím priznať, že som používal vždy primitívny kód typu, odmeraj teploty odošli, delay 10 min.. A nikdy mi shield nevytuhol.
https://arduino.cz/problemy-se-startem- ... 00-reseni/
Tu je i ten kód :-)

Kód: Vybrat vše

#include <OneWire.h>                 //Onewire kniznica
#include <DallasTemperature.h>       //knižnica senzorov  DS18B20
#define ONE_WIRE_BUS 6               //definovany pin OneWire zbernice
OneWire oneWire(ONE_WIRE_BUS);       //inicializacia pinu
DallasTemperature sensors(&oneWire); //priradenie ds18b20 senzorov na onewire zbernicu
#include <SPI.h>                     //SPI kniznica podporuje aj I2C pripojenia
#include <DHT12.h>                   //DHT12 kniznica chinese
#include "Adafruit_BMP280.h"         //bmp280 kniznica s upravou na 0x76 adresu
#include <Ethernet.h>                //wiznet w5100 kniznica
#define Hostname "Meno zariadenia v sieti" //hostname v sieti
Adafruit_BMP280 bmp; //inicializacia BMP senzora
DHT12 dht12;  //inicializacia DHT12
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };            //MAC ADRESA
char server[] = "www.mojastranka.sk";      //adresa webservera, zapisujte s www
IPAddress ip(192, 168, 1, 100); //LAN IP ak zlyha DHCP
EthernetClient client;  //SPUSTENIE ETHERNETU AKO CLIENTA                                            //INICIALIZACIA SENZORU DHT12
void setup() {          
  sensors.begin();           //start senzorov ds18b20
  bmp.begin();        //start snimaca BMP
                   
  Serial.begin(9600);    //SPUSTENIE SERIOVEJ LINKY --UART-- NA CITACIU RYCHLOST 9600
  while (!Serial) {
    ;                                        
  }



}

void loop() {                                      //ZACIATOK SLUCKY
  if (Ethernet.begin(mac) == 0) {                  //V PRIPADE ZLYHANIA NASTAVENIA MAC ADRESY VYPIŠ
    Serial.println("Chyba konfiguracie cez DHCP"); //SERIOVY VYPIS CHYBY KONFIGURACIE DHCP
    Ethernet.begin(mac, ip);                       //NASTAVENIE IP A MAC ADRESY PRE ETHERNET MODUL
  }
                              
  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();                                   // UKONCENIE PRIPOJENIA ETHERNET SHIELDU
    Serial.println("Odoslane hlavicky s datami: ");  //SERIOVY VYPIS O STAVE USPESNOSTI PRENOSU
    Serial.println("Teplota von: ");                 //SERIOVY VYPIS TEXT O TEPLOTE
    Serial.println(sensors.getTempCByIndex(0));      //SERIOVY VYPIS STAV TEPLOTY NA SENZORE EVIDOVANOM NA INDEXE 0
    Serial.println("Teplota dnu: ");                 //SERIOVY VYPIS TEXT O TEPLOTE
    Serial.println(sensors.getTempCByIndex(1));      //SERIOVY VYPIS STAV TEPLOTY NA SENZORE EVIDOVANOM NA INDEXE 1
    Serial.println("Vlhkost vzduchu: ");             //SERIOVY VYPIS TEXT O VLHKOSTI VZDUCHU
    Serial.println(dht12.readHumidity());            //SERIOVY VYPIS STAVU VLHKOSTI
    Serial.println("Atmosfericky tlak: ");           //SERIOVY VYPIS TEXT O TLAKU VZDUCHU
    Serial.println((bmp.readPressure() / 100) + 30, 120481927710843373493975903614); //SERIOVY VYPIS STAVU RELATIVNEHO TLAKU 30,... je konstanta pre nadmorsku vysku, ktora sa prirata k teplote. (Použite pri nadmorskej do 1000m nadmorska vyska/8,3 tuto hodnotu napiste namiesto 30,...)
    Serial.println("Odpojenie uspesne.");            //SERIOVY VYPIS O STAVE USPESNOSTI PRENOSU
  } else {                                           // AK SA PRIPOJENIE NA SERVER NEPODARI
    Serial.println("Pripojenie zlyhalo");            //SERIOVY VYPIS O NEUSPESNOSTI PRIPOJENIA --> ŽIADNY HTTP REQUEST NEBOL VYKONANY
  }




  delay(15000); //15 SEKUND PAUZA, slucka sa zopakuje
}

Je dobré si dať do loopu toto:

Kód: Vybrat vše

  if (Ethernet.begin(mac) == 0) { 
    Serial.println("Chyba konfiguracie cez DHCP");
    Ethernet.begin(mac, ip); 
  }
Štandardné zdrojáky (examples) to majú iba v setupe. Môže sa stať, že Lease time pre DHCP ti skončí a on už nemá IP, hoci nevytuhol ale na jeho IP, ktorú mal už je iný PC atď.. :-)

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, 21:28

Já tam mám v loopu jen příjem z 2 modulů 433MHz + smyčku co se provádí jen jednou za 5min (měření teploty za oknem a v místnosti + napětí 5V a napětí 3,3V) - tyto data mám jen na pokusy s PHP a mySQL.

Samozřejmě jak před měřením, tak před odesíláním zkoumám, zda je připojení OK, pokud ne, vyhlásím chybu (chyby se načítají +1 a taky odesílají).
Tím jsem zjistil, že 99% chybějících údajů je, že není spojení (přestože modul svítí jak vánoční stromeček) a ten zbytek je, že nevím proč PHP soubor přestože je zavolán, neuloží data do databáze, ale to je tak 1x za hodinu, na to prdím, jedu na 10 let starým Synology, to má samo se sebou co dělat :-)

Asi vyzkouším oboje. díky

IP mám sice DHCP ale podle MAC v routeru natvddo přiřazenou, to doma dělám u všech zařízení, prvních 50 IP mám pro sebe
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, 21:51

Nemáš moc dlhý sieťový kábel? Minule sa to tu riešilo, že 30 metrov je max, na ktorom to funguje. Či to nemáš i nejak hranične čo sa týka kábla.

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 » 04 led 2018, 15:13

martinius96

Tak závady byly 3 a to různé:
- opravdu se někdy dotýkal jeden zapájený drátek na Ethernet shildu napájecího konektoru (závada se projevovala jak jsi říkal ty)
- u jedné desky Ethernet shildu opravdu pomáhá ten kondenzátor mezi + a RESET - druhá je v pohodě
- NAS nestíhá - zapsuji do něj momentálně z 15 arduin, sem tam se na NAS automaticky zálohují telefony + fotky, a koukáme se na filmy - NAS má jednojádro na 600MHz - je vlastně chudák :-)

Přestěhoval jsem výzkum vybíjení baterek v závislosti na venkovní teplotě na ENDORU, ale nedaří se mi tam rozchodit spouštění PHP skriptu pro zápis do databáze - když ho spustím z prohlížeče, zápis se provede, z Arduina - nic.
Nemáš ty nebo někdo jiný vyzkoušenou ENDORU ? Podpora vůbec netuší jak mi pomoci.
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 » 05 led 2018, 00:04

Myslel som si, že to mať niečo s tým :D Zápis sa musí vykonať aj z Arduina na 100%.
Keď som sa pripájal na HTTP stránku, tak server som vždy zapísal v tvare www.mojserver.hlavnadomena.sk
Následne to isté i do host na konci requestu.

15 Arduin ty kráso :O :) To je poriadne číslo requestov atď real-time :D
Nie je endora výlučne https? HTTPS stránku z Ethernet shieldu neotvoríš, nedostaneš sa na ňu.

Ja využívam php5.sk (je i php5.cz) na moje projekty, dokonca mám tam pár priečinkov, na ktorých bežia Arduina i NodeMCU, napríklad meteostanica, ovládanie hlasom, inteligentné vykurovanie, správa inteligentného domu a v podobe.
Dostaneš stránku: https://tvojastranka.php5.cz
Ale keď ju otvoríš ako www.tvojastranka.php5.cz --> tak sa spustí ako HTTP, na to sa posiela request z Arduina :-)

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 » 05 led 2018, 06:34

Všechno mám jak píšeš ....
je to jen HTTP ...

Nevíš jak zjistit, že Arduino spustilo ten logger.php ?

Jinak před spuštěním mám test, že Arduino ty stránky vidí ...

Sere mne to, musel jsem přerušit měření.
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 » 05 led 2018, 08:15

Lidi heeelp,

jaká je statická cesta v PHP na server, pokud máte hosting s domenou 3 řádu ?

- "/blabla.php"
- "blabla.php"
- "/~pavel/blabla.php"

PS: vypadá to, že mám špatně cestu, což mne udivuje, že toto ostatním chodí ?!
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 » 05 led 2018, 13:02

Ešte ma napadla chyba s HTTP, či server nepodporuje iba HTTP 2 namiesto HTTP 1.1 ale ako píšeš, tak Arduino sa pripojí, tak tam problém nie je..
Nechaj si vypísať celú hlavičku, ktorá sa ti vráti. Ak je tam chyba a nepripojí sa, tak ti vráti hlavičku s Errorom 500, 404 atď..

Adresa je vždy (predpokladajme, že sa pripájame na www.arduino.php5.sk/rosko/values/voda.txt)
Host je www.arduino.php5.sk
Následne pri GET je hlavička /rosko/values/voda.txt
Prípadne do toho loggera napíš v php, že si uloží IP adresu klienta, ktorý sa pripojil a uvidíš, či sa ten skript vykonal, alebo nie

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 » 05 led 2018, 22:57

Tak vyřešeno.
Je mi opravdu divné, že to nikomu neblbne, obětoval jsem tomu celý den a závěr je jednoznačný:

-Arduino nasype data do LAN shieldu a ten je najednou vysype ven na WWW stránku web hostingu.
-bohužel se v žádném příkladu co je na mnoha stránkách i zde nečeká na potvrzení, že byla data přijata
-pokud posílám jen jednu hodnotu, je to OK, vejdu se s odesláním a potvrzením od WWW serveru do desítek milisekund.
- já ale odesílám 5 hodnot, v PHP je "zpracovávám" aby byly košér, pak ukládání do databáze, takže se odpověď protáhne někdy až na 500ms
- tak jsem dal před "client.stop(); " pro jistotu 1s pauzu.
- dost nechápu, že to nikomu neblbne - testoval jsem Endora, Wedos, PHP5, českýhosting - všude to dělá

-zpoždění se neprojevuje pokud jsem doma na NAS (tedy dokud jsem NAS nezatížil zapisováním stovek hodnot za minutu, pak se data ztrácely a to právě touto příčinou !!!
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 » 05 led 2018, 23:15

Dá sa to ošetriť aj v kóde to, čo píšeš cez (client.available) ak sa nemýlim.
Bude tam toto hneď za GET requestom:

Kód: Vybrat vše

if(!client.available){
while(true);
}
Resp. niečo na ten štýl. Takto to vie počkať, až bude client available (dostupný), že sa request vykonal a neskočí ti na ďalší krok a to spojenie je neúspešné, resp nedokončené.
Dúfam, že už ti to bude chodiť dobre :-) Mne to nepadlo ani keď som spracovával 6 hodnôt na php5.sk a pritom som každú jednu cez if kontroloval, či neobsahuje -127 OR 85 OR >50 OR <-50 atď.. A neseklo sa to ani raz. Fungovalo cez Arduino i NodeMCU pod HTTP/HTTPS a nebol problém.
Na internete píšu o tom, aby sa používalo niečo takéto, ak sa niečo podobné deje:

Kód: Vybrat vše

while(!client.available()){
delay(1);
}
I keď by som ten delay trošku predĺžil :-) Ty to používaš asi ako samostatný delay bez toho while. While s tým true ti na to počká, napríklad ak máš aj velký ping, počká to aj dlhšie ako tú sekundu a dáta ti tam úspešne pushne.

Možno to dosť záleží aj od kvality vyrobeného chinese kusu :D Môj už má čo-to za sebou ale nikdy som s ním nemal problém.

Odpovědět

Kdo je online

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