Prototypage rapide avec M5 Stick

Déc 11, 2020

Le matériel nécessaire

Ce matériel est disponible à SoFAB pour vos essais. Il est également proposé avec une formation de groupe ou à la demande.

  • Un module programmable M5Stick-C
  • Un câble USB-C (fourni avec)
  • Un relais
  • Un moteur
  • Une pile 9V
  • Câblage entre le moteur et le module programmable

Logiciels nécessaires

Les logiciels peuvent évoluer. Les informations décrites ici sont valides au 12 décembre 2020.

1. Premières étapes

  • Récupérer les logiciels
  • Configurer le M5 stick avec le programme pour UI Flow
  • Configurer le wifi

Récupérer les logiciels

Pour ce prototypage rapide, nous utilisons UIFlow : une interface graphique qui permet rapidement de tester des programmes avec le M5 Stick. Il peut aussi être utilisé pour apprendre la programmation, ou bien même pour réaliser l’intégralité du projet, le programme étant ensuite sauvegardé dans le module qui devient alors totalement autonome, comme si vous aviez programmé avec un langage natif.

Connectez-vous à l’adresse https://flow.m5stack.com depuis votre navigateur préféré. Choisissez la version numérique en cours, pas la version beta. Dans la barre de menu supérieure, choisissez le dernier bouton à droite, affichant un menu additionnel.

Deux boutons vous permettent de télécharger M5 Burner, l’outil qui permettra de préparer le M5 Stick à recevoir des programmes UI Flow. Cette étape n’est à réaliser qu’une seule fois par M5 Stick ou à refaire si vous programmez votre M5 Stick avec un autre langage que UI Flow, nécessitant de remettre le micro-logiciel de chargement (« firmware bootloader » en anglais).

Configurer le M5 stick avec le programme pour UI Flow

Cette étape est très bien décrite dans la documentation officielle : https://docs.m5stack.com/#/en/quick_start/m5stickc/m5stickc_quick_start_with_uiflow

Notez bien que cette opération n’est à réaliser qu’une seule fois tant que vous utiliserez UI Flow. Il faudra la recommencer si vous utilisez un autre outil de programmation et que vous souhaitez reprendre UI Flow. Le logiciel qui va être installé par M5 Burner permet de se connecter au Wifi, d’envoyer des programmes de tests, et même de stocker plusieurs programmes écrits avec UI Flow et de les réutiliser pour un démarrage automatique totalement indépendant de la programmation.

Bien que M5 Burner ne soit disponible que pour Windows et Mac, une fois le M5 stick configuré, vous pourrez utiliser n’importe quelle tablette ou smartphone équipé d’un navigateur et du wifi pour programmer avec UI Flow.

Configurer le wifi

Pour être programmé avec UI Flow, le plus simple est de connecter votre M5 Stick à Internet. Pas seulement à votre réseau local ou à votre ordinateur, mais à un serveur centralisé qui référence tous les contrôleurs et leur attribue un identifiant (API Key) qui sera utilisé pour le programmer. Cette connexion n’est nécessaire que pour la programmation, mais comme vous allez utiliser le site M5Flow, l’accès à Internet est de toute façon indispensable.

En utilisant les menus (bouton power pour redémarrer puis bouton A ou bouton B pour naviguer, en cliquant rapidement pour passer de l’un à l’autre), vous allez aussi pouvoir choisir l’USB. Le câble USB-C permet en effet de charger la batterie du M5 Stick, mais aussi d’y accéder depuis un ordinateur. Ce n’est pas le plus évident pour faire un objet connecté autonome. Essayez quand même l’accès Wifi.

Cette connexion nécessite d’identifier quel Wifi utiliser, et pour pouvoir le sélectionner et saisir un mot de passe, la première étape est d’utiliser le M5 Stick comme un point d’accès : il émet son propre identifiant (« access point ») qu’il affiche sur son écran au démarrage (ou après passage dans les menus si vous avez déjà bidouillé des premiers programmes) et sur lequel vous vous connectez avec un smartphone ou même votre ordinateur (mais si vous lisez cette page, vous avez besoin de rester connecté à votre Wifi).

