Vous êtes sur la page 1sur 13

1 #include <SPI.

h>
2 #include <Ethernet.h>
3
4 byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
5 IPAddress ip(192, 168, 25, 16);
6 EthernetServer server(80);
7
8 void setup()
9 {
10 Ethernet.begin(mac, ip);
11 server.begin();
12 pinMode(2,OUTPUT);
13 pinMode(3,OUTPUT);
14 pinMode(4,OUTPUT);
15 pinMode(5,OUTPUT);
16 digitalWrite(2,HIGH);
17 digitalWrite(3,HIGH);
18 digitalWrite(4,HIGH);
19 digitalWrite(5,HIGH);
20 }
21 void loop()
22 {
23 String req_str;
24 EthernetClient client = server. available();
25 if (client)
26 {
27 req_str = "";
28 boolean currentLineIsBlank = true;
29 while (client.connected())
30 {
31 if (client.available())
32 {
33 char c = client.read();
34 req_str += c;
35 if(c == '\n' && currentLineIsBlank)
36 {
37 unsigned int posicao_inicial = req_str.indexOf("GET") + 4;
38 unsigned int posicao_final = req_str.indexOf("HTTP/") - 1;
39 String parametro = req_str.substring(posicao_inicial,posicao_final);
40 if(parametro != "/favicon.ico")
41 {
42 client.println("HTTP/1.1 200 OK");
43 client.println("Content-Type: text/html");
44 client.println("Connection: close");
45 client.println();
46 client.println("<!DOCTYPE html>");
47 client.println("<html lang=\"pt-br\">");
48 client.println("<head>");
49 client.println("<meta charset= \"UTF-8\"/>");
50 client.println("<title>Acionamento de relés</title>");
51 client.println("</head>");
52 client.println("<body>");
53 client.println("<h1>Sistema de acionamento de relés V.1</h1>");
54 client.println("<hr/>");
55 client.println("<h2>Portas digitais</h2>");
56 // client.println("<p>Porta D2:</p>");
57 client.println ("<form method=\"get\">");
58 criarformulario (client, parametro);
59 client.println ("</form>");
60 client.println ("</body>");
61 client.println ("</html>");
62 }
63 break;
64 }
90 for(int i = 2; i<6; i++)
91 {
92
93 client_aux.println("Porta D" + String(i)+ " (Relé " + String (i - 1) + ") :");
94 if(parametro_aux.indexOf("D" + String(i)+ "=1") > -1)
95 {
96 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"sub
97 digitalWrite(i,LOW);
98 }
99 else
100 {
101 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"sub
102 digitalWrite(i,HIGH);
103 }
104 }
105
106 for(int i = 6; i<10; i++)
107 {
108 client_aux.println("Porta D" + String(i)+ ":");
109 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"submit
110 }
111
112
113 for(int i = 10; i<14; i++)
114 {
115 client_aux.println("Porta D" + String(i)+ ":");
116 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"submit
117 }
118 }
119
1 #include <SPI.h>
2 #include <Ethernet.h>
3
4 byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
5 IPAddress ip(192, 168, 25, 16);
6 EthernetServer server(80);
7

– Definindo as configurações iniciais


Dentro da função setup(), devemos determinar o modo de operação dos pinos digitais que
serão utilizados (estes terão o papel de saídas digitais) . Além disso, iniciamos a
conexão com a rede local através da função Ethernet.begin() (passando como parâmetro os
endereços MAC e IP definidos anteriormente) e também iniciamos o Servidor Web por meio
da sentença server.begin() (lembre-se que server é o objeto criado para representar
o Servidor Web no código).

1 void setup()
2 {
3 Ethernet.begin(mac, ip);
4 server.begin();
5 pinMode(2,OUTPUT);
6 pinMode(3,OUTPUT);
7 pinMode(4,OUTPUT);
8 pinMode(5,OUTPUT);
9 digitalWrite(2,HIGH);
10 digitalWrite(3,HIGH);
11 digitalWrite(4,HIGH);
12 digitalWrite(5,HIGH);
13 }

Observe que além da execução dos procedimentos apresentados anteriormente, nós também
optamos por colocar os pinos citados nível alto, pois, os relés do módulo que
utilizamos são acionados com nível baixo em suas entradas, portanto, como queremos que
eles comecem sem qualquer tipo de acionamento, devemos proporcionar 5 volts em seus
respectivos pinos de entrada.
– Entendendo as requisições do navegador
Nos tutoriais anteriores, ressaltamos o mecanismo básico de funcionamento dos códigos
voltados para a criação de Servidores Web, o qual, começa através de um procedimento
padrão, que por sua vez, consiste em utilizar uma variável para obter caractere por
caractere da requisição feita pelo navegador até que esta seja completamente recebida
pelo Arduino UNO, de modo que, apenas a partir deste ponto inicia-se o processo de
elaboração da página.

Em nosso último tutorial, apresentamos o modo de funcionamento do método GET, portanto,


vamos utilizá-lo novamente no envio de informações provenientes dos formulários para o
nosso Servidor Web. Entretanto, vamos seguir um caminho um pouco diferente para que
você possa ver a existência de outras possibilidades. O primeiro passo neste
procedimento será a declaração de uma variável local, do tipo String (esta servirá para
armazenar a requisição feita pelo navegador).

1 void loop()
2 {
3 String req_str;
4 .
5 .
6 .

Em seguida, criamos o processo no qual esta variável será preenchida com os caracteres
da requisição.

1 if (client.available())
2 {
3 char c = client.read();
4 req_str += c;
5 .
6 .
7 .
8

Por fim, declaramos duas variáveis do tipo inteiro sem sinal e uma do tipo String, as
quais, serão responsáveis por retirar o que nós chamamos em nosso tutorial anterior
de parâmetro da requisição. Além disso, este trecho de código também cumpre o papel de
determinar se o parâmetro é o texto /favicon.ico, de modo que, caso não seja (pois
neste momento isto não é interessante para nós), seguimos adiante na construção da
página.

A explicação das funções que compõem este passo estão demonstradas em nosso tutorial
anterior. Você pode acessá-lo clicando aqui!

1 if(c == '\n' && currentLineIsBlank)


2 {
3 unsigned int posicao_inicial = req_str.indexOf("GET") + 4;
4 unsigned int posicao_final = req_str.indexOf("HTTP/") - 1;
5 String parametro = req_str.substring(posicao_inicial,posicao_final);
6 if(parametro != "/favicon.ico")
7 {
8 .
9 .
10 .

– Enviando o cabeçalho da página


Após termos detectado que o parâmetro da requisição não é o fragmento de
texto /favicon.ico, devemos primeiramente enviar o cabeçalho padrão para o navegador.

1 client.println("HTTP/1.1 200 OK");


2 client.println("Content-Type: text/html");
3 client.println("Connection: close");
4 client.println();

– Desenvolvendo a nossa página


Para começar a desenvolver a nossa página, utilizamos primeiro a sentença <!DOCTYPE
html> para informarmos ao navegador que estamos utilizando a versão 5 da linguagem
HTML.

1 client.println("<!DOCTYPE html>");

1 client.println("<head>");
2 client.println("<meta charset= \"UTF-8\"/>");
3 client.println("<title>Acionamento de relés</title>");
4 client.println("</head>");
5

1 client.println("<body>");
2 client.println("<h1>Sistema de acionamento de relés V.1</h1>");
3 client.println("<hr/>");
4 client.println("<h2>Portas digitais</h2>");
5 .
6 .
7 .
1 client.println ("<form method=\"get\">");
2 criarformulario (client, parametro);
3 client.println ("</form>");

1 client.println("<!DOCTYPE html>");
2 client.println("<html lang=\"pt-br\">");
3 client.println("<head>");
4 client.println("<meta charset= \"UTF-8\"/>");
5 client.println("<title>Acionamento de relés</title>");
6 client.println("</head>");
7 client.println("<body>");
8 client.println("<h1>Sistema de acionamento de relés V.1</h1>");
9 client.println("<hr/>");
10 client.println("<h2>Portas digitais</h2>");
11 client.println ("<form method=\"get\">");
12 criarformulario (client, parametro);
13 client.println ("</form>");
14 client.println ("</body>");
15 client.println ("</html>");

1 for(int i = 0; i<2; i++)


2 {
3 client_aux.println("Porta D" + String(i)+ ":");
4 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"submit()\"
5 }
1 for(int i = 2; i<6; i++)
2 {
3
4 client_aux.println("Porta D" + String(i)+ " (Relé " + String (i - 1) + ") :");
5 if(parametro_aux.indexOf("D" + String(i)+ "=1") > -1)
6 {
7 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"subm
8 digitalWrite(i,LOW);
9 }
10 else
11 {
12 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"subm
13 digitalWrite(i,HIGH);
14 }
15 }

1 for(int i = 6; i<10; i++)


2 {
3 client_aux.println("Porta D" + String(i)+ ":");
4 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"submit(
5 }
6
7
8 for(int i = 10; i<14; i++)
9 {
10 client_aux.println("Porta D" + String(i)+ ":");
11 client_aux.println("<input type=\"checkbox\" name=\"D" + String(i) + "\" value=\"1\" onclick=\"submit(
12 }
13 }

Daniel Madeira