Test de l'IDE XOD, développer des projets Arduino sans programmation en assemblant des blocs • Domotique et objets connectés à faire soi-même

En juin dernier, je vous ai présenté XOD, un nouveau projet Open Source destiné à la programmation Arduino sans programmation par assemblage de bloc cousin de Scratch. En quelques mois, le projet a évolué. La version 0.16 vient d’être publiée. J’en ai profité pour l’installer et faire le tour du propriétaire. Vous êtes nombreux à vouloir vous lancer dans des projets Arduino sans avoir aucune notion de programmation. Le projet XOD est un très bon point de départ. Il vous permettra de construire des algorithmes et de voir le résultat sur des cas concrets. Seul bémol, il ne faut pas que l’anglais vous rebute…mais en informatique, c’est difficile de passer à coter !

Installer XOD sur Windows, macOS ou Linux

L’installeur pour Windows, macOS ou Linux (deb ou rpm) peut être téléchargé sur ici. Le site internet détecte automatiquement votre plateforme et propose la dernière version disponible. L’éditeur de code XOD s’installe comme n’importe quelle autre application sur votre ordinateur. Sur macOS, il suffit d’ouvrir l’archive dmg puis de glisser l’icône XOD vers le dossier application.

Récupérer des exemples XOD

L’installeur est livrée sans aucun exemple. Pour gagner du temps dans la prise en main du logiciel, vous pouvez récupérer les exemples directement sur GitHub. Plusieurs sont disponibles sur le dépôt du projet ici. Il suffit de télécharger de dépôt GitHub en local. Cliquez sur Clone or Download puis Download ZIP ou depuis le Terminal ou l’invite de commande en exécutant git clone https://github.com/xodio/xod.git (attention, il faut que la commande git soit installée auparavant).

Les exemples se trouvent dans le dossier workspace :

  • Blink, le grand classique pour faire clignoter une Led
  • lcd-time, pour afficher l’heure sur un écran LCD 2004
  • traffic-light, un simulateur de feux tricolores
  • two-button-switch, pour comprendre la logique binaire
  • water-station, l’exemple mis en avant pour les développeurs pour gérer l’arrosage d’une plante en mesurant le taux d’humidité avec une sonde analogique

Programmer en ligne avec XOD

XOD est entièrement écrit en javascript (avec Nodejs), un langage très utilisé en programmation Web. XID peut donc fonctionner sous la forme d’un site internet ou d’une application pour ordinateur après une compilation du code avec Electron. Electron est un projet Open Source soutenu par GitHub qui permet de fabriquer une application multi-plateforme (en gros Windows, macOS et Linux) à partir du code Javascript. Pour accéder à l’éditeur en ligne, rendez-vous sur cette page. Un compte utilisateur gratuit est nécessaire pour utiliser l’éditeur. Pour le tutoriel, j’ai utilisé la version de bureau.

Présentation de l’interface de programmation

A l’ouverture, XOD vous demande sur quel espace de travail vous souhaitez travailler. Pour ouvrir un exemple téléchargé précédemment, cliquez sur Switch workspace directory.

Naviguez et placez sur le dossier workspace du projet GitHub et cliquez sur Choose Directory. Dans la liste qui s’affiche, choisissez le projet water-station par exemple.

XOD ne révolutionne pas le genre. On retrouve un espace de travail avec une grille magnétique sur laquelle on viendra placer les blocs de fonction. Je vous conseille d’activer l’aide contextuelle en allant dans le menu View puis Toggle Helpbar (à droite de l’écran). Vous pouvez également afficher le debugger (en bas de l’écran). Pour placer un noeud, il suffit de le faire glisser depuis la liste ou d’appuyer sur le petit plus (+).

Chaque noeud dispose d’entrées et de sorties. En cliquant sur un noeud, on accède aux paramètres du bloc, par exemple :

  • Le port (la broche de l’Arduino)
  • Des paramètres propres au bloc. Par exemple

Comme chaque paramètre dispose de sa propre entrée sur le noeud, on peut attribuer dynamiquement la valeur pour chaque paramètre. Par exemple, on pourra récupérer la valeur d’un potentiomètre pour fixer un seuil d’allumage / extinction d’une LED à l’aide d’un noeud map-range.

