Ciao a tutti, dovrei inviare variabili GET all'arduino e in base al tipo di variabile accendere diversi led.
Ho cercato nella documentazione della libreria ethernet e sul web ma ho trovato pochi scripts e non funzionanti.
C'è una funzione che posso richiamare per ricavare le variabili get?
Grazie ancora!
Ho fatto un primo codice spannometrico..
Ma inviando ?req=ciao il server "non saluta"
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
192,168,1, 51 };
byte gateway[] = {
192,168,1, 1 };
byte subnet[] = {
255, 255, 0, 0 };
Server server(80);
String stringa;
boolean salvo = false;
boolean salvo1 = false;
void setup() {
stringa = String("");
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
}
void loop() {
Client client = server.available();
while(client.connected()){
char c = client.read();
// GET /?req=ciao HTTP/1.1
if (c == '?'){
salvo = true;
}
if (c == '/'){
salvo = false;
}
if (salvo){
stringa.concat(c);
}
if (c == '\n'){
if (client) {
client.println(stringa);
if (stringa == '?req=ciao HTTP'){
client.println("Ciao a te");
}
delay(1);
client.stop();
stringa = "";
}
}
}
}
Guglio,
innanzitutto inizializzerei
salvo= true
e definirei un carattere predefinito per determinare la fine della stringa (per esempio: X).
Io di solito uso lavorare piuttosto sulla dimensione massima predefinita della stringa.
Infine, per verificare se nella stringa ci sia o meno quel che ti aspetti, utilizzerei la funzione indexOf() oppure equals().
Del tipo :
...
if (string.indexOf('ciao') > 0) {
...
Inoltre, io accenderei pure un led come riprova della ricezione della get voluta.
Per il resto, il codice sembrerebbe ok (non l'ho provato).
Grazie mille, ho risolto!
Posto il codice magari a qualcuno serve
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 51 };
Server server(80);
String query;
void setup()
{
query = String("");
Ethernet.begin(mac, ip);
server.begin();
pinMode(8,OUTPUT);
}
void loop()
{
Client client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
query.concat(c);
if (c == '\n') {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
if (query.indexOf("accendi") > 0) {
digitalWrite(8,HIGH);
client.print("Accendo
");
}
if (query.indexOf("spegni") > 0) {
digitalWrite(8,LOW);
client.print("Spengo
");
}
client.print("<a href='/accendi'>Accendi LED</a>
<a href='/spegni'>Spegni LED</a>
");
client.print("<pre>");//DEBUG
client.print(query);// DEBUG
client.print("</pre>");//DEBUG
break;//fermo il ciclo
}
}
}
delay(1);
client.stop();
query = String("");
}
}