Svetelektro.com

Svetelektro.com

Meno:
Heslo:
SVETELEKTRO • Arduino - ovladanie cez web (klient)

Arduino - ovladanie cez web (klient)

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

Arduino - ovladanie cez web (klient)

Odoslaťod velasp » 10 Apr 2018, 14:25

Zdravím,

potrebujem pomoc s programovaním arduina, išiel som podľa tohto návodu (nemám veľa skúsenosti v tejto oblasti):

https://arduino.cz/programovani-webovyc ... o-arduino/

Výstup z php stránky je ako v návode "led:1: resp. led:0:" ale arduino nereaguje. Napadlo mi, či to nie je spôsobené free hostingom, ktorý na stránku pridáva reklamu a tým pádom to arduino neprečíta..

Tu je použitý kód:
Kód: Vybrať všetko
#include <SPI.h>
#include <Ethernet.h>
#define BUFF_DELKA 255
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x9C, 0xB7}; //MAC adresa
IPAddress ip(10,0,0,3); //IP adresa
char server[] = "server.sk"; //URL adresa serveru   
char buffer[BUFF_DELKA]; //zásobník na příchozí řetězec
EthernetClient client;
void setup() {
   pinMode(3, OUTPUT);
   
   Serial.begin(9600);
   
   if (Ethernet.begin(mac) == 0) {
       Ethernet.begin(mac, ip);
   }
   delay(1000);
}
void loop() {
   if(client.connect(server, 80)){
       delay(1000);
       client.println("GET https://server.sk/ovladac.php");
       client.println("Host: server.sk");
       client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
       client.println("Connection: close");
       client.println();
       delay(1000);
       int inBuffer = 0;
       for(int i = 0; i < BUFF_DELKA; i++){ //vyprázdní buffer
           buffer[i] = '\0'; //nastaví všechny prvky buffer na znak konce řetězce
       }
       
       while(client.available()){
           buffer[inBuffer] = client.read();   
           inBuffer++;
       }
       
       if(inBuffer == 6){
           if(buffer[0] == 'l' && buffer[1] == 'e' && buffer[2] == 'd'){
               if(buffer[4] == '1'){
                   digitalWrite(3, HIGH);
               }
               else{
                   digitalWrite(3, LOW);
               }
               Serial.println(buffer[4]);
           }
       }
       client.stop();
   }
   delay(1000);
}


Projekt meteostanice na rovnakom arduine s tým istým serverom, s odosielaním dát do DB, funguje bezproblémovo..

Kde hľadať chybu, resp. ak mi niekto vie poradiť iný spôsob, budem rád...



! Na toto máme špeciálne vytvorenú sekciu. presunul: 11.4.2018 mirosne !
velasp
Obrázok používateľa
Okoloidúci
Okoloidúci
Príspevky: 6
Vek: 34.98
Založený: 11.12.2009
Karma: 0

Re: Arduino - ovladanie cez web (klient)

Odoslaťod ado130 » 10 Apr 2018, 14:31

"arduino nereaguje"
Vieš kde sa to zaseklo? Skús pozrieť čo máš načítané v tom bufferi.
ado130
Obrázok používateľa
Okoloidúci
Okoloidúci
Príspevky: 19
Založený: 28.10.2010
Karma: 0

Re: Arduino - ovladanie cez web (klient)

Odoslaťod velasp » 10 Apr 2018, 15:03

Ako som písal, nie som v tomto "doma" a aby som priblížil o čo ide - je to hobby projekt poskladaný podľa rôznych návodov z netu, mám na chalupe kameru z ktorej pravidelne aktualizované snímky si viem pozrieť cez web. K tomu som si vymyslel meteostanicu, aby som na stránke mal aj info o počasí a tak som sa dostal k arduinu (meteostanicu som rozbehal a funguje podľa očakávaní). Potom som si ešte vymyslel, že k tej meteostanici a hlavne kamere by bolo dobré mať svetlo, ktoré by som vedel cez web zapnúť/vypnúť (je tam síce niekoľko IR diód, ale v noci dosvietia len pár metrov) no toto mi už nefunguje..

