Pessoal, gostaria de compartilhar mais uma experiência minha que me ajudou muito num projeto de automação que precisei fazer. Realizei várias pesquisas e achei vários tutoriais e explicações de como fazer o que precisava. Depois de testar e implantar, lembrei e resolvi que deveria compartilhar. Lembrando que não sou o dono da verdade e que talvez essa nem seja a melhor forma ou prática de implantar tal necessidade, estou apenas compartilhando algo que me ajudou muito e talvez possa ajudar alguém.

Tratava-se de conseguir passar parâmetros via URL para o arduino. Algo tipo assim:

http://192.168.1.10/?a=ligar&numLed=12FIM

Onde o arduino receba, trate, separe e armazene em variáveis para poder utilizar nas funções necessárias.

Segue código:

#include <SPI.h>
#include <Ethernet.h>

String readString;
char c;

String acao;
int numLedInt = 0;

EthernetServer server(80);

void setup() {
Serial.begin(9600);
Serial.println(“INICIALIZACAO”);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xDA, 0xFE, 0xEE };
byte ip[] = { 192, 168, 1, 165 }; ##AQUI VOCÊ DEFINE O IP DO ARDUINO
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = {255, 255, 255, 0};

Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
SPI.begin();

}

void loop(){

EthernetClient client = server.available();

if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();

if (readString.length() < 100) {
readString += c;
}

if (c == ‘\n’) {
if(readString.indexOf(“?”) > 0){
//##SEPARANDO O VALOR DA VARIAVEL ACAO##//
int acaoI = readString.indexOf(“?a=”) + 3;
int acaoF = readString.indexOf(“&numLed=”);
acao = readString.substring(acaoI,acaoF);
Serial.print(“ACAO: “);
Serial.println(acao);

//##SEPARANDO O VALOR DA VARIAVEL NUMLED##//
int numLedI = readString.indexOf(“&numLed=”) + 8;
int numLedF = readString.indexOf(“FIM”);
String numLed = readString.substring(numLedI,numLedF);
numLedInt = numLed.toInt();
Serial.print(“NÚMERO LED: “);
Serial.println(numLedInt);
}

##PAGINA WEB QUE SERÁ EXIBIDA PARA O CLIENTE
client.println(F(“HTTP/1.1 200 OK”));
client.println(“GET 192.168.1.20/Controle/teste.php?q=arduino HTTP/1.1 200 OK”);
client.println(F(“Content-Type: text/html”));
client.println();
client.println(F(“<HTML>”));
client.println(F(“<HEAD>”));
client.println(F(“</head>”));
client.println(F(“<body>”));
client.println(F(“<br><br><font face=’arial’ size=’2′><strong>ACAO RECEBIDA: </strong>”));
client.println(String(acao));
client.println(F(“</font><br><br>”));
client.println(F(“<font face=’arial’ size=’2′><strong>LED NUMERO: </strong>”));
client.println(numLedInt);
client.println(F(“</font><br>”));
client.println(F(“</body>”));
client.println(F(“</html>”));
client.flush();
client.stop();
readString=””;
}
}
}
}
}

Repare que algumas variáveis foram criadas apenas para definir os marcadores iniciais e finais para determinar que o que estiver entre esses dois marcadores deve ser capturado e armazenado numa nova variável pelo arduino. Veja os comentários do lado de cada linha

//##SEPARANDO O VALOR DA VARIAVEL ACAO##//
int acaoI = readString.indexOf(“?a=”) + 3; ##Aqui definimos que o marcador inicial será a string “?a=” e o “+3” seria o número de caracteres do marcador definido (?a=) = 3 caracteres;
int acaoF = readString.indexOf(“&numLed=”); ##Aqui definimos que o marcador final será a string “&numLed=”. Nesse caso não precisa definir o número de caracteres.
acao = readString.substring(acaoI,acaoF);##Aqui informamos os marcadores (acaoI e acaoF) na função readString.substring que como resultado extrai a string que estiver entre os dois marcadores e armazena na variável acao. No caso o valor do parametro “a” passado pela URL.
Serial.print(“ACAO: “);
Serial.println(acao);

A mesma coisa foi feita no outro bloco para pegar qual o número do led.

E por último, a rotina monta uma página web e exibi para o cliente os valores passados por parâmetro para fins de demonstração.

No código postado, não fiz nenhum exemplo de uso com os dois parâmetros. Mais seria simples implantar por exemplo uma função que recebesse qual ação executar (através do parâmetro “a”), que no caso poderia ser Ligar ou Desligar, e no parâmetro numLed qual o led que deverá ser aplicada a ação informada. Assim você poderia ligar e desligar determinados leds através da URL.

Abaixo uma imagem do browser e também do monitor serial da IDE do arduino (o código postado, exibe na serial os parâmetros recebidos).

serial

Abraços e obrigado a todos.