Ethernet Shield TestesJá fiz alguns testes ao
Ethernet Shield e correu bem.
Seguindo o exemplo
WebClient que é fornecido com a biblioteca foi simples implementar o necessário.
Quando nós nos nossos computadores tentamos aceder a um site somos clientes do site que está alojado num servidor e então quando nos dirigimos a esse servidor este envia-nos a informação que contém no servidor relativa ao site em questão que depois é analisada pelos nossos browsers e apresentada de forma perceptível.
O Arduino quando está como
WebClient comunica com um determinado servidor e recebe a informação, no entanto somos nós que vamos ter que interpretar essa informação.
Vamos usar o Arduino para abrir a página de
RSS do
LusoRobótica http://www.lusorobotica.com/index.php?type=rss;action=.xmlComo não sei se é possivel colocar o link todo vou fazer como está no exemplo em que digo qual o servidor da página e depois o localização dentro do servidor. Para saberem o ip de uma página basta ir à linha de comandos e fazer ping a essa página ou então num
site desde genéro.
Nesta imagem temos um exemplo do que o Arduino leu ao abrir o
RSS http://www.lusorobotica.com/index.php?type=rss;action=.xmlPodemos ver na consola nas duas primeiras linhas a informação de ele estar a conectar ao servidor e depois a informação que aparece é a informação vinda do servidor, é o código fonte da página (html).
Como podem ver era muita informação, no entanto obdece a norma
RSS por isso está organizada no entanto seria na mesma muita informação para ser consumida pelo Arduino. Por isso decidi criar uma página em
PHP para organizar a informação que quero do
RSS.
O meu PHP é o seguinte:
<head>
<title>Jose Xavier</title>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=windows-1252">
</head>
<?php
$xml = simplexml_load_file("http://www.lusorobotica.com/index.php?type=rss;action=.xml");
foreach($xml->children() as $child)
{
foreach($child->children() as $child1)
{
foreach($child1->children() as $child2)
{
if($child2->getName()=="title") echo "<titlo>".utf8_decode($child2)."</titlo>";
}
}
}
?>
Basicamente este php abre o RSS procura pelo nó
title e imprime estes nós separando-os pela tag <titulo>.
Este ficheiro está no seguinte link:
http://78.46.77.43/~deseoinf/arduino/teste7.phpAgora vamos às configurações dos parâmetros do
Ethernet Shield usando como base o exemplo
WebClient. Este exemplo está feito para trabalhar dentro de uma rede por isso é necessário acrescentar os campos:
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };
Isto serve para o Ethernet saber por onde sair da rede local para o mundo
Depois acrescentamos estes argumentos em:
Ethernet.begin(mac, ip, gateway, subnet);
Ficando o código como mostrado em baixo:
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 250 };
byte server[] = { 78, 46, 77, 43 }; // Ip do servidor onde temos a página
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };
Client client(server, 80);
void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
Serial.begin(9600);
delay(1000);
Serial.println("connecting...");
if (client.connect()) {
Serial.println("connected");
client.println("GET /~deseoinf/arduino/teste7.php HTTP/1.0");
client.println();
} else {
Serial.println("connection failed");
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
Agora o Arduino ao se ligar ao servidor já só recebe a informação que eu defini:
Agora falta analisar esta informação no Arduino para recolher o que nos interessa e é simples pois temos os títulos divididos pela tag
<titulo> como podem ver na imagem.
Quero agradecer ao TigPT pela ajuda em relação ao
Ethernet Shield.
NotasFoi acrescentado ao site inicial a documentação dos componentes assim como tutoriais.