Tweet via l’Arduino et un PC

Dans ma découverte de l’Arduino, ma première envie fût de réaliser un tweet avec l’Arduino grâce à la détection de courant via une de ses entrées (ou changement d’état). On s’amusera par la même occasion à faire allumer une LED. Pour cela, nous aurons besoin d’une plaque de pratique, de différents composants électronique (LED, transistors, résistance), d’un Ethernet Shield et bien entendu de l’Arduino.

 

L’Arduino en lui même n’est pas capable de faire un tweet, en revanche, il est tout à fait à même de faire un appel réseau via un Ethernet Shield et la librairie Ethernet. Il vous faudra donc un ordinateur également relié au réseau et sur lequel sera présent le code permettant de faire le tweet. Je me suis basé sur ce tutoriel: Envoyer un tweet simplement en PHP avec OAuth pour tweetter. Le montage donne le résultat suivant :

Pour vous aider, voici une vision plus claire grâce un petit schéma. J’ai utilisé un transistor PNP BC32725, trois résistances de 110 Ohms, une LED. Attention au sens du transistor, vous risquez d’avoir des surprises 😉

Pour les électroniciens, le schéma suivant vous donnera une meilleure vision du montage :

Pour rappel, notre objectif est de faire un tweet depuis un changement d’état (électrique) via une des entrées de l’Arduino. Dans le schéma ci-dessus, j’ai utilisé un interrupteur pour simuler le changement d’état. Je vous laisse voir pour les utilisations possibles en modifiant l’interrupteur par un capteur 😉

Maintenant, passons au code qui sera dans l’Arduino :

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

byte mac[] = {  0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz }; // l'adresse MAC est indiqué sur l'Ethernet Shield
byte ip[] = { xxx, xxx, xxx, xxx }; // l'adresse ip pour le shield
byte server[] = { yyy, yyy, yyy, yyy }; // l'adresse ip de la cible (qui permettra le tweet)

// Cette variable permet de savoir si un tweet a déjà été effectuée
bool tweet = false;

Client client(server, 80);

void setup()  {
  pinMode(7, OUTPUT); // on définit le pin 7 en sortie (qui servira pour allumer la LED)
  Serial.begin(9600);
  Ethernet.begin(mac, ip); // on configure l'ethernet
  delay(1000);
} 

void loop()  {
  Serial.print("Etat pin 2 : ");
  int val = analogRead(2); // on lit l'état de l'entrée Analogique 2
  Serial.println(val);
  if(val >= 900 && !tweet) { // si la valeur du pin A2 est supérieur à 900 on considère un changement d'état et donc on lance le tweet
    analogWrite(7, 255);
    sendTweet();
    analogWrite(7, 0);
  }else{ // sinon on attends 2 sec
    delay(2000);
  }
}
// l'envoi du tweet via le code PHP se fait ici
bool sendTweet() {
  Serial.println("connecting...");
  if (client.connect()) {
    Serial.println("connected");
    client.println("GET /tweet.php HTTP/1.0");
    client.println();
    delay(2000);
    do { // on fait "tourner" le script pour récupérer tout l'appel HTTP
      char c = client.read();
      Serial.print(c);
    } while((client.available()));

    if (!client.connected()) { // on clôt la connexion une fois la requête HTTP faite
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();
      tweet = true; // on bloque ici les tweets potentiels suivants
    }
  }
}

Une fois embarquée sur l’Arduino, vous pouvez effectuer vos premiers tests. En fermant l’interrupteur, l’Arduino lancera un appel réseau sur le serveur que vous aurez défini et effectuera le tweet. Et voilà le tour est joué. Pour refaire un tweet, il vous faudra faire un reset sur l’Arduino.

Bon amusement 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.