Mais sincèrement, le but est de se faire les dents à la création d'une librairie.
Que sont les prérequis pour être inclus dans le "library manager"?
Voici sommairement ce qui est nécessaire pour qu'une librarie soit incluse dans le manager de l'IDE d'Arduino.
- Doit être héberger sur un site de gestion de source tel github, gitlab et bitbucket.
- Doit avoir à la racine du repo les fichiers qui seront installer sous Arduino/librairies/[nomdelalibrairie]
- Le fichier librairy,property doit être présent
- La numéro de version est sous la forme major.minor.revision (semver)
- Le fichier README.adoc doit décrire la librairie
- Le fichier keywords doit définir les mots clés à "highliter" dans l'IDE
- Le fichier .development ne doit pas être présent ( mais utile pour le dévelopment )
- Le code source doit être accessible à partir de la racine, quoi que les dernières version supporte le répertoire /src
- Les examples sont contenus dans le sous-répertoire /examples
- Si supporté, utiliser le mécanisme de "release" pour spécifier les nouvelles versions
- Écrire dans le forum d'Arduino pour annoncer la nouvelle librairie.
Une fois la librairie inscrite, un sytème automatisé monitore le repo et mets à jours assez rapidement les nouvelles versions ( peut prendre quelques heures ).
Où trouver l'information complète pour le support du dévelopment de librairies
- Specification pour le support de librairies ( et library manager ) à partir de la version 1.5 de l'IDE
- Petit tutoriel un peu trop simpliste sur la création de librairies sur le site officiel
- La FAQ du library manager
- Il n'y a rien de mieux que d'allez vous-même regarder les librairies déjà installées et y jeter un oeil.
Fonctionnalités et utilisation de la librairie
Une seule classe est accessible via la libraire et c'est JSONSerialWriter. Les méthodes sont relativement évidentes dans leur fonctionnalité. Puisque c'est un sérializer qui écrit de manière synchrone dans le stream, l'ordre d'appel est important. C'est aussi à l'utilisateur de gérer la hiérarchie des objets sauvegardés. Par défaut, c'est l'objet Serial qui est assigné comme stream de sorti. Il est cependant possible d'assigner tout autre classe dérivant de Print pour la sérialisation.
Comme le but est d'être le moins gourmand en mémoire, la classe ne contient que trois booléens, un int et un pointeur vers le Print a utiliser. Très probable que plus tard dans le développement, le tout soit encore plus compact. Puisque les appels ne garde pas vraiment d'états ni de buffer, c'est tout aussi compact lors de l'exécution.
JSONSerialWriter writer;
writer.startWriter();
writer.writeValue( "temperature", 10 );
writer.writeValue( F("humidity"), 22.87f );
writer.writeValue( F("winddirection"), F("North"));
writer.closeWriter();
Le résultat èa la sorti sera:
{"temperature":10,"humidity":22.8700,"winddirection":"North"}
À noter que l'utliliation des string en flash F(str) est important pour sauvegarder de la mémoire.
Cédule de développement
Bien qu'il puisse y avoir pas mal de fonctionnalités utilitaires à cette librairie, j'espère faire un release rapidement. J'imagine qu'il est possible de sortir une version avant la 1.0.0 . Si c'est le cas, tant que le tout est fonctionnel, compilable sur AVR et megaAVR, ce sera parfait comme ça.Dans les ajouts qui viendront par la suite, je prévois:
- Support pour écrire directement dans le stream.
- Permettre d'écrire la valeur de chaine de caractère en plusieurs appels.
- Compiler pour les architecture sam et samd
- Quelques méthodes utilitaires pour facilité la vie avec les arrays.
- Optimisation