TwitterLibrary e os tweets…

Nov 29
2010

Mandar um tweet a dizer “Ola eu sou um Arduino!” simples nao?

Errado…nao é assim tao facil, e em parte deve-se a o Twitter ter mudado o metodo de autenticaçao de Basic para OAUTH.

Depois de muito pesquisar, la encontrei o que precisava, ou seja uma lib para o arduino de nome TwitterLibrary

  • Twitter Library is a library for Arduino to tweet on Twitter via the Arduino Ethernet Shield. It is convenient to making a bot for Twitter which posts messages automatically from various sensors.

La saquei a TwitterLibrary e joguei-me a ela de unhas e dentes, para rapidamente partir os dentes todos quando bati de frente com um dos problemas principais nos dias de hoje, que é as coisas andam depressa demais, ou seja esta lib nao é compativel com o Arduino v0021, que por acaso é que se tem que usar para quem tem Arduinos Uno que é o meu caso, porra, la esta mais algo a correr mal, ja estava prestes a mandar a Eth shield pela janela, mas lembrei-me dos 35€ que larguei por ela e começei a procurar melhor.

Apos muita cabeçada  la encontrei este post “Problem with NeoCat’s Twitter Library” nos foruns do Arduino que dizia mesmo o que me estava a acontecer, e se lerem tudo vao perceber que é normal isto nao dar com o 0021, mas que ja ha um workaround e esse workaround passa por sacar uma versao do EthernetDNS que esta “martelada” para funcionar com versões acima da 0019.

Mas afinal o que é este EthernetDNS? Ora, é mesmo o que o nome indica, é uma lib que permite ao arduino resolver nomes de DNS, ainda nao mexi muito nela, mas ja fiz os exemplos que permitem ao arduino via Serial Connection fazer uma query DNS, podem ver mais info sobre esta lib em EthernetDNS, tambem la teem a EthernetDHCP, que tambem ja testei e funciona, bem, pelo menos funcionou uma vez..das outras já não..bolas…

Voltando a twitter lib, aquilo é simples, é so seguir o que esta no post do forum que indiquei e no site da lib na pagina do arduino e pumba, la estão voces a enviar tweets.

Ha, mas esperem, antes de enviar tweets, convem seguir uns passos importantes mencionado na pagina que é para a geraçao de um token que permite ultrapassar o problema da autenticação OAUTH do twitter. Podem gerar esse token em:

Tweet Library for Arduino mas cuidado, que as libs que estão no site onde geram os tokens, nao funcionam, agora nao sei se era do meu lado, ou se simplesmente os links nao estao ok. Experimentem e depois digam qualquer coisa.

A melhor maneira de experimentar enviar um tweet inicial é fazer o exemplo que vem com a lib.

Entretanto ja consegui que o meu arduino mande tweets com informaçao que saca de um sensor de temperatura, falta-me agora tirar aquilo do Void Loop {} e meter aquilo num void normal e depois invocar no loop.

Fica aqui o codigo que estou a usar para mandar o tweet do sensor. Nao liguem a parte de obter os dados do sensor que isso tambem foi outra guerra que colocarei aqui ainda durante esta semana.

#include 
#include 
#include 
#include 
#include 
 
// Ethernet Shield Settings
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
 
// substitute an address on your own network here
byte ip[] = { 192, 168, 1, 177 };
 
// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
Twitter twitter("YOUR TOKEN");
 
// Message to post
 
//char msg[] = "Hello, World!";
 
// Varios dados
int analoginput=0;
int value=0;
int R1=1000;
int Vin=5;
float tmp=0.0;
float Vout=0.0;
float f=0.0;
 
void setup()
{
  delay(1000);
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
 
  pinMode(analoginput, INPUT);
 
  Serial.println("connecting ...");
}
 
void loop()
{
 
  Vout=1023-analogRead(0); // Invert the number because of setup
  Vout=(Vout/1024.0)*5;
  f=1000*exp(-20000/298.15); // 298.15K = 25C, 20000 seems to be the B value for a standard 1kOhm NTC
  tmp=(R1*Vin)/Vout-R1;
  value=(20000/log(tmp/f))-273.15;
   char buffer[80];
   sprintf(buffer, "A temperatura da sala e: %d", value ); // Converte de int para char
    if (twitter.post(buffer)) {
    int status = twitter.wait(&Serial);
    if (status == 200) {
      Serial.println("OK.");
    } else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("connection failed.");
  }
  delay(300000);
}

Testem e divirtam-se! Alterações e sugestões como sempre sao bem vinda.

Leave a Reply

Follow Me