Olá,
Começa hoje, porque finalmente recebi o material que faltava, um novo projecto meu.
Motivação
Quero fazer este projecto para poder estudar os vários componentes e conseguir interacção entre eles.
Ideia
O projecto vai consistir na criação de um dispositivo sem fios para ver informação vinda da Internet como por exemplo noticias, rss's, informações do fórum LusoRobótica :), entre outros.
O projecto vai consistir em dois módulos:
- Um ligado à rede através do Ethernet Shield, com uma memória 24LC512 e um módulo RFM12.
- Dispositivo portátil com módulo RFM12, memória 24LC512 e um LCD YM1602C 16x2 (Compatível HD44780).
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh5.ggpht.com%2F_i2teYMYP9C0%2FSnjKjTBjSZI%2FAAAAAAAAAvE%2FZiyW85GcX0M%2Fs800%2Finfo1.jpg&hash=d8089dc94b7f96044b35601968364ee59ffdd14f) (http://picasaweb.google.com/josescxavier/MiniInternetPortatil#5366261663762958738)
Este esquema pretende demonstrar a minha ideia.
Material Utilizado e Documentação
- Ethernet Shield
- Página Oficial (http://arduino.cc/en/Main/ArduinoEthernetShield)
- Biblioteca (http://arduino.cc/en/Reference/Ethernet)
- LCD YM1602C 16x2 (Compatível HD44780)
- Datasheet YM1602C (http://www.zyscom.pl/katalog/ym1602c.pdf)
- Datasheet HD44780 (http://www.sparkfun.com/datasheets/LCD/HD44780.pdf)
- Tutorial LCD caracteres 16x2 Paralelo 4 Bits/8Bits (work in progress) (http://lusorobotica.com/index.php/topic,919.0.html)
- LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL (http://lusorobotica.com/index.php/topic,1143.0.html)
- RFM12-868D
- Página Oficial (http://www.hoperf.com/pro/RFM12.html)
- Datasheet RFM12 (http://www.hoperf.com/pro/RFM12.html)
- Guia de Programação (http://www.hoperf.com/pdf/RF12_code.pdf)
- Biblioteca jee-lab (http://code.google.com/p/jeelabs/source/browse/trunk#trunk/libraries/RF12)
- [Desenvolvimento] Módulos RFM12-868D (Emissor e Receptor a 866MHz) da HOPERF (http://lusorobotica.com/index.php/topic,885.0.html)
- Arduino
- Arduino (http://www.arduino.cc)
- I2C eeprom 24LC512
- Datasheet 24LC512 (http://wulfden.org/downloads/datasheets/24LC512_21754E.pdf)
- Arduino + EEPROM i2c (http://lusorobotica.com/index.php/topic,461.0.html)
Progresso
- Ethernet Shield
- 45%
- metRoNET [Em Desenvolvimento] - Ethernet Shield (http://lusorobotica.com/index.php/topic,1311.msg13110.html#msg13110)
- LCD YM1602C 16x2 (Compatível HD44780)
- 99%
- Em relação aos LCD's já há utilizadores como o ricardo-reis e o tcustodio que já reviraram os LCD's por isso parece que não será necessário inventar muito, de qualquer das maneiras quero perceber o seu funcionamento, mesmo assim diria que em relação a isto 99% do trabalho está feito.
- RFM12-868D
- 65%
- Já fiz alguns testes e correu bem.
- Arduino
- 99%
- Não consigo identificar o que sei e o que não sei no entanto não penso ser aqui o meu problema por isso para o necessário está ok.
- 24LC512
- 99%
- Para o que o projecto necessita está em cerca de 99%
Problemas
- Ligar o Ethernet Shield e o RFM12 pois ambos usam SPI.
Notas
O nome pode sofrer alterações a qualquer momento :D
Ethernet Shield Testes
Já fiz alguns testes ao Ethernet Shield (http://arduino.cc/en/Main/ArduinoEthernetShield) 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 (http://pt.wikipedia.org/wiki/RSS) do LusoRobótica (http://www.lusorobotica.com) http://www.lusorobotica.com/index.php?type=rss;action=.xml
Como 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 (http://www.selfseo.com/find_ip_address_of_a_website.php).
Nesta imagem temos um exemplo do que o Arduino leu ao abrir o RSS (http://pt.wikipedia.org/wiki/RSS) http://www.lusorobotica.com/index.php?type=rss;action=.xml
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh5.ggpht.com%2F_i2teYMYP9C0%2FSn4pZ7mjsbI%2FAAAAAAAAAww%2F-LxzYNg3U3c%2Fs400%2FCaptura%2520de%2520ecr%25C3%25A3%2520total%252009-08-2009%2520022604.jpg&hash=d6dcde9120c37782fe208054311c3fa720582554) (http://picasaweb.google.com/josescxavier/MetRoNET#5367773331345093042)
Podemos 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 (http://pt.wikipedia.org/wiki/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 (http://www.w3schools.com/PHP/) para organizar a informação que quero do RSS (http://pt.wikipedia.org/wiki/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.php
Agora vamos às configurações dos parâmetros do Ethernet Shield (http://arduino.cc/en/Main/ArduinoEthernetShield) 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 :D 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:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh3.ggpht.com%2F_i2teYMYP9C0%2FSn4thTGXC5I%2FAAAAAAAAAw0%2FEmHOdrrDeGI%2Fs400%2FCaptura%2520de%2520ecr%25C3%25A3%2520total%252009-08-2009%2520022807.jpg&hash=adad709a6bfc109266077f4fce00cb5a88d6362d) (http://picasaweb.google.com/josescxavier/MetRoNET#5367777855958092690)
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 (http://arduino.cc/en/Main/ArduinoEthernetShield).
Notas
Foi acrescentado ao site inicial a documentação dos componentes assim como tutoriais.