Acesso ao Arduino com Shield Ethernet

eth shield

O Shield Ethernet permite ao Arduino conectar-se à Internet ou a uma Rede Ethernet local. Este Shield suporta até 4 conexões em simultâneo, podendo com ele ler informações do Arduino a partir de outro ponto de rede, assim como enviar dados para a Internet, controlar o Arduino pela Internet ou usá-lo como um servidor web onde estejam acessíveis, por exemplo, páginas com valores de sensores.
Este projeto é um dos mais básicos à volta do Shield Ethernet, precisando apenas de mais dois sensores de temperatura e uma resistência.

Material:

1 Arduino Shield Ethernet W5100;
2 Sensores de temperatura;
1 Resistência de 4,7k.

Montagem:

shield ethernet

 

Antes de introduzir o código, convém descarregar as seguintes bibliotecas e colocá-las na pasta IDE do Arduino:
Ethernet;
One Wire;
SPI;
Dallas Temperature.

Código Arduino:


#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Fio de dadosligado ao pino 3 do Arduino
#define ONE_WIRE_BUS 3
#define TEMPERATURE_PRECISION 12
float tempC, tempF;

// Prepara uma instância de OneWire para comunicar com qualquer dispositivo 1-Wire
OneWire oneWire(ONE_WIRE_BUS);
// Passa o endereço da instância oneWire ao Dallas Temperature.
DallasTemperature sensors(&oneWire);
// vetores para armazenar os endereços dos dispositivos
DeviceAddress insideThermometer = { 0x10, 0x7A, 0x3B, 0xA9, 0x01, 0x08, 0x00, 0xBF };
DeviceAddress outsideThermometer = { 0x10, 0xCD, 0x39, 0xA9, 0x01, 0x08, 0x00, 0xBE};
byte mac[] = { 0x48, 0xC2, 0xA1, 0xF3, 0x8D, 0xB7 };
byte ip[] = { 192, 168 ,0, 104 };

// Inicia o servidor na porta 80
Server server(80);

void setup() {
// Inicia a ethernet e o servidor
Ethernet.begin(mac, ip);
server.begin();
// Inicia a biblioteca sensors
sensors.begin();
// define a resolução
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
}
// função para obter a temperatura de um dispositivo
void getTemperature(DeviceAddress deviceAddress) {
tempC = sensors.getTempC(deviceAddress);
tempF = DallasTemperature::toFahrenheit(tempC);
}
void loop() {
sensors.requestTemperatures();
// escuta a entrada de clientes
Client client = server.available();
if (client) {
// uma solicitação http termina com uma linha em branco
boolean BlankLine = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// Se a linha estiver em branco e o fim da linha for um caractere newline '\n' = fim da solicitação HTTP
if (c == '\n' && BlankLine) {
getTemperature(insideThermometer);
client.println("HTTP/1.1 200 OK"); // Resposta HTTP padrão
client.println("Content-Type: text/html\n");
client.println("<html><head><META HTTP-EQUIV=""refresh""CONTENT=""5"">\n");
client.println("<title>Arduino Web Server</title></head>");
client.println("<body>\n");
client.println("<h1>Arduino Web Server</h1>");
client.println("<h3>Internal Temperature</h3>");
client.println("Temp C:");
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
getTemperature(outsideThermometer);
client.println("<h3>External Temperature</h3>");
client.println("Temp C:");
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
break;
}
if (c == '\n') {
// Inicia uma nova linha
BlankLine = true;
}
else if (c != '\r') {
// A linha atual tem um caractere nela
BlankLine = false;
}
}
}
// Permite um intervalo de tempo suficiente para que o navegador receba os dados
delay(10);
// Fecha a conexão
client.stop();
}

Observações:

Atenção a esta linha:
byte ip[] = { 192, 168 ,0, 104 };

É preciso alterar o endereço IP para o seu próprio endereço. Para isso só tem de descobrir, a partir do router, qual o endereço IP que foi reservado para os dispositivos do seu computador. Geralmente, o endereço inicia com 192.168.0 ou 192.168.1 — basta adicionar mais um número, tipicamente maior que 100, para garantir que ele não interfira nos dispositivos existentes. Talvez
seja preciso configurar o seu router para garantir que quaisquer solicitações HTTP feitas à porta 80 sejam encaminhadas para o endereço IP do shield Ethernet (Consulte a seção “Port Forwarding” (encaminhamento de porta) no manual de seu router. Também pode ser necessário abrir a porta 80 no firewall.
Agora, abra o browser e digite o seu endereço IP e a porta, por exemplo:
192.168.0.104:80

Se tudo estiver em ordem, é possível visualizar o seguinte:

aws

A página é constantemente atualizada de 5 em 5 segundos para mostrar alterações nas temperaturas. Caso, a partir do router esteja tudo bem configurado também é possível ver essa página a partir de qualquer ponto com acesso à Internet. Para isso é preciso saber o endereço IP do router.

Agora pessoal, é só pegar no vosso arduino, dar uma vista de olhos a este tutorial e começar a desenvolver o vosso projecto! Se ainda não tiveres o material necessário para o projecto, encontra-o na nossa loja Boxelectronica ou na lista abaixo:

Ethernet Shield W5100;
Sensores DS18B20;
Resistências 4,7k.