Usage Client/Serveur pour arduino

Afin de piloter mon arduino j’aimerais bien avoir accès simplement à une interface de pilotage.

Pour ce faire il me faut un comportement « réseau », moi ce qui me viens en premier c’est TCP/IP . J’ai donc commencé une implémentation d’un système client/serveur qui peut accepter plusieurs clients et plusieurs arduinos.

Je suis parti sur une architecture assez évolutive héritée de mon passé professionnel à utiliser Tibco Rendez-vous (« Middleware Orienté Message » comme on dit chez le Marketing) . J’ai donc implémenté un serveur sur lesquels peuvent se connecter des clients (jusque là rien de bien nouveau) . Ces clients peuvent être purement réseau (on les appellera client) ou avoir une patte sur le réseau et une sur le port série (on les appellera collecteur).

Le collecteur et le client sont presque identique, à la différence de l’implémentation de la lecture/écriture du port série pour le premier. Le code du client risque d’ailleurs de disparaitre au profit du collecteur que je trouve plus « puissant ».

Il est possible sur un client de taper du texte, il sera envoyé au serveur qui relayera le message à tous les clients connectés (sauf celui l’ayant envoyé), ça c’est le comportement d’un IRC. Le collecteur récupère des infos depuis la ligne série et peu aussi écrire des commandes vers cette derniere. Là on commence à avoir plus d’interet, non ?

Prenons un exemple d’utilisation.

Lançons le serveur (fenêtre du milieu)

./server

pour un test complet lançons un client « simple » (fenêtre du haut)

./collector 127.0.0.1 client
 et dans une autre fenêtre lançons le collecteur (fenêtre du bas)
./collector 127.0.0.1 collecteurMeteo /dev/ttyACM0 arduino.stationMeteo

Collecteur va écouter ce que l’arduino écrit sur sa liaison série et envoyer ça au serveur qui va répercuter ça à tous les autres clients. Ces clients peuvent les afficher, les stocker en base, faire agir d’autres arduino, … . Les possibilités sont infinies.

Afin de ne pas se mélanger les pinceaux chaque message envoyé est constitué de trois champs :

* la source : un nom identifiant l’émetteur du message

* le sujet : un texte décrivant le but du message . Par convention j’ai utilisé une série de mots séparés par des points : info.client.connect pour indiquer qu’un client s’est connecté.

* le message : champ  texte libre. A vous de vous définir un sous protocole pour communiquer avec vos créations

Le code source est accessible ici, bon c’est encore en travaux donc ne vous attendez pas à avoir un truc pil poil au top ^^. Je me suis basé sur l’exemple suivant pour l’implémentation du client/serveur, pas de fork, pas de thread , pas de haine. Il faut encore que je fasse du nettoyage pour permettre une plus grande clarté dans le code.

Tout est publié sous licence GPL v2, donc servez vous, mais tenez moi au courant de vos créations.

Publicités

Publié le 10 mai 2012, dans Arduino, Linux, et tagué , . Bookmarquez ce permalien. 2 Commentaires.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :