Étendre les fonctionnalités de mBlock
Utiliser et gérer des extensions
Les extensions de mBlock viennent compléter les fonctionnalités livrées en standard et sont mises à disposition par des développeurs indépendants ou des fournisseurs de kits ou de matériel.
Dans mBlock3, le menu Choix des extensions de mBlock permet de sélectionner des extensions existantes ou d’en ajouter.
Par exemple, deux groupes d’extensions permettent de récupérer facilement la valeur d’un capteur de température très courant, le DHT11 de d-robotics puis de l’afficher avec un texte d’accompagnement sur un afficheur LCD de 2 lignes de 16 caractères.
La première permet de récupérer directement la température lue par le capteur à partir du port digital indiqué. Il existe un autre bloc qui permet de réaliser la même action pour la température.
Les quatre blocs suivants sont dédiés à la gestion d’un afficheur LCD piloté avec le protocole I2C :
-
Cacher ou montrer le curseur.
-
Effacer l’écran .
-
Afficher un texte à une position définie par une ligne et une colonne.
-
Combiner les deux actions précédentes.
-
Utiliser ou non le rétroéclairage.
Programmer une action particulière lors du dépassement d’un seuil de température devient alors très facile. Une boucle infinie permet de mesurer régulièrement et systématiquement la température à l’aide du capteur DHT11. Si cette température dépasse un seuil fixé défini en paramètre alors une courte mélodie se fait entendre. Pour laisser le temps au capteur de suivre les évolutions de la température, une temporisation est ajoutée.
Le programme résultant est de la forme :
Un coup d’œil sur le code généré permet de repérer les bibliothèques utilisées :
On remarque qu’en plus des bibliothèques « standards » que sont Arduino.h, SoftwareSerial.h et Wire.h, se trouvent dht11.h et LiquidCrystal.h qui permettent de gérer le capteur DHT11 et l’écran LCD.
On remarque également d’autres bibliothèques qui ne sont pas utiles au projet, mais qui figurent...
Créer ses propres extensions avec mBlock3
La petite cinquantaine d’extensions disponibles à la date de cet ouvrage et décrites plus haut n’apporte peut-être pas toutes les solutions nécessaires à la réalisation d’un projet. Ou bien les blocs proposés sont trop spécifiques pour prendre en charge des composants ou des modules différents de ceux pour lesquels ils ont été créés, ou encore, le fonctionnement obtenu avec l’extension n’est pas celui qui est attendu, comme cela peut se produire avec certains types de servomoteurs qui ne sont pas compatibles avec la bibliothèque servo.h standard d’ailleurs. Les extensions s’appuient parfois sur des bibliothèques ad hoc, mais dans le cas le plus général, elles font appel à un code externe diffusé et standardisé.
Lorsque des blocs ne sont pas disponibles ou non appropriés dans les extensions standards ou dans le référentiel comme GitHub, deux solutions permettent de contourner cette difficulté :
-
Récupérer le code généré par mBlock et l’insérer dans un script Arduino englobant. Technique dite du « wrapping ». C’est un assemblage de code qui mixe le produit de la programmation visuelle, tel qu’il est généré, et du code C++ créé ou réutilisé pour en faire un programme complet.
-
Créer sa propre extension et la reverser à la communauté pour augmenter le potentiel d’utilisation de mBlock.
Cette dernière option est la plus intéressante et, par le reversement des extensions créées à la communauté, permet de faire progresser mBlock, d’augmenter son potentiel d’utilisation et de rendre ce qui a été donné. Bien sûr, il existe toujours un petit doute sur le fait que quelqu’un, quelque part, soit également en train de développer la même extension et qu’elle devienne disponible dans quelques heures, jours ou mois, mais un premier développement est le meilleur moyen de comprendre la logique des extensions qui n’est pas si évidente et de progresser. La liste des extensions disponibles est publiée sur le site communautaire...
Créer une extension avec mBlock5
Dans la page des extensions, il suffit de cliquer sur le lien Créer une nouvelle extension en haut à droite pour accéder au site de développement de Makeblock.
Le site de création des extensions est rattaché à l’environnement de développement de Makeblock qui nécessite une connexion via un compte gratuit. Par défaut, la page est en chinois, mais un clic en haut à droite sur le globe terrestre permet d’avoir une traduction en anglais.
On retrouve les rubriques descriptives de l’extension sous mBlock3 et il est désormais plus facile de les remplir, car les zones de saisie permettent d’éviter de saisir du code JavaScript pour créer les fichier .json. Par rapport à la version 3 de mBlock, les informations nécessaires au développement de nouvelles extensions sont bien mieux documentées.
L’espace documentaire de Makeblock en appui du développement
Du coup, une fois passée la barrière de la langue, puisque l’alternative à la langue chinoise est l’anglais, l’accès aux ressources est simplifié et facilité.
La description détaillée des paramètres de mBlock5
L’accès au support permet de poser des questions sur des sujets qui ne se retrouveraient pas dans la FAQ mise à disposition...
Assembler des scripts dans l’IDE de l’Arduino
Une technique assez ancienne pour combiner du code provenant de plusieurs programmeurs et surtout produit de manière différente est celle du wrapping. Inventée par IBM à la fin des années 1990, elle permettait de concilier l’utilisation de langages orientés objet comme Java et un existant en COBOL en « enveloppant » (to wrap = emballer) le code existant par un autre code qui utilisait ses fonctionnalités par des appels. Différent du « wrapper » en langage C, c’est le concept d’applications « transitionnelles » qui a permis de faire cohabiter des systèmes anciens programmés avec un langage de troisième génération avec des systèmes modernes dont le langage était plus évolué. À cette heure, les systèmes anciens appelés également « patrimoniaux » (legacy systems) sont toujours en service au moins pour partie et c’est une preuve du bon sens des informaticiens de l’époque que d’avoir pensé que tout ne pourrait peut-être pas être réécrit de suite.
Le raisonnement est le même avec l’utilisation des blocs de mBlock3 et la génération de code Arduino qu’elle propose. Il suffit...