Teraz k otázke..

netuším, kde sa to zaseklo. Potreboval by som poradiť polopate, čo konkrétne skontrolovať, vyskúšať. Ako mám pozrieť ten buffer?
velasp
Obrázok používateľa
Okoloidúci
Okoloidúci
Príspevky: 6
Vek: 34.98
Založený: 11.12.2009
Karma: 0

Re: Arduino - ovladanie cez web (klient)

Odoslaťod zen » 12 Apr 2018, 20:06

Neviem, ci to vyriesi tvoj problem, no mne sa nepaci toto:

Kód: Vybrať všetko
       while(client.available()){
           buffer[inBuffer] = client.read();   
           inBuffer++;


Si si isty, ze ti to nemoze pretiect? Co ked mas na linke nejaky sum?
Samozřejmě, že dědeček nemá kapesní hodinky poháněné elektřinou. Takový nesmysl si může vymyslit jen Saturnin. (Zdenek Jirotka, 1942)
zen
Obrázok používateľa
Stály člen
Stály člen
Príspevky: 386
Založený: 22.11.2013
Bydlisko: Cadca
Karma: 6

Re: Arduino - ovladanie cez web (klient)

Odoslaťod velasp » 13 Apr 2018, 14:23

Skúšal som cez sériovú linku vypísať obsah client.read() a zobrazilo kód stránky, kam asi server presmerováva dopyt na php súbor.. neviem čo s tým
velasp
Obrázok používateľa
Okoloidúci
Okoloidúci
Príspevky: 6
Vek: 34.98
Založený: 11.12.2009
Karma: 0

Re: Arduino - ovladanie cez web (klient)

Odoslaťod pocitujlasku » 13 Apr 2018, 14:31

Kód: Vybrať všetko
       client.println("GET https://server.sk/ovladac.php");


Toto sa mi nepaci. nemalo by to byt:
Kód: Vybrať všetko
    client.println("GET /ovladac.php");

Pretoze server definujes vyssie a tu chces uz konkretnu stranku.
Intel, Nvidia, Ubuntu, Firefox, Asus, Nissan, Jelinek 52%, Metal
---------------------------------------------------------------------------------------------
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 4500
Vek: 36.29
Založený: 20.07.2007
Bydlisko: Poprad
Karma: 18

Re: Arduino - ovladanie cez web (klient)

Odoslaťod peterple » 13 Apr 2018, 18:29

Daj sem tú odpoveď servera čo vidíš na sériovej linke. Tvoj program očakáva odpoveď dlhú 6 znakov žiadny kód stránky. V prvom poste si písal že prijímaš práve tých 6 znakov. Teraz píšeš o nejakom kóde.

Padnutie spôsobí zrejme to že ten kód je asi o hodne dlhší ako je 255 znakov a preto ti to poprepisuje kde čo v pamäti SRAM.
Nie je tá odpoveď náhodou nejaká chyba od servera, nakoľko spojenie si naviazal na porte 80(http) ale v GET máš https. No a samozrejme arduino https nedá.
V prvom rade si ošetri to vkladanie odpovede do buffera. Potom sa pozri čo dostávaš a potom je to už len otázka spracovania toho buffera.
teraz testuješ či má odpoveď 6 znakov. Ak áno
tak prvé tri musia byť led. Ak sú další znak sa ignoruje a ak je piaty znak 1 tak výstup 3 dá do jedna, inak do 0.
viac to nerobí.
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
peterple
Ultimate člen
Ultimate člen
Príspevky: 1866
Vek: 52.57
Založený: 25.06.2013
Bydlisko: Krajné
Karma: 52


Naspäť na Arduino

Kto je prítomný

Užívatelia prezerajúci si toto fórum: Žiadny registrovaný používateľ a 1 hosť.

Forums ©
Autor stránky je Ondrej Závodský(zawin), o graficky design sa stará Ľuboš Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
Čas potrebný k spracovaniu stránky 0.30 sekúnd