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
Não aparece nada no serial monitor, o que será que aconteceu?
ResponderExcluir