Arduino - ovladanie cez web (klient)

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

velasp
Okoloidúci
Okoloidúci
Príspevky: 6
Dátum registrácie: 11 Dec 2009, 00:00
Vek: 39

Arduino - ovladanie cez web (klient)

Príspevok od používateľa 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 !
0

ado130
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 28 Okt 2010, 00:00

Re: Arduino - ovladanie cez web (klient)

Príspevok od používateľa ado130 » 10 Apr 2018, 14:31

"arduino nereaguje"
Vieš kde sa to zaseklo? Skús pozrieť čo máš načítané v tom bufferi.
0

velasp
Okoloidúci
Okoloidúci
Príspevky: 6
Dátum registrácie: 11 Dec 2009, 00:00
Vek: 39

Re: Arduino - ovladanie cez web (klient)

Príspevok od používateľa 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?
0

Používateľov profilový obrázok
zen
Stály člen
Stály člen
Príspevky: 484
Dátum registrácie: 22 Nov 2013, 14:33
Bydlisko: Cadca

Re: Arduino - ovladanie cez web (klient)

Príspevok od používateľa 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?
0
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)

velasp
Okoloidúci
Okoloidúci
Príspevky: 6
Dátum registrácie: 11 Dec 2009, 00:00
Vek: 39

Re: Arduino - ovladanie cez web (klient)

Príspevok od používateľa 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
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6203
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Arduino - ovladanie cez web (klient)

Príspevok od používateľa 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.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino - ovladanie cez web (klient)

Príspevok od používateľa 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í.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok