Arduino Forum

International => Français => Tutoriels et cours => Topic started by: barbudor on Apr 22, 2012, 09:20 pm

Title: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Apr 22, 2012, 09:20 pm
Bonsoir

Ma semaine de congés étant finie, j'accouche de ce tuto.
L'idée m'en a été donnée par quelques discussion que j'ai eu sur le forum cette semaine, notamment avec HadesDT.

Le sujet est l'implémentation propre d'une messagerie, généralement sur liaison série ou dérivée.
Propre ça veut dire claire, maintenable, extensible, résistante aux erreurs de transmission.

Les premiers chapitres, notamment le n°2 est un peu théorique et on peu le sauter dans une première approche. Toutefois, il est préférable d'y revenir un peu plus tard. Les patients pourront le lire dès le début.

Le chapitre 3 propose l'implémentation, avec code source complet, d'un protocole ASCII qui peut s'appliquer à la liaison série (Serial de base ou Serial2/3.. sur Mega ou même SoftSerial), ou bien a n'importe qu'elle classe de stream dérivée de la classe Arduino Stream.

Si cela intéresse du monde, j'envisage un chapitre 4 sur l'implémentation d'un protocole binaire cette fois.

Le code n'implémente que le coté esclave sur Arduino. En fonction de l'intérêt je pourrais proposer aussi le code du maître sur Visual C# ou bien une version du maître sur Arduino pour une communication Arduino/Arduino.

Si quelqu'un souhaite contribuer avec un exemple maître en Processing, il est le bienvenue.

L'ensemble est sous licence Creative Commons CC BY-NC-SA 2.0 pour la doc et GPL v2 pour le code.

------
Historique
v1.0   22 avril 2012      Version Initiale
v1.0a 22 avril 2012      Avec le code corrigé cette fois ;) ==> télécharger ici (http://www.barbudor.net/files/Implementer_un_protocole_de_communication_v1_0a.zip) si le lien du forum ne marche pas
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: osaka on Apr 23, 2012, 02:08 pm
Yop Yop,
Sympa comme tutoriel, on y vois bien l'intérêt d'implémenter un protocole de communication et qu'il ne suffit pas d'envoyer 1 octet pour ce faire comprendre en tout sécurité.
Ça peut paraitre évident à la lecture du tutoriel mais peut être bien préciser aux début de celui-ci qu'une communication ce fait par octet et pourquoi tu découpes certaines variables en 2,4, ... , octets ?
Enfin c'est juste pour bien dissiper les doutes éventuels aux départ du tuto, comme c'est la première chose qu'ils tenteront :  envoyer un int, double, etc, sur le port série qui évidement ne correspondront pas à l'autre bout de la ligne.
Sinon quand à la qualité du tutoriel je donnerais 9/10, j'aurais pas fais mieux vu la complexité d'essayer de faire comprendre ce qui nous parait évident.  ;)

ps: Peut être un petit pdf à la place d'un doc ?
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: 68tjs on Apr 23, 2012, 05:19 pm
Quote
Peut être un petit pdf à la place d'un doc

Non parce qu'un "doc" ou un "odt" on peut l'éditer pour son usage personnel et c'est bien pratique.

Par contre le "zip" m'a fichu le souk sous debian testing -> fichier zombie.
Est-ce l'accent et les espaces dans le nom du fichier ?
Pourrais-tu publier la prochaine édition sans zipper ni accent ni espace, merci.
Pour la taille sur le serveur les fichiers odt sont déjà compressés.
"odt" est maintenant géré par Microsoft. Surtout pas de "docx", merci.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: gerse on Apr 23, 2012, 10:25 pm
Merci, c'est vraiment tres clair et tres instructif
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Apr 23, 2012, 10:47 pm
Pas PDF, DOC çà restera. License CC donc comme pour le GPL, c'est de la doc "Open Source". C'est pas Arduino Spirit çà ;)
ODT bien qu'un format "ouvert" n'est pas assez répendu pour les débutants. Donc comme les solutions libres savent lire du DOC, no problemo.
D'ailleurs cette donc n'a pas été rédigée vace M$ Word mais avec TextMaker2008, un clone allemand de Word2003 qui marche du feu de Dieu sur un netbook alors qu'on ne peut pas en dire autant ni de OpenOffice (RIP  =() ni de LibreOffice qui sont toutes 2 aussi lourdingue que leur frangine de Redmond.

Je vais regarder pour les histoires d'accent, mais je préfère que la distribution reste sous la forme de ZIP pour que code + doc restent ensembles.
Si je commence à me mettre à Github, je suis pas sur que les débutants s'en sortiront  :D

Osaka, tu pourrait revenir vers moi avec plus de détails sur tes commentaires. Je ne suis pas sur de comprendre ce que tu voudrais que je modifie.

