Apostila - Servidor Web Com Arduino
Apostila - Servidor Web Com Arduino
Controle e monitoramento
Básico e Avançado
Sumário
Servidor Web Arduino com Ethernet Shield ........................................................................... 2
Servidor Web Arduino Básico ................................................................................................... 3
Estrutura da página Web (HTML) ............................................................................................ 9
Servidor Web Arduino SD Card ............................................................................................. 12
1
1. Servidor Web Arduino com Ethernet Shield
Este tutorial de várias partes mostra como configurar um Arduino com
Ethernet blindado como um servidor web. Os servidores web neste tutorial são
usados para exibir páginas da web que podem ser acessadas a partir de um
navegador da Web em execução em qualquer computador conectado à mesma
rede que o Arduino. Algumas das páginas do servidor web Arduino permitem o
acesso ao hardware do Arduino - isso permite que o hardware seja controlado
(por exemplo, ligar e desligar um LED da página da Web) e monitorado (por
exemplo, ler o estado de um switch e exibi-lo em uma página da Web ). O tutorial
ensina o que é necessário para construir um servidor web, incluindo toda a
tecnologia, como HTTP, HTML, CSS, JavaScript, AJAX, etc Ele começa com os
conceitos básicos de hospedagem de uma simples página web sobre o Arduino
e avança passo a passo, Passo a partir daí.
Hardware necessário
Componentes de Hardware
O hardware necessário para seguir esta série de tutoriais é:
Configuração do hardware
2
2. Servidor Web Arduino Básico
Um servidor web muito básico que serve uma única página da web
usando o protetor Ethernet Arduino. Um cartão SD não é usado neste exemplo,
pois a página web faz parte do esboço do Arduino.
#include <SPI.h>
#include <Ethernet.h>
3
EthernetServer server(80); // create a server at port 80
void setup()
{
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
}
void loop()
{
EthernetClient client = server.available(); // try to get client
4
// every line of text received from the client ends with
\r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}
Nota importante!
5
Usando o Sketch
Solução de Problemas
Redefinição
Se você não conseguiu se conectar ao Arduino, tente redefini-lo
pressionando o botão de reinicialização na blindagem Ethernet e, em seguida,
navegue para o servidor web novamente.
Endereço IP e intervalo de endereços
Certifique-se de que definiu o endereço IP correto do Arduino para o
intervalo de endereços da sua rede. Os três primeiros números do endereço IP
devem corresponder à sua rede. O último número deve ser exclusivo - ou seja,
deve ser o único dispositivo na rede com esse número.
Gateway e Máscara de Sub-rede
Experimente especificar o gateway de rede e a máscara de sub-rede no
esboço se ainda houver problemas de conexão de rede. Você precisará alterar
os endereços no código abaixo para corresponder à sua rede. Adicione o
gateway e a sub-rede sob o endereço MAC no sketch:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// the router's gateway address:
byte gateway[] = { 10, 0, 0, 1 };
6
// the subnet:
byte subnet[] = { 255, 255, 0, 0 };
Cabo Ethernet
Solicitação de cliente
Quando você navega para o endereço IP do servidor Arduino, o
navegador da Web (cliente) enviará uma solicitação para o servidor, como a
mostrada abaixo.
GET / HTTP/1.1\r\n
Host: 10.0.0.20\r\n
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:17.0) Gecko/20100101
Firefox/17.0\r\n
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: en-ZA,en-GB;q=0.8,en-US;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip, deflate\r\n
Connection: keep-alive\r\n
\r\n
7
Resposta do servidor
Mais uma vez, os caracteres não visíveis \ r \ n são mostrados na resposta acima.
A função println () no esboço adiciona automaticamente os caracteres \ r \ n ao
final de cada linha. A função println () vazia no final da resposta HTTP
simplesmente envia \ r \ n sem texto à frente.
Página da web
Depois que o servidor enviou a resposta HTTP, ele envia a página da web
real que é exibida no navegador. A página da web consiste em texto com tags
HTML. Você não vê as tags no navegador, pois essas tags são interpretadas
pelo navegador. Para ver o código fonte HTML real, no navegador, clique com o
botão direito do mouse na página do servidor Arduino e clique em Exibir fonte da
página. As tags de marcação HTML reais são mostradas abaixo.
8
3. Estrutura da página Web (HTML)
Os servidores web do Arduino neste tutorial são usados para servir
páginas HTML, por isso faz sentido nesta fase descobrir mais sobre o HTML,
que é o que esta parte do tutorial cobre.
<!DOCTYPE html>
<html>
<head>
<title>Arduino Web Page</title>
</head>
<body>
<h1>Hello from Arduino!</h1>
<p>A web page from the Arduino server</p>
</body>
</html>
Tags HTML
A maioria das tags terá uma tag de abertura e fechamento. O texto ou recurso
colocado entre o conjunto de etiquetas de abertura e de fechamento será
formatado pelo navegador de acordo com o tipo de tag. A tag de fechamento é
exatamente a mesma que a tag de abertura, exceto que a tag de fechamento
tem uma barra diagonal após o ângulo de abertura.
- aqui a tag de parágrafo (<p>) é usada para dizer ao navegador que o texto
entre a abertura <p> e o fechamento </ p> é um parágrafo de texto. O navegador
irá formatá-lo adequadamente.
Um exemplo de uma tag que não tem uma tag de fechamento é a quebra de
linha que se move para a próxima linha na página da Web. Isso é escrito como
<br> (seguindo o padrão HTML) ou <br /> (seguindo o padrão XHTML).
9
Aprender HTML é sobre como aprender tags HTML - quais tags estão
disponíveis, o que elas fazem e quais tags podem ser inseridas entre quais
outras tags.
Coisas que não aparecem na página são colocadas entre as marcas principais,
p. O texto para o título da página que aparece na barra superior da janela do
navegador da Web. Também arquivos como folhas de estilo podem ser incluídos
aqui.
Tags adicionais serão introduzidas neste tutorial à medida que forem usadas.
Tag de Cabeçalho
10
Cada nível de título adicional será renderizado em texto menor pelo navegador.
Tag do título
Aprendendo HTML
11
4. Servidor Web Arduino SD Card
O Arduino, o Arduino Ethernet shield eo cartão micro SD são usados para fazer
um servidor web que aloja uma página web no cartão SD. Quando um navegador
solicita uma página da Web a partir do servidor da Web Arduino, o Arduino
buscará a página da web a partir do cartão SD.
Criando a página da Web
Como a página da Web deve ser armazenada no cartão SD, ela deve primeiro
ser criada usando um editor de texto e, em seguida, copiada para o cartão SD.
Um editor de texto como Geany pode ser usado - ele está disponível para
download para o Windows e estará nos repositórios para a maioria das
distribuições Linux baseadas no Ubuntu. O Geany tem destaque de sintaxe e
fechará automaticamente tags HTML para você, o que torna a edição de páginas
da Web mais fácil. É possível usar qualquer outro editor de texto, mesmo
Notepad do Windows.
Nada de novo aqui, é o mesmo que a página web do primeiro servidor web neste
tutorial com apenas o texto alterado. Teste esta página web abrindo-a em um
navegador da Web.
12
e copie o arquivo index.htm para o cartão micro SD. Agora conecte o cartão SD
no slot para cartão micro SD na blindagem Ethernet.
Hardware
Agora você deve ter o cartão micro SD com a página da Web copiada para ele
inserido no slot do cartão na blindagem Ethernet Arduino. A blindagem Ethernet
deve ser conectada a um Arduino compatível e a um cabo Ethernet conectado à
rede. O protetor Arduino / Ethernet deve ser alimentado por um cabo USB.
Arduino Sketch
13
Author: W.A. Smith, http://startingelectronics.org
--------------------------------------------------------------*/
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
File webFile;
void setup()
{
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
Serial.begin(9600); // for debugging
// initialize SD card
Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
Serial.println("ERROR - Can't find index.htm file!");
return; // can't find index file
}
Serial.println("SUCCESS - Found index.htm file.");
}
void loop()
{
14
EthernetClient client = server.available(); // try to get client
15
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}
Usando o sketch
Detectando index.htm
Se o sketch anterior neste tutorial funcionou, então a única coisa que pode dar
errado é com a inicialização do cartão SD e encontrar o arquivo index.htm no
cartão. Se o arquivo não estiver no cartão ou não tiver o nome exato index.htm,
o servidor não será capaz de exibir a página da Web.
Sketch Explicação
Código Adicional
Em vez de enviar a página da Web linha a linha a partir do código como no sketch
eth_websrv_page, este novo esboço agora abre o arquivo index.htm do cartão
SD e envia o conteúdo para o cliente da web (o navegador da Web).
16