Qu’est-ce que mBlock
mBlock est un environnement de programmation graphique basé sur Scratch.
Comme ardublock, mBlock permet la programmation de projet à base de carte Arduino. Ardublock est un plugin qui s’ajoute à l’IDE Arduino. La programmation se fait par bloc de fonctions. L’intérêt d’ardublock est qu’il génère des lignes de code en C dans l’IDE. Cela est très pratique. Il semble que le développement d’ardublock soit arrêté puisque la dernière version date de 2014. Il semble donc que mBlock soit le logiciel à utiliser pour programmer des cartes arduino.
mBlock c’est Scratch que l’on a doté d’extensions permettant de piloter un Arduino. Nous allons voir que mBlock est d’autant plus intéressant qu’il permet de créer nos propres blocs, nous avons donc la liberté de développer des projets innovants et de les proposer à nos élèves.
mBlock est disponible sur PC et sur tablette
mBlock : le mode scratch et le mode Arduino
mBlock peut être utilisé en mode scratch : l’utilisation des blocs est alors équivalente à celle de scratch. Il est possible grâce au menu « pilotage » de faire interagir le panda avec un Arduino.
Nous pouvons détourner la programmation du panda pour n’utiliser que la programmation d’une carte arduino.
mBlock peut être utilisé en mode Arduino, il est donc possible depuis mblock de téléverser le programme dans l’arduino. Dans ce cas on utilisera essentiellement les blocs de l’onglet pilotage, les blocs scratch ne pouvant être utilisé pour le téléversement.
Ajouter des extensions
Il existe de nombreuses extensions permettant de disposer de blocs de programmation déjà réalisés par la communauté des utilisateurs de mBlock.
Pour récupérer ces extensions : aller sur l’onglet « choix des extensions » et « installer ».
Les blocs apparaissent directement dans le menu « pilotage » de mBlock.
Créer des extensions mBlock
J’ai utilisé le document produit par Wang Yu, Product Manager chez Mblock.
Ce document est très dense et mérite quelques précisions.
J’explique comment créer une extension » allumer ou éteindre une DEL ».
Comment créer un bloc allumer/éteindre une DEL
On va sur l’IDE arduino pour récupérer le code en C du fonctionnement du composant que l’on souhaite. On s’assure du bon fonctionnement du code en C en téléversant vers l’arduino. Si le programme fonctionne on peut alors s’en servir pour créer l’extension mBlock.
On peut se servir d’une extension mBlock existante comme bloc de départ comme Demo.zip. Voir le tuto de Wang Yu.
Une extension est un fichier .zip que l’on va installer via l’onglet « choix des extensions ». Une extension est un dossier zipper qui comprend un dossier .js et un fichier .s2e.
Le dossier .js comporte un fichier .js en java script qui permet l’interaction entre l’Arduino et le panda.
Le fichier .s2e reprend suivant une certaine structure le programme en C de l’IDE arduino.
Modification du code de Demo.s2e afin de pouvoir obtenir notre extension DEL
On ouvre Demo.s2e à l’aide d’un éditeur de texte (comme notepad ou vim) et on modifie le programme comme suit :
- extensionName : nom de l’extension à créer ;
- description : décrire l’extension;
- author et home page : votre nom et une adresse internet si vous le souhaitez ;
- javascriptUrl :« js/……. .js » Doit absolument être le nom du fichier .js que l’on trouve dans le dossier zip
On prend soin de renommer le fichier Demo.s2e avec le nom choisi et défini dans le nouveau programme.
Réalisation du bloc
Il faut maintenant écrire le programme et réaliser les blocs : il y a quatre parties à respecter
- BlockSpecs : Définition des blocks ;
- Menus : définition du menu ;
- Values : Transformation en valeur numérique dans le mode arduino ;
- Translators : translations
BlockSpecs : définition du bloc
Dans cette partie nous allons définir l’allure des blocs .
- « h » : bloc d’entête « headerblocks » on peut utiliser pour démarrer le bloc « arduino program » existant dans les extensions mBlock ;
- « w » : Writing blocks
Dans notre cas : écrire ce que l’on va voir sur le bloc, attention %d va permettre de créer des fenêtres de choix.
(On peut également noter %n ,%s,%m et % c voir détail plus bas) Il faut par contre donner dans l’ordre ce qui sera écrit dans la fenêtre. Ici dans la première case D1 et dans la seconde Allume. Donc le premier carcatère noté {0} fera référence au port et le deuxième carcactère noté {1} fera référence à l’état.
- « r » : Reading blocks
- « b » : binary code
Chacun des blocs comporte une structure permettant la génération du code arduino.
- » inc » : include la librairie, cette librairie doit être présente dans la partie librairie arduino. C’est la librairie présente dans ide Arduino et qui permet le fonctionnement du composant dans arduino, prog.ino.
Dans le cas de la DEL il n’y a pas de librairie particulière.
- « def » : définition des variables, voir le programme .ino
Dans le cas de la DEL il n’y a pas de variable.
On met à cet endroit tout ce qui n’est pas dans la fonction setup ou loop, c’est à dire les définitions de variable, d’objet , notés dans le programme .ino.
- » setup » : il s’agit du programme que l’on trouve dans .ino.
Le void setup, il s’agit de l’initialisation du programme.
Donc le code suivant (que l’on trouve dans l’Ide) pinMode(2,OUTPUT)
Il faut respecter le code mis dans w soit {0} pour le port donc le premier paramètre ici D1.
« pinMode({0},OUTPUT);\n « ,
- « work » : Nous devons définir le premier paramètre du programme, il s’agit du void loop dans le .ino. C’est à dire le programme attendu sur la carte arduino. Dans mBlock va s’écrire dans le setup.
Il faut tout le temps écrire dans work le programme. Il peut être utile de lire les entêtes de la bibliothèque, c’est à dire le mode d’emploi de la bibliothèque dans le fichier bibliothèque.h (h comme header) et le fichier cpp qui contient le code source en C de la bibliothèque. Souvent le concepteur a rajouté des commentaires très intéressants. (à trouver sur internet)
Dans notre cas
« digitalWrite({0},{1});\n «
- « loop » : Si l’on écrit à cet endroit c’est pour forcer le programme à rentrer dans la boucle indéfiniment. On ne laisse pas le choix à l’utilisateur de proposer un boucle différente (10 fois par exemple) et s’arrête.
Dans notre cas il n’y a pas de loop. Dans mBlock on devra utiliser le bloc « boucle indéfiniment ».
Menus : définition du menu
Cette partie va permettre de créer un menu qui apparaît dans les fenêtres.
Ceci afin de pouvoir faire le choix dans notre cas du port D1-D2- …. dans la première fenêtre et « allumé ou éteint » dans la deuxième fenêtre.
On reprend donc les termes suivants %d dans w :
soit « allume »:[« Allume », « «Eteint »]
et « port »:[« D1 », « D2 », ….]
Values : Transformation en valeur numérique dans le mode arduino
Dans notre cas nous avons besoin de définir les valeurs afin de définir un état logique dans le cas de allumé (état 1) et éteint (état 0).
Pour les ports il suffit de les repérer par une valeur numérique.
Détail des blocs
- %n : envoie un nombre de notre choix ;
- %d.choix : permet de choisir un nombre dans la liste choix, il faut donc créer une liste choix dans la partie menu ;
- %s : permet d’envoyer une chaîne de caractère libre ;
- %s.choix : permet de choisir une chaîne de caractère dans une liste qu’il fait définir dans la parti menu ;
- %c : menu couleur.