Title: Re: [Tuto] Implémenter un protocole de communication
Post by: fdufnews on Apr 24, 2012, 08:50 am
Moi aussi sur Ubuntu j'avais un nom de fichier bizarre à cause de l'accent. Mais j'ai réussi à l'ouvrir.

J'ai trouvé ce doc de très bonne qualité. Très clair et bien documenté/argumenté.

Merci.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: f1apy on Apr 24, 2012, 11:37 am
Hello,

Super doc !,
elle arrive à point pour moi , je suis en plein dedans,
arduino (Teensy) en esclave et µLCD43PT 4Dsystem GFX en maitre
le Teensy execute certaines taches en fonction des évennement générés par le touch panel
notamment l'envoi de datas via   I2C vers un chip Si570, cependant je prévois également
pour l'arduino de piloter l' affichage lors d'action sur un encodeur ou bien de boutons poussoirs
donc il me faut du bidirectionnel aux niveaux des commandes
Cordialement,
f1apy
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: osaka on Apr 24, 2012, 02:02 pm

Osaka, tu pourrait revenir vers moi avec plus de détails sur tes commentaires. Je ne suis pas sur de comprendre ce que tu voudrais que je modifie.


Pas vraiment besoin de modifier, c'est une simple suggestion.
Peut être une précision à mette en début du tuto pour les débutants vraiment débutant qui on du mal à visualisé le fait qu'une transaction ce fais octet par octet et non une variable (de plus d'un octet) entière d'un coup.
D'un côté ça voudrait dire qu'ils ne savent pas ce qu'est un octet  :smiley-sweat:.
Enfin de toute façon on s'en aperçois assé rapidement dans ton tuto donc là c'est moi qui en fais un peux trop sans doute  :* (et pourquoi je n'en fini pas avec mon tuto sur les pointeurs  :smiley-sweat:), c'est juste qu'on rencontre de temps en temps la question: "Pourquoi lorsque j'envoie un float avec mon arduino j'ai 4 entier de l'autre côté ?", donc j'anticipe .
Sinon dans ça globalité le tuto est parfait, c'est de l'excellent travail.  ;)
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: zoroastre on Jun 28, 2012, 06:59 pm
Version linux.

Effectivement, l'accent ou le codage du "é" est trés mal géré sous linux (UTF8). seul mc (alias midnight commander) le supporte.

@+

Zoroastre.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: alpaph on Jun 30, 2012, 10:12 am
Bonjour,

Super documentation. Merci. Je vais l'utiliser pour remplacer la bidouille de protocole que j'avais implémenté dans mon projet : non seulement les communications seront mieux gérées (timeout, ...) mais en plus ça aura de la "gueule"  :)

Encore merci.

A+

Philippe.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: icare on Jun 30, 2012, 04:43 pm
Bonjour,

Bravo Barbubor, toujours aussi efficace.
@+
Icare
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: OLIVIERC67 on Jul 17, 2012, 06:03 am
Super tutoriel merci
Par contre impossible de lire le doc (même sans accent) sur Android avec officesuite er kingsoftoffice
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: f1apy on Jul 17, 2012, 08:16 am
Hello Barbudor,

super, mais j'ai un petit pb , lorsque que j'ouvre le doc avec word µ$, il me manque le diagramme du protocole de réception,
y a pas moyen d'avoir la doc en pdf ? ce serait bien mieux et on s'affranchit des pb de TT de Txt, sinon avec quel soft il faut que j'ouvre le document ?
Cordialement,
Jacques
__________________________________
3.3.3.   L'algorithme de réception
C'est sur l'algorithme de gestion de la réception des messages que porte la difficulté de l'exercice. Voici l'algorithme en question sous la forme d'un diagramme :

<<< INSERER DIAGRAMME RECEPTION >>>

___________________________________________
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Jul 18, 2012, 10:19 am
En fait, tu as le document dans son entier

j'ai pas encore fait le diagramme  :smiley-roll:  :smiley-sad-blue:
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: f1apy on Jul 18, 2012, 10:57 am
:smiley-mr-green: hi,

bon je vai essayer de regarder le code pour comprendre, mais le c++ n'est pas ma tasse de thé  :smiley-eek-blue:
merci quand même, bonne journée
Jacques
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: 68tjs on Aug 20, 2012, 06:30 pm
<troll du lundi>
Vive les logiciels libres aux formats normalisés ISO, qui tournent sur plusieurs systèmes d'exploitation et qui de surcroît sont gratuits comme libreoffice (traitement de texte + tableur + dessins + présentation + base de donnée[->là pas terrible] ).
Merci de toujours avoir à l'esprit que Windows n'est pas une obligation et que Linux, Mac, Androïd, existent aussi.
Penser aussi que si vous n'avez pas Linux, par symétrie celui qui a Linux (Mac) n'a pas Windows.
</troll>