Tester un premier programme

Lorsque votre premier programme est écrit (voir les exemples ci-dessous), retournez dans le menu de configuration (en haut à droite puis roue dentée des paramètres) pour entrer le numéro que vous voyez à l’écran. Sur l’exemple ci-dessous, la clé d’API automatiquement générée par le Cloud UI Flow est 64A9 BFE1. Cela signifie que pour « hacker » notre propre dispositif, vous pouvez réutiliser cette « API Key » dans votre navigateur et y envoyer depuis l’autre bout du monde votre propre programme. Ne le faites pas, merci. 

Utiliser UI Flow

UI Flow permet de construire un programme composé d’assemblages de briques logiques (boucles, conditions) et de commandes (lectures, écritures, affichages à l’écran) par glisser/déplacer d’éléments graphiques dans le navigateur. Il permet ensuite de tester directement le code tant que le M5 stick est allumé (bouton lecture), de le sauvegarder pour plus tard (menu / enregistrer) ou de l’enregistrer dans la mémoire de programmes du M5 stick pour une utilisation autonome sur batterie.

Un premier prototype : l’arroseur automatique

Pour les formations M5-stick que propose SoFAB, nous avons rassemblé différents composants : pompe à eau, relais, tuyau, pile 9v, M5-stick, capteur d’humidité pour la terre. Ce matériel et le coût de la formation réduit vous permet de réaliser un objet connecté très évolué puisqu’il garde avec le Wifi la possibilité de communiquer avec d’autres équipements (d’autres M5-stick par exemple), avec votre smartphone (il embarque un serveur web) ou avec des outils IoT dans le Cloud.

Un premier test de blocs

Si vous avez déjà prototypé (sur Arduino par exemple), vous êtes habitués à un « setup » et à une boucle « loop ». Bien évidemment ce fonctionnement est possible sur UI Flow, mais il y a surtout possibilité de fonctionner par timers (des boucles indépendantes déclenchées toutes les N millisecondes) et par événements (sur appui d’un bouton). C’est beaucoup plus simple à penser, c’est performant (le micro-contrôleur ESP32 à l’intérieur du M5 Stick est puissant, il faut s’en servir !) et cela ouvre la voie à des systèmes réactifs simples à mettre en place.

Voici un programme utilisant les deux possibilités.

Les plus attentifs auront remarqué sur leur écran le bouton « Python » : hé oui, il permet d’afficher l’équivalent dans ce langage de votre assemblage de bloc. Une bonne façon d’avoir un aide-mémoire si vous abandonnez UI Flow pour un environnement Python et que vous voulez retrouver rapidement un accès à l’une des fonctionnalités de l’ESP32. Par contre pour UI Flow, gardez bien l’utilisation des blocs, le passage inverse de Python aux blocs n’étant pas garanti (pour pas dire impossible mais on n’est pas à l’abri d’une évolution fulgurante).

Si vous avez testé le code ci-dessus « tel quel » et que le M5-stick s’est éteint quand vous appuyez sur le gros bouton… C’est que tout a réussi 🙂 mais il faut attendre qu’il redémarre donc utilisez le « power off » en dernier recours. Surtout, notez qu’au redémarrage, votre programme n’est plus là : le bouton « Play » permet de tester directement mais ne va pas enregistrer le programme dans la mémoire.

Pour cela, il faut utiliser l’icône de download (flèche vers le bas) à droite de la barre du bas avec le message « download the m5 to your device ». Au reboot, le programme se lancera. Un appui très rapide sur le bouton A dès le boot permettra de passer du menu d’exécution des programmes au menu de programmation ou au menu des paramètres. Le bouton de droite permet de choisir dans les menus. 

