No post anterior vimos que algumas mudanças seriam necessárias ao projeto e uma delas é de fundamental importância: a emissão de alertas via e-mail ou SMS. Para isso tinha que adquirir novos componentes que adicionassem essas funcionalidades ao projeto. O primeiro desses componentes que vamos ver hoje é o shield Ethernet Wiznet W5100.
Um shield é uma placa para Arduino que adiciona novas funcionalidades e dá a capacidade de "empilhar" uma placa na outra. Para que tenhamos a capacidade de enviar e-mail temos que ter o shield e um servidor de e-mail que pudéssemos utilizá-lo para enviar mensagens através de uma conexão SMTP. Também seria necessário criar uma conta válida de e-mail neste servidor para utilizar no Arduino.
Assumindo que a conta de e-mail já está criada e o shield já adquirido vamos à implementação individual do shield (sem outras conexões do projeto) para entendermos como ele funciona:
Esquema de ligação:
Basta encaixar o shield Ethernet no Arduino.
Lembrando um pouco de redes agora:
A tecnologia Ethernet implementa a parte física da rede (camada 1 do modelo OSI) e a parte mais em baixo nível da lógica de acesso à rede (camada 2 do modelo OSI). O shield Ethernet W5100 utiliza a biblioteca padrão Ethernet do Arduino e esta biblioteca implementa as funções de acesso à rede (camada 2), implementa também a camada de rede (camada 3 do modelo OSI) para ser utilizado em redes IP e implementa as funções de camada de transporte (camada 4 do modelo OSI). Cada dispositivo Ethernet deve ter um MAC address único e alocar um IP exclusivo dentro de uma rede.
Essas três camadas devem estar funcionando adequadamente para que a comunicação em rede seja realizada. Você deve ter uma rede já funcional (com equipamentos de rede como roteadores ou switches) e o shield Ethernet deverá alocar um IP dessa rede.
O teste básico de rede para verificar se há comunicação entre dois dispositivos configurados com IP na mesma rede é com o utilitário ping, presente nos mais diversos sistemas operacionais. Você deve testar assim em um prompt de comando ou terminal:
ping <o ip que se quer testar>
E se houver comunicação o outro dispositivo irá responder à solicitação.
Para testarmos basta carregar o sketch de exemplo WebServer:
#include <SPI.h>
#include <Ethernet.h>
// O MAC address dave ser setado aqui. Ele deve ser único na sua
// rede
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Se você utiliza DHCP na sua rede não precisa definir esta
// variável. Se não utiliza coloque os quatro octetos do endereço
// separados por vírgula. Esse IP tem que estar dentro da sua
// rede IP já configurada
IPAddress ip(192,168,1,177);
// Como este sketch é para servidor devemos configurar uma porta
// que será utilizada pelo servidor para escutar solicitações.
// Como é um web server a porta padrão para o serviço Web (HTTP)
// é a porta 80
EthernetServer server(80);
void setup() {
// Inicia a serial
Serial.begin(9600);
while (!Serial) {
; // Espera a porta serial para conexão. Necessário somente quando estiver usando o Arduino Leonardo
}
// Inicia o dispositivo Ethernet e fica aguardando conexões
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// Ouvindo para clientes
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// Uma requisição http finaliza com uma linha em branco
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}
Este sketch irá iniciar um web server no Arduino, o endereço IP será o 192.168.1.177 e inicializará a porta 80 e a colocará em escuta.
Você pode testar se a comunicação IP está correta utilizando o ping.
ping 192.168.1.177
Se der resposta a comunicação até o Arduino estará correta.
Use um navegador e digite o endereço 192.168.1.177. Se aparecer a página o web server está respondendo solicitações na porta 80 e está respondendo com um conteúdo (neste sketch ele mostra o valor das entradas analógicas do Arduino).
Com este teste básico conseguimos colocar para funcionar o shield. No próximo post vamos ver como é realizado o envio de e-mail.