Débuter la programmation avec Nodejs et Johnny-Five : IoT et robotique à base d’Arduino, Raspberry Pi, Orange Pi

Accéder aux soldes du Black Friday Amazon Black friday Banggood Ventes flash Gearbest
9% de remise sur tout le site Banggood*

Profitez également de nombreuses réductions allant de 10% à 85% sur Smartphones, Quadricopters, Smart Watches, appareils domotiques, éclairages, caméra de sport 4K, kits et outillages électronique DIY... *Hors produits déjà en promotion

Voir le code promo
3 jours restants

Johnny-Five est une librairie Javascript Open Source permettant le développement rapide et facile d’objets connectés ou de petits projets robotique (bras articulé, voiture radio-commandée…). Dans le tutoriel précédent, nous avons vu comment remplacer le GPIO de l’Orange Pi qui pêche par son manque de librairies par un Arduino Pro Micro 5V/16MHz. Nous avions utilisé Node-RED pour piloter le GPIO de l’Arduino. Dans ce tutoriel, nous allons débuter la programmation en javascript avec le package Johnny-Five.

Présentation du projet

Nous allons utiliser un Arduino Nano v3 5V/16MHz pour remplacer le GPIO de l’Orange Pi Lite. L’Arduino fonctionnera avec le firmware Firmata. Une led est branchée sur la broche D9. Un bouton permettra de démarrer / arrêter le clignotement de la Led. Enfin un BMP180 permettra de comprendre comment utiliser le bus I2C. Pour ce tutoriel, vous pouvez utiliser n’importe quel modèle d’Orange Pi (ici un Orange Pi Lite – WiFi – 512Mo) fonctionnant sous Armbian. Vous pouvez également le faire fonctionner sur un Raspberry Pi (le GPIO de ce dernier ne sera pas exploité).

orange pi lite nodejs johnny-five arduino firmata bmp180 i2c led strobe

Matériel nécessaire

orange pi lite h3 computer board Orange Pi Lite ou One
arduino nano v3 atmega328p 5v 16mhz N’importe quel Arduino. Ici un clone Arduino Nano v3 5V/16MHz
BMP180 BMP180
led 3mm Led 
bouton-poussoir Bouton poussoir
resistance 220ohms Résistance 220Ω
jumper dupont Jumper Dupont
breadboard Breadboard

Circuit

Arduino firmata nodejs johnny-five led bmp180

Installer le firmware Firmata sur l’Arduino

Le firmware Firmata permet d’accéder à toutes les fonctionnalités de l’Arduino via le port série (à l’aide d’un câble USB). Connectez la carte à l’ordinateur et ouvrez l’IDE Arduino. Dans le menu des examples, vous trouverez un sous-menu nommé Firmata. Sélectionnez le firmware qui correspond à votre besoin. Le plus courant est d’utiliser le firmware Standard. Il existe également une version Plus qui permet de communiquer avec des périphériques par liaison série UART, USART ou SoftwareSerial. Téléversez simplement le firmware sur la carte. C’est prêt ! Pour personnaliser le firmware, lisez cet article.

ide arduino install firmata

Installer Node.js sur Armbian ou Raspbian

Node.js est un moteur d’exécution (runtime) qui permet de faire fonctionner des scripts Javascript sur un ordinateur ou un mini-PC (Raspberry Pi, Orange Pi…). C’est un moteur multi-plateforme, c’est à dire que le code écrit sur un environnement pourra fonctionner à l’identique (à condition que les ressources matérielles existent également) sur un autre environnement. Node.js est disponible pour Windows, macOS, Linux (x86 et ARM).

nodejs download macos windows linux arm

Commencez par vérifier que Node.js n’est pas déjà installé sur votre distribution

Si vous obtenez un message d’erreur, installez Node.js 4.x (suffisant) ainsi que Python et Build

Installer le package Johnny-Five (J5)

johnny five johnny5 j5

Johnny-Five est un projet Open Source très populaire destiné à la programmation d’objets connectés ou robotique en Javascript (page officielle). Le nom a été inspiré du personnage du film Short Circuit dont voici un petit extrait pour le plaisir de re-découvrir.

Il est disponible sous la forme d’un plugin Node-RED. De très nombreuses cartes sont supportées (Arduino Uno, SparkFun RedBoard, Arduino Leonardo, Arduino Mega, Arduino Fio, Arduino Micro, Arduino Mini, Arduino Nano, Arduino Pro Mini, BotBoarduino, chipKit Uno32, Spider Robot Controller, DFRobot Romeo, Teensy 3, BeagleBone Black, CHIP, Blend Micro v1.0, Electric Imp April, Intel Galileo Gen 1, Intel Galileo Gen 2, Intel Edison Arduino, Intel Edison Mini…). npm, le gestionnaire de package de Node.js a été installé en même temps. Exécutez la commande suivante pour installer le package Johnny-Five pour Node.js

Remarque. Ici, nous allons utiliser un Arduino/Firmata en guise de GPIO. Si vous voulez utiliser le GPIO du Raspberry Pi, vous aurez besoin d’installer le package io-plugin. La liste complète est ici.

Un programme simple pour débuter : faire clignoter une Led