Le format pdf n'est pas une aussi bonne idée qu'il parait. Un pdf est fait pour ne pas être modifié.
Sur ce forum nous délivrons des documents "libres", AMHA il faut donc laisser à chaque utilisateur la possibilité de l'adapter et/ou de le compléter suivant ses besoins personnels.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: alex38 on Aug 29, 2012, 03:11 pm
Très bon tuto dans l'ensemble en tout cas !

Je suis entrain d'essayer de comprendre le code (le C est mon "am"i mais le C++ pas z"encore mais bon apparemment la seule chose du C++ que tu/vous utilise"s/z" sont les bool qui ne sont pas présent dans le C)

Title: Re: [Tuto] Implémenter un protocole de communication
Post by: NimaG42 on Sep 08, 2012, 04:34 am
Je viens de dévorer votre code ! Bravo je le trouve super bien codé.

Ca m'inspire pas mal pour améliorer le mien, mais pour le petit système que je fais, je ne sais pas si séparer les deux "couches" de message comme vous le faites est une bonne idée.
En tout cas bravo pour le travail fourni !
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Sep 08, 2012, 11:17 am
Si la couche basse de transport des messages convient, autant la garder telle quelle et travailler sur la couche supérieure.
C'est le but de la séparation des couches.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: psyko on Sep 12, 2012, 09:17 am
Bonjour,

Je viens de parcourir le code et suis assez content, car il se rapproche de ce que j'ai fait. Félicitation pour ton travail.
Je serai assez intéressé par un article sur un protocole binaire (celui que j'utilise), notamment la façon dont on peut éviter les erreurs de détection entre les tokens de début et les données. C'est toujours dans les tuyaux ?

Merci à toi.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Sep 12, 2012, 09:56 am
Pffff
Faudrait que je m'y mette mais je traine la patte
On va y réfléchir :D

Merci de tes encourragements
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: AntoineOnTheWeb on Nov 09, 2012, 07:30 pm
Ce tuto est très bien rédigé et très complet. Cependant, il y a quelque chose que je ne comprend pas... Vous découpez les tâches pour la clarté, mais en réalité, est-il possible d'avoir plusieurs fichiers dans un programme Arduino ?

Merci d'avance
AntoineOnTheWeb
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Nov 09, 2012, 07:39 pm
Oui, puisque j'y arrive....

On peut avoir un INO qui est la partie principale (setup, loop)
Et des modules CPP+H

Dans l'IDE Arduino, une fois que tu as un INO tu peux ajouter les fichier supplémentaires par l'icône sur la droite. En cliquant dessus tu auras un menu avec 'ajouter un fichier'.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: AntoineOnTheWeb on Nov 09, 2012, 07:40 pm
Ok je ne savais pas :)
Merci pour cette info
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: cutprod on Nov 20, 2012, 09:21 pm
Bonjour, merci et félicitations pour ton tuto, j'y retrouve les élément auxquels je me suis heurté en développent un protocole de communication a base de module 433Mhz.
Et d'autres que je n'avais pas pris en compte.
Grâce a toi je vais améliorer tout ça!!
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Nov 21, 2012, 10:06 pm
Avec des modules 433MHz, tu as intérêt à utiliser la lib VirtualWire qui va prendre en charge la couche basse :
- structure de message (synchro de début, longueur, ...)
- détection d'erreur
Un peu comme le protocole UDP sur réseau IP.
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: jfs on Jan 20, 2013, 08:26 am
Le lien vers le document ne fonctionne plus.....  :smiley-mr-green:
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: barbudor on Jan 20, 2013, 10:53 am

Le lien vers le document ne fonctionne plus.....  :smiley-mr-green:


Apparemment il y a pas mal de problèmes avec les pièces jointes sur le forum ces temps ci.  ]:)
Peut être font-ils du nettoyage et les suppriment après un certains temps ?
Peux tu te renseigner ?

J'ai mis un 2eme lien direct qui marchera toujours (dans l'historique).
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: MichelNimes on Mar 10, 2013, 11:48 am
@ Barbudor:

Quote
Le code n'implémente que le coté esclave sur Arduino. En fonction de l'intérêt je pourrais proposer aussi (...) une version du maître sur Arduino pour une communication Arduino/Arduino.


Oui, moi je voudrais bien, si c'est accessible à un touriste comme moi!  XD

Title: Re: [Tuto] Implémenter un protocole de communication
Post by: corsaire50 on May 11, 2013, 11:08 pm
Et quid de Firmata ? Avez vous une opinion sur ce protocole ASCII ? Je cherche à l'utiliser entre Arduino et Processing mais j'en arrive à modifier les sources de base !
Title: Re: [Tuto] Implémenter un protocole de communication
Post by: bendia on Jun 11, 2014, 10:28 pm
Super tuto  :) Et merci à Zoroastre pour la version tar lisibles par les autres debianistes faciles  ;)