Neste tutorial (adaptado
daqui) teremos como
resultado um servidor web que permitirá o acionamento de leds ligados à Galileo
a partir de qualquer web browser cuja máquina esteja ligada na mesma rede que a
placa.
Utilizaremos
3 leds coloridos e 3 resistores de 220Ω,
que deverão ser ligados como na Figura 1 abaixo.
Figura 1.
Ligação do circuito para o webservice
O
código abaixo deverá ser colocado na Galileo, sempre lembrando-se dos
procedimentos básicos: ligar a Galileo na energia antes de liga-la na USB do
computador.
#include <Ethernet.h>
#include <SPI.h>
boolean reading = false;
String readString;
// um http request termina com uma linha em branco
boolean currentLineIsBlank = true;
boolean sentHeader = false;
////////////////////////////////////////////////////////////////////////
//CONFIGURACAO
////////////////////////////////////////////////////////////////////////
//byte ip[] = { 192, 168, 0, 199 }; //Para setup manual
//byte gateway[] = { 192, 168, 0, 1 }; //Para setup manual
//byte subnet[] = { 255, 255, 255, 0 }; //Para setup manual
// Caso precise alterar o MAC address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetServer server = EthernetServer(80); //port 80
////////////////////////////////////////////////////////////////////////
void setup(){
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(13, OUTPUT);
Ethernet.begin(mac);
server.begin();
Serial.println(Ethernet.localIP());
}
void loop(){
// escuta chegada de clientes e requests
checkForClient();
}
void printPage(EthernetClient client){
client.println("<!DOCTYPE html>");
client.println("<h1>Galileo na web!</h1>");
client.println("<p>Página web para acender os leds da Galileo.</p>");
client.println("<p>Selecione o led que deseja acender:</p>");
client.println("<input type=button value=LED1 onmousedown=location.href='/?LED1;'>");
client.println("<input type=button value=LED2 onmousedown=location.href='/?LED2;'>");
client.println("<input type=button value=LED3 onmousedown=location.href='/?LED3;'>");
client.println("<input type=button value=LED13 onmousedown=location.href='/?LED4;'>");
client.println("</body>");
client.println("</html>");
client.println();
}
void sendHeader(EthernetClient client, char *title)
{
// envia o http response header padrao
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html ; charset=UTF-8");
client.println ("Connection: close");
client.println();
client.print("<html><head><title>");
client.print(title);
client.println("</title><body>");
}
void checkForClient(){
EthernetClient client = server.available();
int pin = 0;
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
while (readString.length() < 100) {
char c = client.read();
//store characters to string
readString += c;
//Serial.print(c);
if(c == '\n' )
break;
}
if(!sentHeader) {
sendHeader(client,"Web Page Galileo");
printPage(client);
sentHeader = true;
}
//controle no led 1 (pino 2)
if(readString.indexOf("LED1") >= 0 ){
digitalWrite(2, HIGH);
Serial.println("Led 1 On");
delay(3000);
digitalWrite(2, LOW);
readString = "";
}
//controle no led 2 (pino 3)
if(readString.indexOf("LED2") >= 0 ){
digitalWrite(3, HIGH);
Serial.println("Led 2 On");
delay(3000);
digitalWrite(3, LOW);
readString = "";
}
//controle no led 3 (pino 4)
if(readString.indexOf("LED3") >= 0 ){
digitalWrite(4, HIGH);
Serial.println("Led 3 On");
delay(3000);
digitalWrite(4, LOW);
readString = "";
}
//controle no led 13 (pino 13)
if(readString.indexOf("LED4") >= 0 ){
digitalWrite(13, HIGH);
Serial.println("Led 13 On");
delay(3000);
digitalWrite(13, LOW);
readString = "";
}
if (c == '\n' && currentLineIsBlank)
break;
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
readString="";
sentHeader = false;
delay(1); // tempo para o browser receber os dados
client.stop(); // fecha a conexão
digitalWrite(13, LOW);
}
}
Abra
o Serial Monitor assim que o upload for feito para que você possa saber em qual
ip o a Galileo estará servindo a pagina de controle de leds.
De
posse do ip apresentado, digite-o na barra de endereços do seu browser e aperte
“Enter”. A seguinte janela será exibida :
Figura 2. Tela da página de controle de leds
Ainda
com o Serial Monitor aberto verifique que ao pressionar um dos botões da
interface o respectivo led é aceso na placa e também é mostrada uma mensagem no
monitor que este led foi aceso.
Figura 3. Teste do webservice