Les noeuds sont organisés en plusieurs familles dont voici un aperçu actuel

  • xod/bits, noeuds permettant de manipuler les données numériques (bits)
    • bdc-to-dec, bitwise-and, bitwise-not, bitwise-or, bitwise-xor, dec-bcd, shift-ledt, shift-right
  • xod/core, les noeuds de base
    • absolute, add, any, acos, analog-input, and, atan, asin, boot, cast-boolean-to-number, buffer, cast-boolean-to-pulse, cast-boolean-to-string, cast-number-to-boolean, cast-number-to-string, ceil, clock, clip, concat, concat-3, concat-4, concat-5, console-log, concat-6, constant-number, constant-boolean, constrain, constant-string, continuously, continuously-pausable, cos, count, cube, debounce-boolean, defer-boolean, defer-number, defer-pulse, defer-string, delay, digital-input, digital-output, discretize-2, discretize-3, discretize-4, divide, duty-to-time, equal, fade, flip-flop, flip-n-times, floor, format-number, gate, gate-number, gate-boolean, gate-pulse, gate-string, greater, i2c-begin-transmission, i2c-end-transmission, i2c-read, i2c-request, i2c-request-bytes-6, i2c-send-byte, i2c-send-bytes-2, i2c-write, if-else, if-else-string, less, log-10, log-bx, log-e, map-clip-range, map-range, modulo, multiply, nand, nor, not, nth-number-2, nth-number-3, nth-number-4, or, pi, pow, pulse-on-change, pulse-on-false, pulse-on-true, pwm-output, round, saw-wave, saw-wave-map, select, sin, sine-wave, sine-wave-map, sqrt, square, square-wave, subtract, system-time, tan, time-to-duty, timer, to-percent, tri-wave, tri-wave-map, watch, word-to-number, xor
    • adxl335-accelerometer, adxl335-convert, button, dht11-thermometer, dht2x-pack, dht2x-thermometer, dhtxx-read-raw, ds1307-rtc-write, ds1307-rtc-read, gp2y0a-linearize, gp2y0a02-range-meter, gp2y0a21-range-meter, gp2y0a41-range-meter, h-bridge-dc-motor, hc-sr04-ultrasonic-range, hc-sr04-ultrasonic-time, l3g4200-gyro, led, lis331dlh-accelerometer, lis331hh-accelerometer, l3gd20h-gyro, lis3dh-accelerometer, pot, servo, sd-log, st-imu-generic-sensor, st-imu-normalize-va, st-imu-normalize-acc, st-imu-round-sensitivity, text-lcd-16×2, text-lcd-16×2-i2c, thermometer-tmp36
    • Tous les matériels supportés par XOD sont répertoriés ici. Libre à chacun de développer ses propres drivers ensuite à partir des noeuds de base
    • deg-to-rad, m-to-cm, m-to-in, m-to-ft, c-to-f, m-to-mm, rad-to-deg

Bien évidemment, on pourra développer ses propres noeuds (librairie) pour les réutiliser dans d’autres projets.

Il n’y a pas de champ de recherche au dessus de la liste. Pour trouver un noeud, il faudra naviguer dans les listes 🙁 ou ouvrir le champ de recherche. Il se trouve dans le menu Edit -> Insert Node. Un raccourcis clavier serait le bienvenue pour gagner en productivité. Le champ de rechercher est très bien fait car il permet de consulter la documentation avant d’insérer le noeud sur l’espace de travail. Une fois le noeud trouvé, on l’ajoute par un double-clic.

Conclusions

Le concept de programmation par assemblage de bloc est un très bon outil d’apprentissage pour de petits projets. C’est très souvent le cas pour les projets d’objets connectés. Pour avoir travaillé plusieurs années avec Labview de National Instrument, on est très rapidement limité par le concept dès que le projet dépasse quelques écrans. XOD (et scratch) sont parfait pour comprendre les concepts de programmation ou réaliser rapidement des maquettes.

XOD est encore un projet en devenir. Il manque encore quelques fonctionnalités indispensables pour le développement d’objets connectés. Pour la v0.2, j’aimerai voir la prise en charge du WiFi, quelques écrans OLED (SSD1306, Nokia 5110) et la gestion des requêtes HTTP pour communiquer avec un serveur domotique ou un service en ligne (Thingspeak par exemple). Encore un petit effort messieurs les développeurs :D. Vous y êtes presque !

Avez-vous aimé cet article ?