Piloter le moteur

Ce programme vous permet de piloter un relais et de changer son état selon que le bouton A (en façade, gravé M5) est enfoncé ou relâché par pilotage de la sortie générique G26 qui se trouve sur le connecteur du M5stick (celui qui permet de brancher des extensions chapeau ou « hat »).

Un cercle est dessiné sur l’écran, dans la partie gauche, et il prend le nom « circle0 » que l’on peut utiliser dans le programme sur la partie de droite pour changer sa couleur.

Nous n’utilisons pas ici un composant « relais » comme pour l’écran ou pour les boutons, mais le contrôle basique des I/O. Au dos du M5stick, il est indiqué le nom des entrées/sorties génériques (GPIO pour General Purpose In Out) sur le connecteur noir : juste après l’alimentation (GND et 5V sortant), la GPIO G26 permet de connecter un relais, un servomoteur ou un capteur grâce à un connecteur à 3 pattes classique. Le menu « Advanced » de UI Flow nous permet d’accéder aux fonctions du micro-contrôleur, dont les entrées/sorties faciles (« Easy I/O ») avec les lectures analogiques, les lectures d’état numérique (« digital read ») et les sorties de niveau haut ou bas (« digital write »). Les habitués d’Arduino y retrouveront des fonctions utiles comme le « map ».

Comme vous le constatez, pas de setup ici : juste deux événements distincts concernant le bouton A, « wasPressed » lorsqu’on appuie, et « wasReleased » lorsqu’on relâche. Vous pouvez vous amuser à utiliser les autres événements : « wasPressed » pour activer, et « wasDoublePress » pour désactiver (éteindre le relais, éteindre la pompe).

 

Lire un capteur

Nous avons sélectionné le capteur « Earth » qui utilise le connecteur blanc (« Grove ») pour lire la résistance de deux barres plantées dans la terre de la plante que vous souhaitez arroser.

Il fait partie de la série des « Units » que vous pouvez directement ajouter dans UI Flow et avoir des blocs spécifiques. Ici, il s’agit simplement d’une lecture d’entrée analogique (valeur entre 0 et 1024) ou une entrée numérique (1 ou 0). Dans l’air, le capteur renvoie une valeur analogique à 0 (aucune conduction entre les deux électrodes). Dans l’eau, l’entrée monte à 500.  Il va donc falloir définir un seuil entre les deux, différents selon chaque plante, correspondant à la quantité d’eau idéale que vous souhaitez verser dans la plante. 

Arroseur IoT complet

Cette partie est totalement ouverte et dépend de votre imagination ! On va se contenter d’abord de déclencher le moteur sur un seuil. Cela permettra de montrer des briques de base. 

Il y a plusieurs façons de le faire : une boucle continue, ou un test toutes les secondes. Dans la vraie conception d’un objet connecté industriel, on ferait en sorte de réveiller le micro-contrôleur pour économiser la batterie. Comme il s’agit ici de faire une démonstration, on va arroser 1 seconde toutes les 10 secondes tant que le seuil n’est pas atteint.

On pourrait ensuite étendre à 10 secondes d’eau toutes les minutes, afin de laisser le temps à l’eau de pénétrer la terre et d’atteindre le capteur. Le mieux étant d’accumuler la quantité d’eau utilisée, et de lever des alertes si la valeur ne monte pas autant que prévu, signe d’un problème (bouteille vide ? capteur qui n’est pas sur le chemin de l’eau ?). Bref, c’est un vrai métier que de concevoir et de programmer un objet connecté efficace et pertinent.

Rendre autonome votre objet connecté

La première étape est de sauvegarder votre code de blocs (format de fichier « M5F ») pour pouvoir le réutiliser.

Ensuite vous pouvez télécharger votre code dans le M5 Stick, c’est le bouton « Download » dans le menu en haut à droite ou l’icône télécharger dans la barre du bas.