Servidor no Arduino para postar mensagens no Twitter

O projeto em questão usa um Arduino Duemilanove para servir uma página na internet. Através dessa página o visitante pode deixar um recado que será postado em uma conta no twitter, e posteriormente poderá conferir através de um link se seu recado foi postado corretamente. O arduino emitira um som dizendo que alguém usou o serviço. O layout da página que fiz pode ser visto na figura abaixo, fique a vontade para mudar!




Para fazer esse projeto você precisará de:


1-Arduino Duemilanove;


2-Arduino Ethernet Shield com chip color:black;mso-ansi-language:PT-BR"">Wiznet W5100 (outro serve, mas não tenho o
código pra ele);


3-Roteador com função DDNS (se quiser deixar o nome da página de forma elegante);


4-Um buzzer (opcional).


A primeira coisa a fazer é criar uma conta no twitter. Se você já tiver uma,
recomendo criar uma segunda dedicada ao projeto, afim de evitar problemas de
privacidade.


Entre na página http://arduino-tweet.appspot.com/ e pegue o token, uma espécie de chave que lhe dará permissão para postar no twitter através do arduino. Ainda nessa página, baixe as duas bibliotecas Arduino Tweet Library e Arduino Ethernet Library, que estão no campo "Step2: Add some Libraries to your Arduino IDE."


Agora baixe as bibliotecas String e Ethernet na página http://arduino.cc/en/Reference/Libraries.


Nesse momento você está apto a tentar compilar o código abaixo:


*****************************************************************************************************

#include <WString.h>

#include <Ethernet.h>

//includes auxiliares para twitter

#include <EthernetDNS.h>

#include <Twitter.h>


#include <avr/wdt.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac

byte ip[] = { 192, 168, 1, 222 }; // ip

byte gateway[] = { 192, 168, 1, 1 }; // gateway

byte subnet[] = { 255, 255, 255, 0 }; //máscara

Server server(65000); //server port

void bip(unsigned int vezes); //faz o bip

Twitter twitter("-------aqui vc coloca seu token--------"); //permissão exclusiva para o jeffersino

char msg[140] = "cana";

int i,j=0;

int bipPin = 6;

char link[]="http://www.twitter.com/jeffersino/"; //link data

String readString = String(140); //string for fetching data from address

boolean dados = false; //LED status flag

boolean twittar = false;

void setup(){

//start Ethernet

Ethernet.begin(mac, ip, gateway, subnet);

//Set pin 7 to output

pinMode(bipPin, OUTPUT);

//enable serial datada print

Serial.begin(9600);

}

void loop()

{

//wdt_reset();

// Create a client connection

Client client = server.available();

if (client)

{

while (client.connected())

{

if (client.available())

{

//delay(1000); //pra ver se a mensagem chega completa

char c = client.read();

if(dados&&(i<140)) //so pegas dados depois de GET /?T= e se tamanho máximo 140 caracteres

{

msg[i]=c;

}

i++;

if(c=='=')

{

dados=true;

i=0;

}

//escreve na serial

Serial.print(c);

//if HTTP terminar...

if (c == '\n')

{

//twita

if(dados&&(i<140)) //pode twittar porque tem pelo menos GET /?T=

{

for(j=(i-10);j<i;j++) msg[j]=' '; //apaga HTTP/1.1 que aparece no final da string

twitter.post(msg);

int status = twitter.wait();

}else if(dados)

{

twitter.post(msg);

int status = twitter.wait();

}

// HTML

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println();

//set background to yellow

client.print("<body style=background-color:black>");

client.print("<title>ARDUINO</title>"); //poe o título q aparecerá na aba da página

//send first heading

client.println("<hr />");

client.println("<hr />");

client.println("<h1><center><font size=7 color=red face=Wide Latin><marquee behavior=scroll direction=left bgcolor=black width=100%> Servidor No Arduino</MARQUEE></font></center></h1>");

client.println("<hr />");

client.println("<hr />");

//coloca uma imagem hospedada em outra página

client.println("<center><img src=http://farm4.static.flickr.com/3257/3141966707_7a86e20f0c.jpg></center>");

client.println("<center><font color='green'>Deixe aqui o seu recado</font></center>");

client.println("<center><form method=get><input type=text name=T size=120></center><br>" );

client.println("<center><input type=submit value=Enviar></form></center>");

client.println("<center><font color='white'>Seu recado serah postado no twitter do Jeffersino, o Arduino do Jeff.</font></center>");

client.println("<hr />");

//escreve o que o cara twitou

if(dados)

{

client.println("<font color='darkblue' size='5'>A mensagem:");

client.println("<font color='green' size='4'><br />");

for(i=0;i<140;i++) client.print(msg[i]);//saida de dados

client.println(",");//virgula no final da mensagem postada

client.println("<br /><font color='darkblue' size='5'>");

client.println("passou pelas entranhas do Arduino e foi postada no twitter!");

client.println("<br />");

client.println("<hr />");

bip(5); //faz cinco bips

}

//link

client.println("<font color='white' size='5'>Link: ");

client.print("<a href=");

client.print(link);

client.println(">Confira se seu comentario foi postado corretamente</a>");

client.println("<hr />");

client.println("</body></html>");

//obrigado

client.println("<center><font color='yellow' size='6'>Obrigado pela visita!</font></center>");

client.println("<hr />");

dados=false;

twittar=false;

//apaga string

for(i=0;i<140;i++) msg[i]=' ';

i=0;

//stopping client

client.stop();

}

}

}

}

}

void bip(unsigned int vezes) //vezes diz quantos bips serão

{

unsigned int i,j;

for(j=0;j<vezes;j++)

{

delay(300);

for(i=0;i<1000;i++)

{

digitalWrite(bipPin, HIGH); // LED on

delayMicroseconds(100);

digitalWrite(bipPin, LOW); // LED off

delayMicroseconds(100);

}

}

}

********************************************************************************************************************

Observe que você deve fazer algumas mudanças no código: colocar o seu ip, mac, servidor dns, máscara de rede, porta e o seu token.


Lembre-se que para ser visto na internet, e não somente na rede local, você precisa ter um ip válido, ou fazer o que eu fiz: configurar o roteador onde está o ip válido a encaminhar tudo que chegar para uma determinada porta para seu ip não válido. No meu caso tudo que chega para o ip válido no meu prédio destinado a porta 65000, e reroteado para o ip 192.168.1.122, que é o meu ip não válido.


Para não ter que digitar no seu navegador algo do tipo: ipvalido.iIpvalido.ipvalido.ipvalido:porta, vá até a página http://www.dyndns.com/ cou http://www.no-ip.com/ e leia sobre DDNS. Bem legal.


Deixarei durante esse fim de semana o servidor no ar. A minha internet é lenta e vive dando problemas, mas se você quiser fazer uma visita, o link é esse: http://jeffersino.homeip.net:65000/.


Exibições: 7623

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de prof Paulo Maximo em 14 dezembro 2010 às 21:55

Muito bom!

Parabéns.

Comentário de Carlos M Herrera em 6 outubro 2010 às 21:43
Parabéns!
Comentário de Guilherme Cruz em 11 setembro 2010 às 21:06
impressionante! Uma idéia original. Parabéns. Vou ver se consigo fazer o mesmo com um PIC hehe.
Comentário de Maristela Russe em 9 setembro 2010 às 17:12
Muito bom mesmo!
Comentário de Marcelo Rodrigues em 4 setembro 2010 às 0:03
Cara, muito legal o seu projeto. Parabéns!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço