Premiers pas avec la carte Arduino/Genuino 101
La carte est commercialisée aux États-Unis sous le nom d’Arduino 101, alors qu’en Europe elle est appelée Genuino 101. De quoi en embrouiller plus d’un, surtout quand on sait qu’il existe aussi une Arduino Industrial 101 vendue à travers le monde par arduino.org. Comme je suppose que vous me lisez depuis l’Europe, je l’appellerai donc Genuino 101 par la suite, ou simplement 101.
Note : j’ai testé les codes sous Windows 7 Family Edition, SP1.Selon arduino.cc, la 101 a été conçue pour succéder à la Uno. C’est plutôt surprenant, car ces deux cartes sont à des années-lumière l’une de l’autre. Alors que la Uno repose sur un (impressionnant, je l’admets) microcontrôleur à 8 bits, la 101 embarque deux cœurs de 32 bits sous la forme d’un système sur puce (SoC) Curie d’Intel. Un de ces cœurs est un processeur x86, donc génétiquement parlant la 101 est sans doute plus près d’un PC que de la Uno. La 101 dispose par ailleurs d’au moins 10 fois plus d’espace mémoire que la Uno. Une autre différence, et pas des moindres, est que la Uno s’apparente plutôt à une carte de liaison pour l’Atmega328 (avec un convertisseur série-USB), alors que la 101 dispose de ses propres périphériques, par exemple un accéléromètre/gyroscope à 6 axes et un module radio Bluetooth Low Energy (BLE) (vous avez remarqué l’antenne sur le circuit imprimé ?) Et tandis que vous avez les pleins pouvoirs sur le microcontrôleur de la Uno, l’accès au Curie est (pour l’instant) plus que restreint.
Il faut aussi savoir que la 101 n’est pas 100 % compatible avec la UNO. Elle n’a que 4 sorties MLI/PWM (contre 6 pour la UNO) et elle est alimentée sous 3,3 V. Des adaptateurs de niveau rendent les broches d’E/S compatibles 5 V, toutefois les entrées analogiques passent également par un adaptateur de niveau, ce qui signifie que leurs signaux sont limités à 3,3 V.
Côté EDI en revanche, vous ne noterez guère de différences. Vous devez utiliser la version 1.6.7 ou ultérieur d’arduino.cc (pas la 1.7.x d’arduino.org) sinon vous ne pourrez pas télécharger et installer le compilateur et les outils nécessaires à l'exécution et à l’écriture des croquis. Pour les installer, ouvrez le Gestionnaire de carte (Outils -> Type de carte) et cherchez dans la liste déroulante l’entrée Intel Curie Boards. Cliquez dessus, puis sur le bouton Installer. L’EDI téléchargera environ 250 Mo, et après le processus d'installation vous serez prêt à coder. Le paquet est installé sous votre-chemin-utilisateur\AppData\Local\Arduino15\packages\Intel\.
Toujours dans l’EDI, sélectionnez la carte et le port série qui ont été créés par les pilotes de la carte. Ouvrez l’exemple Blink, cliquez sur Téléverser, et admirez le clignotement de la (mini) LED ! Il se passe a priori exactement la même chose qu’avec la Uno, mais si vous activez les avertissements du compilateur vous noterez quelques différences. Un croquis vide compilé occupe par exemple quelques 30 Ko (15 % de l’espace programme disponible) alors qu’avec la Uno ce sont 450 Ko et 1 %. La programmation est elle aussi différente, avec un véritable indicateur d’état.
Lorsque vous sélectionnez la 101 comme carte, un nouvel exemple pour Curie apparaît sous Fichier -> Exemples. La page arduino.cc parle d’un exemple CurieBLEHeartRateMonitor, mais il n’est pas disponible sous mon EDI. Cela dit on peut tout de même copier le code de la page tutorial pour le tester. Le code s’exécute, mais il s’agit plus d’une sorte d’oscilloscope que d’un moniteur cardiaque. Pour que l’exemple fonctionne, vous devez installer la boîte d’outils nRF de Nordic sur votre appareil Android ou iOS. L’appli est utile, o-k, mais je m’attendais plutôt à une appli pour Intel ou Arduino.
Un autre exemple à tester est RawImuDataSerial (Fichier -> Exemples -> CurieImu -> RawImuDataSerial). Malheureusement, ce croquis crache des données à un débit trop rapide pour être suivi par l’œil humain. Cela dit l’EDI 1.6.7 a un nouvel outil appelé Traceur série (menu Outils), alors pourquoi ne pas en profiter ? Pour cela il suffit de commentez la ligne 124 (sur mon code d’exemple) de la fonction loop, comme ceci : // Serial.print("a/g:\t");Compilez le croquis. Pour une raison que j'ignore, il faut attendre quelques secondes avant de pouvoir ouvrir le Traceur série. Une fois le traceur lancé, attendez à nouveau quelques secondes pour voir les données s’afficher. Tournez et agitez la carte pour influencer le tracé des courbes.
Une séquence de calibrage est exécutée avant le démarrage du croquis. Pour cela la carte doit reposer à plat, immobile et sur le dos. Le câble USB peut être gênant, si c’est le cas posez quelque chose d’un peu lourd sur la carte, une tasse de café (vide !) par exemple, pendant à peu près 5 secondes. Retirez le poids avant de secouer la carte.
Le site arduino.cc fournit un autre exemple de mesure inertielle qui implique le langage Processing. Le tutoriel suggère l’installation de la bibliothèque Madgwick avec le Gestionnaire de bibliothèques (Croquis -> Inclure une bibliothèque -> Gérer les bibliothèques) mais je ne l’ai pas trouvée dans ce menu. Je l’ai donc téléchargée depuis Github, puis j’ai utilisé l’option Croquis -> Inclure une bibliothèque -> Ajouter la bibliothèque .ZIP. J’ai copié le code Arduino dans l’EDI, le code Processing dans l’EDI de Processing, et là, tadaaaam ! … nada. Juste une erreur disant Method "glClearDepthf" not available. J’ai cherché une solution sur le net, et découvert qu’il ne fallait pas utiliser la version actuelle de Processing (3.0.1, 23 octobre 2015) mais une ancienne.
L’installation de Processing 3.0 (30 septembre 2015) a effectivement résolu le problème du glClearDepthf, mais je me suis retrouvé avec une exception Array index out of bounds sur mon numéro de port COM, qui était le 34. J’ai pu sortir de cette nouvelle impasse depuis Windows en forçant le numéro de port à 2. Après avoir débranché puis rebranché la 101, ni l’EDI Arduino ni l’EDI Processing n’ont protesté, mais ça ne marchait toujours pas. Je voyais bien des données sur le Moniteur série lorsque j’envoyais des « s » à la 101, mais Processing ne recevait que des zéros. Un débogage supplémentaire m’a fait réaliser que l’attribution du numéro de port COM dans le croquis Processing est un peu plus compliqué que ce que le tutoriel veut bien nous faire croire, donc je vous conseille vivement de lancer d’abord l’exemple Processing affichant la liste des ports série disponibles. Pour ce qui me concerne, il me fallait entrer zéro, l’indice du COM2 de la liste renvoyée pour mon ordinateur. Après ça, l’exemple de mesure inertielle a marché.
Lorsqu’on tourne la carte, l’image de la carte dans Processing tourne aussi. Cool. La ressemblance n’est pas parfaite, mais ce n’est pas vraiment le but.
Et voilà qui concluait ma première prise en main de la nouvelle Genuino 101.
En attendant la sortie du système d’exploitation en temps réel Curie (son lancement est prévu pour mars 2016), on peut dire que la Genuino est une bonne carte compatible Arduino, avec Bluetooth 4.0 et capteur inertiel à 6 axes. Elle n’est certes pas compatible à 100 % et est un peu chère, mais en contrepartie elle offre plus de fonctions. La programmation des croquis est aussi facile qu’avec la Uno, mais l’accès au matériel est restreint. Espérons que cette carte révèlera bientôt son véritable potentiel. [HM]