Conecta Twitter con Arduino usando la biblioteca Twitter

En un artículo anterior vimos como conectar Arduino con Twitter, otra opción para interactuar con Twitter es usando la biblioteca  twitter,

 

Mostramos un ejemplo típico de post de un Tweet y también mostramos una mejora, a través del envío de tweets periódicos informando variables medidas por el Arduino

 

Los materiales y las indicaciones tras el salto

Materiales

  • Arduino Uno
  • Ethernet Shield
  • Acceso Internet
  • PC
  • Cable USB
  • Cable de Red

Procedimiento

Se debe ir a la página http://arduino-tweet.appspot.com/oauth/twitter/login para obtener el Token que se usará mas adelante dentro del sketch

Se debe bajar la librería desde este link este archivo se descomprime y la carpeta Twitter se deja dentro de la carpeta libraries que esta dentro de la instalación del Arduino IDE.

Se reinicia el IDE y en File -> Examples se encontrara lo siguiente

twitter_library_installed

 

 

Lo que indica la correcta instalación de la biblioteca.

Ahora se carga el siguiente sketch de prueba

  
#include <SPI.h> // needed in Arduino 0019 or later
#include <Ethernet.h> 
#include <Twitter.h>

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

// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
Twitter twitter("14205607-aX34ti1eLI44r3dZpo2GtsI8YXf24M0sZSV7Taaaa");

// Message to post
char msg[] = "Hello, World! I'm an Arduino sending a Tweet !";

void setup()
{
delay(1000);
Ethernet.begin(mac);
Serial.begin(9600);

Serial.println("connecting ...");
if (twitter.post(msg)) {
// Specify &Serial to output received response to Serial.
// If no output is required, you can just omit the argument, e.g.
// int status = twitter.wait();
int status = twitter.wait(&Serial);
if (status == 200) {
Serial.println("OK.");
} else {
Serial.print("failed : code ");
Serial.println(status);
}
} else {
Serial.println("connection failed.");
}
}

void loop()
{
}
Salida en la puerta serial
Salida en la puerta serial

Si revisamos el sketch anterior toda la acción esta en el loop de setup(),

1) Se inicializa la funcion de Ethernet

 delay(1000);
  Ethernet.begin(mac);
  Serial.begin(9600);

2) Se envia el tweet

twitter.post(msg)

3) Se informa del status a la puerta serial

int status = twitter.wait(&Serial);
    if (status == 200) {
      Serial.println("OK.");
    } else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } else {
    Serial.println("connection failed.");
  }

Por estar todo en setup(), esta forma de escribir el programa impide que se pueda enviar tweets en forma periódica, además el mensaje es estático, lo que va contra las reglas de Twitter.

Un ejemplo práctico: Tweet periódico con valores medidos por Arduino

El siguiente sketch muestra como enviar un tweet periódico y datos variables en el Tweet, la fuente esta aquí

#include <SPI.h>
#include <Ethernet.h> 
#include <Twitter.h>

byte mac[] = {   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // create MAC address for ethernet shield
// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
Twitter twitter("14205607-aX34ti1eLI44r3dZpo2GtsI8YXf24M0sZSV7Taaaa");

int analogZero;
char tweetText[140];

void setup()
{
  delay(5000);
  Ethernet.begin(mac);
  Serial.begin(9600);
}

void tweet(char msg[])
{
  Serial.println("connecting ...");
  if (twitter.post(msg))
  {
    // Specify &Serial to output received response to Serial.
    // If no output is required, you can just omit the argument, e.g.
    // int status = twitter.wait();
    int status = twitter.wait(&Serial);
    if (status == 200)
    {
      Serial.println("OK.");
    } 
    else
    {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  } 
  else
  {
    Serial.println("connection failed.");
  }
}

void loop()
{
  // get some data from A0. 
  analogZero=analogRead(0);

  // assemble message to send. This inserts the value of "analogZero" into the variable "tweetText" at point %d
  sprintf(tweetText, "Prueba Arduino, Pin Analog 0 tiene el valor: %d. ", analogZero); // 

  delay(1000);
  tweet(tweetText);
  do{ } 
  while(1>0); // endless loop
  delay(61000)
}

Consideraciones,

  1. En este sketch se crea una función tweet que es la encargada de publicar el tweet y de informar status por la puerta serial
  2. Notar el uso de la función sprintf para tomar la variable analogZero y pasarla al Tweet.
  3. Se debe respetar el máximo de Tweets enviados que es 1000/día, eso nos da menos de uno por minuto.

Author: manuel

Ingeniero Eléctrico, Institutano, instructor certificado Cisco, en twitter @mcarrasco con comentarios y opiniones personales.

30 thoughts

  1. hola estoy tratando de conectar mi arduino con mi cuenta! pero no localiza mis tweets, se conecta al servidor pero no encuentra nada, lo que deberia de hacer es encontrar el tweet y accionar un muñeco! pero no hace nada podrias ayudarme

    1. Zhel

      Sin código que analizar es difícil ayudarte.

      Lo mas probable es que no este realizando la conexión? cómo sabes que se conectó correctamente?

      Saludos.

    1. Con la nueva API de Twitter v1.1 necesariamente debes usar una libreria JSON y OAuth para validar como cliente al Arduino.

      Pronto publicaremos un tutorial que muestra como podemos hacer que Arduino lea Twitter y realice acciones de acuerdo a menciones o hash tags.

      Saludos!

  2. Estimado, exelente página!!!! Tengo una duda en el código para generar un twet periódico, ya que copie y pegue el código en la IDE de arduino y me dio un error por lo tanto lo que hice fue copiar el código que esta en el Link de la fuente…. Los compare y no vi grandes cambios… Tal vez lo copie mal… Y es precisamente ahí donde tengo muchos problemas, es decir con la programación…. En ese tema estoy en pañales, no así con el armado de circuitos básicos…. En fin… Mi gran duda es que ejecute el programa y el arduino me género el mensaje para Twitter pero ahí se quedo… Toda la noche… Tal vez el problema esta en la función delay que estaba al final del código… El cual no lo puse (delay 61000) porque en el otro código no sale… Asumo que ese es el tiempo en que se demora en actualizar el estado del Pin que esta leyendo…y enviarme el mensaje automático de forma periódica??? De todas formas hoy haré la pruebas…

    1. Estimado Felipe, el loop deberia demorarse no mas de 16 minutos segun el parametro que pusiste al delay. Al parecer el problema va por otro lado. Habria que ver el codigo para encontrar el problema. Saludos

      1. gracias por tu respuesta, el codigo es el mismo que publicaste tu en tu pagina, pero en el ultimo delay,

        delay(1000);
        tweet(tweetText);
        do{ }
        while(1>0); // endless loop
        delay(61000)
        }

        Falta un ” ; ” por eso al verificar me salia un error… soy muy novato en Arduino, alguien experimentado se da cuenta inmediatamente…

  3. Hola bn dia tengo una duda como puedo hacer para enviar un mismo twet dos veces por ejemplo si pongo hola que lo envie de nuevo por que ya lo e intentado y no e podido publicar lo mismo 2 veces te agradecería pudieras ayudarme con mi duda saludos!!!!

  4. Hola, quiero implementar algo parecido pero con una alarma, como puedo hacer para que cada vez que ocurra un evento envie un twet y en este caso para que se de cuenta sirve el mencionar a los involucrados o existe alguna otra manera??

    1. Ivan, solo debes modificar tu script para que cuando se active el evento se envie el tweet, y debes hacer mencion con el @ a quien desees notificar o utilizar mensajes directos.

      Saludos

  5. Gracias por tu exelente aporte. Una consulta, para la conexión a internet con mi arduino cuento con la tarjeta ENC28J60. ¿Es posible hacer funcionar este proyecto con esta tarjeta? ¿Que modificacion requeriría?.
    Saludos.

  6. Buenas noches estoy realizando mi proyecto de grado y pues uno de mis objetivos es enviar notificaciones push. Pero mi primera prueba es enviar mensajes por twitter lo realizo con la tarjeta Ethernet y funciona perfecto, dado que estoy trabajando con un Arduino wifi original no he encontrado la manera de poder enviar el twitter desde esta board agradezco si tiene alguna solución dado que las que encuentro en internet no me han solucionado el problema gracias.

  7. Buen dia disculpa retomando lo del tweet periodico ala repuesta de saira yañes, Y como pusiste la hora en cada tweet? Utilizaste un RTC??? Yo estoy intentando hacer lo q dices pero no consigo realizarlo, espero y puedas ayudarme gracias

  8. Hola, se que el post tiene algo de tiempo pero estoy en un proyecto similar formando una red de sensores que realicen tweets, logre hacer que envié los tweets pero lo que no puedo hacer es que se envíen cada 1 hora, rescato la hora desde un modulo gps ublox neo 6 con la libreria tiny gps y alli me pierdo, me podrias decir como lo hiciste tu, muchas gracias .

    1. Ivan, nosotros para programar tuits usamos el cron de Linux, pero desde Arduino lo puedes hacer tal como dices rescatando la hora desde el GPS validando que los minutos estan en 0 y tuitear.

      Saludos

  9. saludos ingeniero

    muy bien explicado……. le agradezco por compartir sus conocimientos.

    lo aplicare este fin de semana…..

  10. Hola buenos días ,
    Estoy intentando que arduino busque un determinado hastag y cada vez que aparezca aumente un contador.
    DE hecho ,no sé, si es posible .
    Ni por donde empezar a buscar.
    Si tienes una sugerencia , te lo agradeceria mucho…

    1. Hola,
      Arduino no tiene tanta memoria como para implementar una libreria completa de Twitter, y si solo incrementaras un contador, mejor usas otras plataformas como Raspberry Pi o Beaglebone.
      Arduino esta pensado para interactuar con el mundo real, activando servos, luces, motores. Si deseas usar Arduino, necesariamente debes usar un servidor o computador externo, entonces, para que enviar el incremento de un contador a Arduino?
      Saludos

  11. Gracias probe los dos ejemplos funcionan muy bien, mi consulta es posible enviar algo desde el Twitter al arduino para que haga algo como encender un led.

    1. Hola Luis, si revisas la documentacion de la libreria utilizada en este post veras que necesita de un servidor para enviar el tuit, no se hace el envio directamente desde el Arduino. Para realizar la comunicacion inversa, es decir desde Twitter al Arduino tambien necesitarias un Servidor que este revisando twitter y al detectar una mencion envia una señal al arduino. La libreria del post no posee esta funcion.
      Existe esta otra libreria que dice que no usa un servidor intermedio, el problema es que consume mucha memoria y Arduino no tiene mucha, nosotros no la hemos probado.

      Saludos

  12. Hola. Buenos dias.
    Quisiera saber si es posible usar esta libreria con el modulo esp8266 a traves de arduino uno. Gracias

    1. Jaime, me parece que no, ya que el sketch usa la librería Ethernet.h que esta escrita para la Ethernet Shield. ¿qué libreria estas usando para el esp8266?
      Saludos
      JZ

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *