Ahojte, tak sa mi konečne podaril parser pre Ethernet shield, ktorý sa mi podarilo z časti naportovať z NodeMCU. Parser 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:
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, ovládanie rôznych periférii.
Sketch môže a nemusí fungovať pri všetkých weboch 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, nepodporuje TLS/SSL.
Kód:
#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šetko/Zapni/Zapnúť/Zapnúť všetko
Vypni všetko/Vypni/Vypnúť/Vypnúť všetko
Podpora/kontakt: Projekty, ktoré som realizoval a podporiť ma môžete prostredníctvom PayPalu na mojej stránke:
https://arduino.php5.sk