Go Down

Topic: [Tuto] Implémenter un protocole de communication (Read 16502 times) previous topic - next topic

barbudor

Apr 22, 2012, 09:20 pm Last Edit: Jan 20, 2013, 10:50 am by barbudor Reason: 1
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 si le lien du forum ne marche pas
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

osaka

#1
Apr 23, 2012, 02:08 pm Last Edit: Apr 23, 2012, 02:12 pm by osaka Reason: 1
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 ?

68tjs

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.

gerse

Merci, c'est vraiment tres clair et tres instructif

barbudor

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.

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

fdufnews

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.

f1apy

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

osaka


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.  ;)

zoroastre

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.
Gné! ;)

alpaph

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.

icare

Bonjour,

Bravo Barbubor, toujours aussi efficace.
@+
Icare
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

OLIVIERC67

Super tutoriel merci
Par contre impossible de lire le doc (même sans accent) sur Android avec officesuite er kingsoftoffice
- 1 mega 2560
- 1 Raspeberry Pi (en pré-commande)
- Quarante douze PC
- beaucoup de volonté, pas beaucoup de temps.
- Ma religion : OpenSour

f1apy

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 >>>

___________________________________________

barbudor

En fait, tu as le document dans son entier

j'ai pas encore fait le diagramme  :smiley-roll:  :smiley-sad-blue:
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

f1apy

: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

Go Up