Envoi de message privé twitter sur détection de mouvement arduino

Aujourd'hui je vous partage mes essais liés à mon projet de boite au lettre connectée, je me suis attaqué à la détection de mouvement et la communication twitter.
Pour le moment je pense que ma boite aux lettres devra envoyer un message privé sur le compte twitter de ma femme et moi dès que le facteur aura déposé un colis.
J'avance donc pas à pas en codant des petits exemples pour chaque partie du projet afin de me familiariser avec l'arduino et ses possibilités.

Cet exemple se compose de deux parties :

  • l'arduino qui transmet les changements d'état du capteur de mouvement
  • l'application serveur NodeJs qui transforme la détection de mouvement en direct message

Montage électronique

Pour ce montage très peu de composants :

  • un arduino uno
  • un détecteur de mouvement (Motion pir)
  • 3 fils
  • cable usb pour la liaison avec l'ordinateur

Il y a deux petites vis de réglages sur le capteur de mouvement :
J'ai du les tourner à fond vers la gauche car sinon le capteur détectait des mouvements en permanence.

Code du programme sur l'Arduino

int inputPin = 2;               // le numéro de l'entrée analogique ou la pate jaune du capteur est branchée  
int currentState = LOW;  
int val = 0;                    


void setup() {  
    pinMode(inputPin, INPUT);
    // attention à la vitesse série elle doit être identique sur le serveur nodejs
    Serial.begin(9600);
}


void loop() {

    val = digitalRead(inputPin);
    if (val == HIGH) {
        //le capteur détecte en ce moment un mouvement
        if (currentState == LOW) {
            // si on était précédement en état aucun mouvement, on envoie sur la liaison série MVT
            Serial.println("MVT");
            currentState = HIGH;
        }
    }
    else
    {
        if (currentState == HIGH)
        {
            //il n'y a plus de mouvement détecté et on change d'état, on prévient le serveur
            Serial.println("NOMVT");
            currentState = LOW;
        }
    }
}

Le code est ici assez simple, on ouvre une liaison série, on initialise la lecture de notre capteur de mouvement, lors d'un changement d'état :

  • Pas de mouvement => mouvement on écrit sur la liaison série
  • Mouvement => pas de mouvement on écrit sur la liaison série

Vous pouvez tester votre programme en le chargeant dans l'arduino, en ouvrant une console d'écoute série et en passant devant votre capteur.

Code NodeJS serveur

Pour notre serveur nodejs nous allons avoir besoin de deux librairies :

à installer avec les commandes suivantes :

npm install twitter --save  
npm install serialport --save  

pour twitter vous aurez besoin d'un compte développeur et de clés d'identification que vous pourrez récupérer ici : https://apps.twitter.com/
Vous pourrez également jetter un oeil à la documentation de l'API REST

var Twitter = require('twitter');

var client = new Twitter({  
    consumer_key: 'votre consumer key',
    consumer_secret: 'votre consumer secret',
    access_token_key: 'votre access token key',
    access_token_secret: 'votr access token secret'
});


var serialport = require('serialport');

//à remplacer par votre nom de port COM
var portName = 'COM4';  
var sp = new serialport.SerialPort(portName, {  
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
    flowControl: false,
    parser: serialport.parsers.readline("\r\n")
});


//sur la reception de données depuis la liaison série, on transmet sur le socket du navigateur la valeur de la cellule
sp.on('data', function (input) {  
    if (input === 'MVT') {
        client.post('direct_messages/new.json', {
            "screen_name": "votre identifiant twitter",
            "text": "Mouvement détecté"
        }, function (error, tweet, response) {
            if (error) {
                console.log(error);
            }
        });
    }
    console.log(input);
}); // Send data to client

Vous pouvez ensuite lancer votre serveur :

node app.js  

Passez la main devant votre capteur et ensuite consultez votre application twitter sur votre smartphone ou votre navigateur et vérifiez que vous avez reçu un message privés vous indiquant qu'un mouvement a eu lieu.

Je passe par twitter pour éviter de coder une application avec gestion de push, une solution mail ou sms est envisageable également.

Le code source est disponible sur le github du blog cheesecode