duinozone.cz - Arduino a Raspberry fórum

Autor Téma: HTTP parser s Ethernet Wiznet W5100  (Přečteno 265 krát)

Offline martinius96

  • Bastlíř začátečník
  • *
  • Příspěvků: 12
HTTP parser s Ethernet Wiznet W5100
« kdy: Leden 06, 2018, 01:28:38 dopoledne »
Ahojte, tak sa mi konečne podaril parser pre Ethernet shield, ktorý dokáže z celej prijatej HTTP hlavičky vytiahnuť premennú, ktorá je uložená v Json súbore, alebo textovom súbore. Rád by som sa s vami podelil o výsledok. Parser bol skúšaný na jednoriadkovú premennú, na viacriadkovom súbore nebude fungovať, nakoľko je nastavený fixný riadok prijatej response na parsovanie.

S premennou je možné následne pracovať ako s textom, dá sa jednoducho porovnávať cez operátor == s jednoduchým if/else statementom pre vykonanie akcie.
Kód: [Vybrat]
if(readString=="VYP"){
  Serial.println("Vypnutie spotrebica");
digitalWrite(6, LOW);
  }else if(readString=="ZAP"){
  Serial.println("Zapnutie spotrebica");
digitalWrite(6, HIGH);
  }
Využitie napríklad pre ovládanie výstupov z internetu, toto riešenie je Webclient mód.

Sketch môže a nemusí fungovať pri všetkých správne. Je to z dôvodu nastavenia počtu riadkov prijatej response na konkrétne číslo. Response sa môže líšiť v závislosti od hostingu a od webservera, ktorý môže vracať rôzny počet riadkov HTTP hlavičky, ktorá môže byť "obohatená" o doplnkové hlavičky, hlavičky sa líšia aj v závislosti od enginu stránky, napríklad nginx, Apache atď. Testovaná hlavička bola na serveri php5.sk.
Nezabúdajte, že toto funguje iba na HTTP stránkach. S Ethernet shieldom W5100 sa na HTTPS stránku nepripojíte.
Kód: [Vybrat]
#include <SPI.h>
#include <Ethernet.h>
int led = 6;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //fyzicka adresa MAC
char serverName[] = "www.arduino.php5.sk"; // webserver
IPAddress ip(192, 168, 2, 40);
EthernetClient client;
String readString;
int x=0; //pocitadlo riadkov
char lf=10; //line feed character
void setup(){
pinMode(led, OUTPUT);
if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  Serial.begin(9600);
}

void loop(){
if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /PHP_sk/preklady.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  //close 1.1 persistent connection 
    client.println(); //end of get request
  }
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj
    else if (x==12) readString += c; //nasa premenna

   }
if(readString=="Zapni"){
  digitalWrite(led, HIGH);
  }else if(readString=="Vypni"){
  digitalWrite(led, LOW); 
    }
    else{
Serial.println("Nepodporovana premenna.");
}
 
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  delay(5000); //pockaj 5s a vykonaj novu slucku loop
}
Vzorový sketch funguje, je univerzálny pre tento demo kód. Upravte si ho podľa potreby pre váš projekt.
Zmeniť výstup servera do súboru môžete hlasom/textom na: https://arduino.php5.sk/PHP_sk/ - používajte Google Chrome pre zadávanie hlasom.

Podporované príkazy:
Zapni všechno/Zapni/Zapni vše/Zapnout/Zapnout vše/Zapnout všechno
Vypni všechno/Vypni/Vypni vše/Vypnout/Vypnout vše/Vypnout všechno

Podpora/kontakt: Projekty, ktoré som realizoval a podporiť ma môžete prostredníctvom PayPalu na mojej stránke: https://arduino.php5.sk

Offline Leupold

  • Bastlíř začátečník
  • *
  • Příspěvků: 2
Re:HTTP parser s Ethernet Wiznet W5100
« Odpověď #1 kdy: Únor 06, 2018, 10:16:29 dopoledne »
Taking advantage of these things until now would not have to find somewhere else.

Offline martinius96

  • Bastlíř začátečník
  • *
  • Příspěvků: 12
Re:HTTP parser s Ethernet Wiznet W5100
« Odpověď #2 kdy: Únor 06, 2018, 10:17:21 dopoledne »
Admin, porieš to, diki.