Commençons par un programme simple pour comprendre le principe de fonctionnement du Javascript et de la librairie Johnny-Five. Placez vous à la racine de la carte SD, créez un nouveau répertoire (par exemple nodebot) puis un nouveau fichier (strobe.js par exemple)

En Javascript, on utilise la commande require pour charger des dépendances. On définit un objet (ici five) qui permettra d’appeler l’API Johnny-Five (J5).

La première chose à faire est de créer une carte. Par défaut, Jonny-Five va scanner les ports USB à la recherche d’une carte compatible. Dans ce cas, il n’y a qu’une simple déclaration à faire

Vous pouvez avoir plusieurs cartes attachées à votre Orange Pi (ou Raspberry Pi). Dans ce cas on pourra indiquer le port USB, ou le port COM sous Windows. On peut aussi définir d’autres paramètres comme la vitesse (baudrate), pinmode, configurer le bus I2C… Tout est détaillé ici.

Il est obligatoire d’attendre que la carte soit prête (ready) avant de piloter la led. On récupère l’état en écoutant l’événement javascript ready. On pourra alors appeler une (des) fonction(s) ou mettre du code dans la fonction.

Ici on va exécuter le code directement dans la fonction. On attache la Led à la broche puis puis on appel la pro

Ensuite on doit définir l’objet que l’on veut utiliser. Ici, on va attacher une Led sur la broche 13 de l’Arduino (initialisation) puis on appel la méthode strobe() qui va la faire clignoter à une fréquence de 250ms.

Enfin, on va arrêter proprement la led lors de l’arrêt du programme. Pour arrêter un script, il suffit de taper deux fois au clavier CTRL + C ou de saisir .exit dans la console (ce qui n’est pas toujours possible s’il y a de nombreux message de log). Pour cela, on va brancher un traitement en écoutant l’événement exit. Pour arrêter le clignotement (strobe), on appel la méthode stop(). Mais stop se contente d’arrêter toutes les méthodes en cours de fonctionnement en laissant les actionneurs dans leur état actuel. Il faut donc appeler led.off() pour être certain d’éteindre la led.

Collez le code complet du projet puis enregistrer avec CTRL+X puis Y.

Lancez le script avec la commande node strobe.js ou node strobe . Johnny-Five recherche la carte Arduino puis fait clignoter la Led jusqu’à ce que le script soit arrêté avec la combinaison de touche CTRL + C (2 fois) ou la commande .exit

Démarrer/arrêter le clignotement de la led avec un bouton

Allons un peu plus loin maintenant. Nous allons ajouter un bouton pour arrêter/démarrer le clignotement de la Led. C’est la classe Button qui s’occupe de gérer les boutons dans Johnny-Five. La documentation complète se trouve ici.

Au début du programme, on va ajouter une variable qui permet de stocker l’état de la led.

On dispose de plusieurs paramètres pour définir un bouton. Au minium, on doit indiquer la broche sur laquelle il est branché  le bouton :

  • pin : broche
  • invert : la logique du bouton est inversée
  • isPullup : initialise le bouton avec une résistance de rappel.
  • holdtime : temps en millisecondes durant lequel le bouton doit être maintenu appuyé pour déclencher un événement “hold”

On peut intercepter 3 événements sur un bouton :

  • hold : le bouton a été maintenu pendant au minimum le temps indiqué précédemment
  • press ou down : le bouton vient d’être appuyé
  • up ou release : bouton vient d’être relâché

Ici on va intercepter l’événement press, qui va appeler la fonction strobeLed() dès qu’on appuie sur le bouton

La fonction strobeLed() test l’état de la variable statusLed pour démarrer le clignotement ou au contraire l’arrêter.

Récupérer des mesures d’un BMP180 sur le bus I2C,

Nous avons vu dans le tutoriel précédent que la classe Multi est en charge des capteurs renvoyant plusieurs mesures. C’est le cas du BMP180 qui permet de mesurer la pression atmosphérique et la température.

On va créer un objet BMP180 qui sera actualisé toutes les 5 secondes (5000 ms)

Ici, nous allons simplement envoyer vers la console les mesures à chaque changement de valeur (ce qui devrait arriver toutes les 5 secondes).

Nous verrons dans un prochain tutoriel comment les envoyer sur un serveur Blynk par exemple.

Code complet du projet Johnny-Five

Voici le code complet du projet qu’il vous suffit de coller dans un nouveau fichier.

Enregistrez le script (strobe2.js par exemple) et exécutez le avec la commande node strobe2.js. Dès que Johnny-Five aura démarré la communication avec l’Arduino/Firmata, vous commencerez à recevoir des mesures du BMP180 et vous pourrez piloter la Led.

node-red johnny-five nodejs script bmp180 strobe led button

Vous avez maintenant un petit aperçu de la puissance de Johnny-Five et du javascript, un language très puissant et très simple à prendre en main. Le duo Arduino/Firmata – Johnny-Five rend l’Orange Pi aussi intéressant que le Raspberry Pi, mais c’est toujours frustrant de ne pas pouvoir utiliser les librairies raspi-io.

 

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous dés inscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

Projets DIY - Domotique et objets connectés à faire soi-même