Vous êtes sur la page 1sur 134
NOUVELLE FORMULE : + NOUVELLES RUBRIQUES + 32 PAGES N° 31 my > OCT. / NOV. a SSJHACKABLE @ _ ~ MAGAZINE [om cases DEMONTEZ | COMPRENEZ | ADAPTEZ | PARTAGEZ i RISC / OPEN 3D/ RADIO SONDE / ESP8266 RETRO/ 8-5ITS RISC-V: la révolution | Conception d'antennes, | Sondede température | Initiez-vous facilement des processeurs de la modélisation ala autonome : problémes, | ala programmation 100% ouverts et réalisation en impression | corrections et assembleur pour libres arrive! 3D évolutions 6502/NES Arduino / Machine Learning / 1A: Donnez UNE Intelligence Arciicielia & votre Arduino * Créez un réseau de neurones ¢ Entrainez-le * Et mettez-le a I'épreuve Seca Ce daaiaed Récupérez vos fichiers et données dans la Mf Rétro-ingénierie : accéder au silicium des creates Mer lg cu acne incu S L'électronique pérenne et innovante Bureau d'études en électronique et informatique embarquée, Agilack vous accompagne dans la conception, le prototypage et I'industrialisation de vos produits. oo AE) "he 279) id CAO Prem eee oC Orne et ea _ GILACK DNS Sec ae ee Software www.agilack.fr contact@agilack.fr maevey carton TES te) BIENVENUE SUR CONNECT ! = DONNEZ UNE INTELLIGENCE ARTIFICIELLE Pretty AVOTRE ADRUINO pi LES ARTICLES DE HACKABLE N°31 - OCTOBRE/DECEMBRE 2019 ameristar HOM vr VOA UN ARTICLE HACKABLE NUMEROS STANDARDS. 66a tin ain WR Vie 4000 rai ps comes ex Eero a7 eee se ile) ET LACCES ALA DOCUMENTATION ! A découvrir sur : connect.ed-diamond.com ACCES MAGAZINES Pr erie standards et hors-séries Bee er ere) AFFICHAGE Petri paru RECHERCHE Pr ured Pe Bee CONNECT HACKABLE aCe. t ane CONSULTEZ MULTI-CONNEXION eae Pee ot ger haa meee nT etree Pour vous abonner : www.ed-diamond.com Pour un devis personnalisé ou pour en savoir plus : Tél. : +33 (0)3 67 10 00 20 * E-mail : cial@ed-diamond.com EDITO ars aie ily a ceux quisanen te «open » et ceux quine saver pat Mon fie vent de dearer en Terminale Set de devenirpropié- taie dune «To Premium CE Eon Python» Passons sul fat, qe programmer en Python sur un éeran de 320-240 pixels releve da ‘masochisme pure interessonsious a quelque chose gul me semblalt bien pus irtérestant: pte un péiphérqemontagedepuls a caleaatce Uns scomaire et disponible cst le THnnovator Hub, Ce bide environ 8 et en reali une décinison dea cart MSP. XPOZPAOT, sas MSMAEOPAINR Launchpad (-290, La calle communique avec le MSPA22 ‘i un cible USB OTG min A mile vers mars mle, main Launchpad originale est naturelle ‘ment, équipée un port cr ame wimporte quelle carte digne de ce nom! -Applquons done jojeusement sarcasm) Fafirmation ache sur la page web de présentaion ‘dy THnnovator ub: toute découverte nie par « Pourguol ?», De eft Pourqutacleuatrice rechargeable, utilise pas un connecteur quiet maintenant un sta dard de fit Jone sis pas, ne seraitce que pour permetie aux eves derechager leur calcul trie ave le bloc de leur smartphone Non’? Pourquot a caleusrice refuse out connexion un périphéique USB ayant pas comune VIP ePID respectverentOx0851ecoxbef3 et coupe Talimentation OTG te «hu wivestpas recon auniveausystéme? Pourqua ne pas fourir les sources du crus exécuté sur le THnnovator Hub wis au format binire ELF (Sete 110.28, remarqueze «Sketch» dans le nom), par Foul de mise jour? Pour gnoreeécsysme Ener, ql semble a pont mor, et ne pas voir une approche lus globale en permetant le développement de rogus pltables ave Tap dea caeulatice (une Dibllotnéque pour supporter les fonedonnalités du hub)? Pourquol faut que ce soit es listers modu et complétents du forum THPanet qu cereusent le sujet etexplorent des alternatives pour utlser au mieux leur matériel? xGnalement. Pourquot able ae ache la méme clelatriee que mon fs en expérant avert unm mum ouverture? rein Beers meermmrapamenn Sycmmarsaseay muta ‘Soe tperestenteans erence ce Hackable Magazine spe tos amend EDITIONS El cers [Shee armor te aendcom ‘ets anwar pe tistantimatn Sescahepacee ‘igus papa ant ec astra ® emcee aeanee Sere ee. ae eee _MUr Rar edo Sansa, . EE cere ncornen Y @hackablemag ‘APROPOS DE HACKABLE... HRS, HACKERS HACRABLE ‘Sea, at rotlonoe, tp emai | teppei ctype echt ‘Spe hokera quel qoe ate anaie emloggue Cis ut ude ngage mes gue de ere “ranean as ae 2 nome eminem ns por ier oon de Hdolage ‘fea surlsbase du tee us ana deisantgime, Wel er Roto wow nackabl SOMMAIRE ors 04 Le Module du moment Convertisseur HDMI vers VGA 06 La liberté jusqu’au cour du processeur avec RISC-V EGON rare ees 28 Capteur autonome ESP8266 : problémes et évolution 40 Créer, écrire, lire et décoder une image SPIFFS d'un ESP8266 48 Arduino MKR Vidor 4000 : un Arduino pas comme les autres Rees a 60 Découvrez les réseaux de neurones avec Arduino Berita 80 Petites antennes réalisées par impression additive : de la conception a la visualisation des diagrammes de rayonnement (en vrai et en virtuel) Pree asst 98 Rétro-ingénierie matérielle : aceéder au silicium 108 Rétro-ingénierie matérielle : comprendre le silicium RETRO TECH 116 Programmation avec le 6502 ABONNEMENT 67 Abonnement [ENCART CONNECT ENCARTE DANS LA COUVERTURE HACKABLE MAGAZINE N'31| 3 AO “TP WfODULE DU MOMENT: Lintérét premier d'un convertisseur HDMI vers VGA est de permettre l'utilisation de matériels plus anciens avec des cartes et équipements modernes. Le cas typique ici est, bien entendu, de recycler un vieil écran VGA comme moniteur pour une carte Raspberry Pi. Ceci ne sera pas nécessairement trés intéressant pour une utilisation « desktop », mais sera parfaitement viable ‘pour le jeu, mulation, la création d'un media center ou encore la confection d'un systéme d'affichage (surveillance vidéo, domotique, annonces, etc.) Le connecteur HDMI posséde une broche fournissant du +5 volts ainsi, bien entendu, qu'une broche pour la masse. Ceci permet la tras grande majorité des convertisseurs de se passer d'alimentation externe. Les modéles nécessitant une alimentation sont généralement équipés d'un connecteur micro ou mini USB, et livrés sans bloc. Une liaison HDMI véhicule un signal ‘vidéo, mais également une information numérique audio, Comme le standard VGA ne dispose pas de ce genre de fonctionnalités, certains convertisseurs liminent simplement le signal alors que autres le convertissent également en sortie analogique sous la forme d'un connecteur jack stéréo 3,5 mm. D'autres convertisseurs permettent également de simplement extraire les données audio du signal HDMI, sans toucher a la vidéo, afin de permettre Ja connexion analogique (jack ou cinch) ou numérique (S/PDIF) & un amplificateur La gamme de prix pour ce type d’équipement va d'environ deux euros a une douzaine d'euros, que ce soit sur eBay, Amazon, Aliexpress, Banggood ou tout autre site proposant des rrigine d'expédition imports chinois. Le prix dépendra de du matériel, mais aussi des fonctionnalités offertes, des accessoires complémentaires (cables, etc.) ou encore de Yancienneté du modéle. Le convertisseur compact avec sortie audio sur le c6té (HDMI male / VGA femelle), présenté ici, peut @tre trouvé pour moins de 2€ sur Ebay depuis des années. CY 4 | Hackapte macazine naa wovw.ed-diamond.com CONVERTISSEUR HDMI VERS VGA Ces convertisseurs HDMI/VGA existent sous bien des formes et sont de qualité de fabrication assez variable. Généralement construit autour d'une simple puce dédiée & cet usage, la forme est généralement l'élément qui détermine le choix d'un produit plucot qu'un autre. Certains adaptateurs sont és compacts et d'autres plus encombrants. De la méme maniére, on peut trouver des adaptateurs ayant une entrée HDMI femelle avec un connecteur VGA male, idéal pour convertir un écran en HDMI, alors que d'autres proposent du HDMI male et du VGA femelle, convertissant cette fois, par exemple, une Pi en périphérique VGA. Le connecteur HDMI se décline en plusieurs variantes. Le type « A » (19 broches) est le plus courant, c'est celui qu'on retrouve sur la Raspberry Pi jusqu'au modéle 4 possédant deux connecteurs micro-HDMI également appelé type D. Le type B est une version doublée (29 broches) du type A et est 1'équivalent au DVE-D, il permet d'atteindre des résolutions supérieures & 3200°2048 (WQSXGA). Enfin, le type C, ou mini-HDMI, est une version naine du type A qu'il est plus rare de trouver actuellement, mais néanmoins présent, comme sur la Raspberry Pi Zero. HDCP (High-banduwidth Digital Content Protection) est la technologie de protection liée au standard HDMI Lobjectif est de limiter la possibilité d'enregistrer le flux vidéo numérique ‘et donc la copie pirate de contenu, Dans une transmission, sil'un des deux appareils n'est pas ‘compatible HDCP, la qualité du flux peut étre L'interface HDMI, pour High Definition Multimedia Interface, est une norme compléte de transmission audiojvidéo numérique. Ceci inclut le format des données utilisé, le format des connecteurs, le brochage, la compatibilité, ete. Il n'y a aucun signal analogique présent sur une liaison HDMI. wow. hackable.fe réduite par 'autre appareil, voire la transmission rendue impossible, Dans le cas d'une conversion vers VGA, cect ne posera pas de probleme ppuisque la qualité ne sera de toute fagon pas au rendez-vous. Il faut également savoir que la clé ‘cryptographique HDCP a été rendue publique il y a fort longtemps sur le net, permettant a nombre de fabricants asiatiques de créer des matériels. parfaitement compatibles HDCP sans vraiment respecter les standards, HACKABLE MAGAZINEN‘31| 5 AO | ACTUALITES LA LIBERTE JUSQU’AU CCEUR DU PROCESSEUR AVEC RISC-V Fabien Marteau [Membre actif du Front de libération des FPGA] RISC-V est un jeu d'instructions 32 bits libre, développé initialement par 'université de Berkeley. Ce jeu d’instructions (ISA pour Instruction Set Architecture) est maintenant soutenu par une fondation regroupant quasiment tous les grands noms de l'industrie informatique. Dans cet article, nous allons décrire succinctement le concept de RISC vs CISC, puis nous expliquerons les bases du jeu d'instructions avec un peu de code assembleur, enfin nous terminerons par une description de quelques émulateurs et processeurs RISC-V disponibles aujourd’hui sur le marché. ars] rd) COs old een aie a RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 uuand on pense «architecture de processeurs », Varchitecture x86 de Intel nous vient haturellement en. ‘éte, comme nous avons pu Je voir dans Varticle de GNU/ Linux Magazine en septembre 2018 [1]. Hest naturel pour un informaticien de penser dabord a cette architecture, puisque c'est celle massive- ‘ment utilise surles ordina- teurs personnels. Pourtant, il existe de nombreuses autres, architectures de micropro- cesseurs,allant du tout petit microprocesseur 4 bits enfoui au microprocesseur 64 bits & instructions vectorisées, pour Jes supercalculateurs massive- ‘ment parallees, existe également toute une série de processeurs open source souvent écrite en VHDL/ Verilog, a destination des FPGA, es processeurs sont plus sou- vent des microcontrdleurs et sgénéralement, des dérivés de « Vieux » microprocesseurs, RISC-V rest pas un éniéme processeur libre, qui s'ajoute Ala pile de processeurs « sof core» 4 utiliser sur un FPGA, comme Fon peut en trouver sur ‘opencore et autre librecore. RISC-V (se prononce « risque {faitteve ») est une standardt- sation libre d'un jeu truetions, le langage d'un processeur, avec une série d’ex- tensions permettant de couvrir wow nackabl ensemble des domaines d'application des architectures 32/64 bits (voir méme 128 bits, méme sia definition n'est pas encore stabilisée, le temps den trouver une utilité). Pas de micro en 4, 8 ow 16 its donc. Mais, méme pour la trés basse consommation, e 32 bits est désormais trés utilisé, comme on peut le voir avec les STM32. De plus, il existe une extension permettant d'utiliser des instructions compressées sur 16 bits, ainsi qu’une base avec ‘moitié moins de registres (RV32E). 1. LE RISC, UNE ARCHITECTURE LOAD/STORE La formalisation de V'architecture RISC est née a Berkeley au début des années 80, & une époque oit les principaux fondeurs de microprocesseurs menaient une course & qui aura le plus @'ins- tructions, les plus grosses, les plus complexes... A cette époque, les constructeurs de processeurs ajoutaient des registres et des instructions de tailles et de formats différents, pour augmenter la puissance de calcul de leurs machines. Cet ajout de multiples registres et instructions avait pour conséquence une augmentation du nombre de transistors, ainsi qu'une augmentation de la consommation. Cette course a Pécha- lote fonctionnait plutét bien, en tenant compte de la loi de Moore EtVvarchitecture x86 d’Intel est la preuve que cela fonctionne encore, puisque le format x86 domine toujours le marché des ordinateurs personnels et des serveurs, Cependant, a Berkeley, les chercheurs tentérent une échappée et proposérent un nouveau modéle de microprocesseur, basé sur la simplicité, Lidée était qu’on a tout a gagner avec un jeu instructions plus simple, plus petit. En faisant des statistiques sur les instructions généralement utilisées par les compilateurs, ils séraient apergus que la plupart de ces grosses instructions ne sont utilisées qu’a la marge, et que seule une portion minimale était massivement utilisée dans les programmes « génériques ». Que de silicium gaspillé pour implémenter des instructions qua- siment jamais utilisées, que d’énergie gaspillée pour cadencer le décodage des instructions devenues trés complexes, que de cycles d'horloges gaspillés pour cadencer le cycle d’exécution de chaque instruction. Dans leur publication initiale, les chercheurs ont done défini le concept de RISC pour Reduced Instruction Set Computer, en oppo- sition & CISC pour Complex Instruction Set Computer. A Stanford, HACKABLE MAGAZINE N‘31 Tw ~e ACTUALITES ‘une autre équipe a elle aussi surfé sur cette vague, en langant ‘un jeu d'instructions qui a son petit succés encore aujourd'hui Je MIPS, Jeu dinstructions qui vient @ailleurs d’étre libéré, en réaction a Ja montée de RISC. On associe trés souvent le « Reduced » de RISC un nombre réduit d'instruetions, Méme si les ISA de base ont souvent moins instructions que leurs « équivalents» CISC, ca rest pas tout & fait vrai. En effet, les ISA RISC aujourd'hui ont largement plus instructions que les CISC du début des années 80, par exemple {le 8086 avait 80 instructions). Non la signification du « Reduced » est surtout visa-vis des fonctionnalités, une instruction RISC ne doit faire qu'une seule chose, rapidement, Et notamment, la lee- ture et ’écriture dans la mémoire sont exécutées par des instruc- tions séparées (load/store) les instructions arithmétiques faisant leurs calculs sur les registres internes. Cest pourquoi on parle également architecture ioad/store, plutdt que de RISC. (On pourrait donc résumer la définition de 'architecture RISC ‘comme ceci: + Des instructions simples qui n’exécutent qu’une seule tache rapidement, + Un format d'instructions de largeur fixe (32 bits dans la majorité des cas). «Des registres internes « génériques » Hormis Varchitecture de type x86, la plupart des nouveaux pprocesseurs essaient de se rapprocher de la philosophie RISC, aujourd'hui, 2. QU’EST-CE QU’UN PROCESSEUR RISC-V ? Un processeur RISC est une implémentation du jeu d'ins- ‘truetions (84). En effet, e standard RISC ne définit que le «langage » du processeur. 'implémentation est & la charge du concepteur de processeur. C'est lui de décider en com- bbien de cycles ’horloge s'exécutera une instruction, la taille du pipeline quil veut implémenter, comment gérer la pré- diction de branches ou le format du bus de donnée (AXI, ‘Wishbone... Ainsi, un méme jeu instructions pourra tre implémenté ‘sur un petit processeur avec seulement deux étages de pipeline, ou sur un trés gros processeur avec réordonnancement des HACKABLE MAGAZINE N‘31 NOTE Pan Pee ETT Suet éveloppée par Berkeley. Perrin rt Se cae Piermont t os Re esd Ture euros référence a « Vector », Srey Perey eNotes preeereor (weetorielles). Cest Fobjet Perec ea ty Perens instructions « la volée » (Out of Order pipeline). Le binaire sera compatible avec les deux processeurs. Seules les perfor- ™mances changeront. Coté logiciel, le set @'instruc- tions est le langage dans lequel Je compilateur devra convertir ‘un programme pour qu'il fonc- tionne avec le microprocesseur. La définition de ce jeu d'ins- tructions aura un impact direct surles optimisations 8 effec- tuer pour accélérer Pexécution du code, ainsi que sur la com- plexité du compilateur, Les jeux d’instructions de type RISC étant souvent tres aénériques, surtout concernant Je bane de registres (registers file) I est nécessaire de spé- cialiser certains registres pour pouvoir créer notamment des bibliothéques de fonctions RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 Software eye teR i ee Celt Les pseudo-instructions sont | ret Perrier ary Compiler ‘Leset d'instructions (sa) ese Pinterface ‘entree logiciel ele materiel etter) Pee OMe entry ABI Presents Pee ee Coron y ao eS ecu Set ueeentn iy Pere contested ‘omme toutes les instructions Pe ene Bese une valeur de 32 bits dans Peete te tcoy Preer tes teeta Implementation Technology Hardware CUCL Ceer) ee te qui pourront étre lies au programme principal (registre adresses de retour, registre de pile... Pete et Le set dinstructions étant également trés réduit, pour simplifier le codage, on définit également d'autres instruc tions que Von appelle « pseudo-instructions » et qui seront converties a la génération du binaire. reac POE ete En rr ern ss ered ‘Toutes ces définitions sont standardisées dans ce que Ton appelle une ABI, pour « Application Binary Interface ». C'est YVinterface entre le logiciel et le matériel, comme présenté en figure 1. chargement de constante Pee eet rn ent es een ee rae Peete errr Penrose iie Pevemettrmemmmtm 3. LES BASES ET LES EXTENSIONS ihe eaees Genie Pour éviter & Pavenir avoir a gérer une compatibi- lité avec leurs anciennes ISA, les instructions RISCV sont considérées comme immuables quand elles atteignent la version 2.0 de leurs definitions. A Vheure actuelle, les deux bbases considérées comme stables sont RV32I et RV64I, avec, ey ees des tales de registres respectivement de 32 bits et 64 bits. Pee Oe acon Lencodage des instructions reste lui sur 32 bits. eng Le jeu instructions est assez similaire entre le RV321 et Je RVG4I, nous allons parler ici de la version 32 bits. HACKABLE MAGAZINE N's] 9 A. ACTUALITES BASE VERSION _ DESCRIPTION RvazI 20 RVE 19 RVG 20 RvI28 1.7 Banc de registres de 32 bits, instructions arithmétiques entiéres simples. 15 registres de 32 bits au lieu des 31 « normaux ». Banc de registres de 64 bits, instructions arithmétiques entiéres simples. Banc de registres de 128 bits, instructions arithmétiques entiéres simples. Les bases définissent le jeu minimum d'instructions permettant d’exécuter un programme. Mais ces instructions sont assez limitées, es fonctions arithmétiques ne comprennent pas la multiplication ou la division, par exemple. Pour éviter Vinflation du jeu de base, toutes les autres instructions sont ct seront définies par des extensions. Pour la nomenclature, cela se traduit par une lettre majuscule accolée au nom. Les différentes extensions sont données dans le tableau suivant. Tout comme les bases, certaines extensions sont déja figées a leur version 2.0 et d'autres ne sont encore qu’a V'état de projet. Liobjectif (ambitieus9 des extensions est de pouvoir couvrir Yensemble des besoins en matiére de microproces- seurs que l'on parle de microcontréleur trés basse consommation ou de microprocesseur de calcul vvectoriel massivement parallée. EXTENSIONS VERSION DESCRIPTION M 2.0 ‘Multiplication et division entire, A 2.0 Instruction atomique, Fr 2.0 Virgule flottante simple précision. Ajout de 32 registres 32 bits lottants (f0-£31) et d'un registre de statut fesr. D 20 Virgule flottante double précision. Agrandissement des registres flottants & 64 bits. @ 20 Virgule flottante quadruple précision. Agrandissement des registres flottants & 12 bits. L oa Virgule flottante décimale. Reste a définir, c 2.0 Instructions compressées. Cette extension ajoute des instructions codées sur 16 bits au jeu de base. Les instructions compressées fonctionnent avec deux argu ‘ments au lieu des 3 « classiques ». Cela permet de réduire jusqu’a 60 % la taille du programme charger. B 00 ‘Manipulation de bit. Reste & définir. J 00 Instruction pour les langages compilés «a la volée ». Reste a définir. T 0.0 ‘Mémoire transactionnelle, a définir, P oa Instruction SIMD (le MMX du RISC-V) & définir. v 02 Instruction vectorielle. Reste & définir, mais le brouillon est déja un peu avancé. N 4a Gestion des exceptions/interruptions au niveau utilisateur. CY 10 | HackasLe macazine nist wow.ed-diamond.com RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 Les extensions sont accoler a la base choisie. Pour simplifier la nomenclature, les extensions usuelles que sont IMAFD sont compressées en « G », Ainsi, RV32G et RVGAG désignent respectivement [RV32IMAFD et RVGAIMAFD. 4, FORMAT DES INSTRUCTIONS RV321 ‘Toutes les instructions RISCV sont définies par des mots de 32 bits, soit 4 octets. Les instructions ‘& exécuter par le processeur sont done stockées dans une mémoire d'instructions et exécutées les ‘nes aprés les autres, en incrémentant adresse mémoire de 4 & chaque cycle, Les acces & ces ins- tructions se font via un bus d'instructions et la lecture (fetch) des instructions se fait par des acces 32 bits. Les accés étant cadrés, Padresse de Vinstruction suivante est donc +4 et est pointée par le registre PC. Liintérét d'un processeur est de pouvoir communiquer avec Pextérieur. Cette communication se fait via le bus mémoire avec les instructions load et store. Une des caractéristiques du jeu @instruc- tions RISC-V est que seules les instructions load et store permettent laccés & la mémoire externe, le reste des instructions travaillera ensuite sur les registres internes du processeur. La table des registres et de leurs fonctions dans ABI standard est donnée dans la table suivante REGISTRE ABI APPELANT/APPELE DESCRIPTION x0 Zero Toujours 40 a ra Appelant Adresse de retour, x2 sp Appel Pointeur de pile. x3 = Pointeur global x p Pointeur de thread, x57 102 Appelant Variables temporaires. xt sOlfp Appelé Sauvegarde de registres ou pointeur de frame. x9 sl Appelé Sauvegarde de registres. x10-11a0-1_—_Appelant Arguments de fonction / valeurs de retour. xi247 a7 Appelant Arguments de fonction. x1827 sd Appelé Sauvegarde de registres. 32831 36 Appelant Variables temporaires. Un processeur RISCV posséde une base de 31 registres généraux de 32 bits (rv32, numérotés de x1 a x31. Le registre x0 est cablé en dur 0. Cela nous donne done 32 registres de 32 bits. Ces 32, registres sont souvent appelés le banc de registres (register file) et sont accessibles indifférermment par toutes les instructions de IISA. Contrairement a d'autres architectures, les registres n’ont pas de onctions spécifiques, et peuvent donc servir d'argument pour les fonctions arithmétiques, autant que de pointeur de pile ou de sauvegarde d/adresse pour l'appel de fonctions. www hackabi HACKABLE MAGAZINE N‘31 MW 00 | ACTUALITES rg2: | (fincas Tat] op] ype po nercton a » Stype ee (Ti Seale registre pointeu instructions Pest cAbéindépen- lecture et etre dans la ihamentesrerverciiies powtmgliteriveicineslx anu xayamnete 08 plea Ropeieeeenietondia Saar ecagireot Les formats des instructions RV32I sont donnés en figure 2. livre [2]. Le nom de la fonction Dans un souei de simplicité du décodage d’instructions, les argu- ef assembleur correspond aux ments (numéro de registres) rs1 et rs2 sont toujours placés lettres en gras. ‘au méme endroit dans le mot de 32 bits. Méme chose pour le registre de retour rd. Ainsi, le décodage des arguments peut sie fectuer en dur, sans avoir a cabler de condition spécifique. Les instructions de lecture et d’écriture dans la mémoire sont données en figure 3 Le code de instruction est donné par lopcode avec parfois un complement funet3 et funct7, suivant les besoin. vat vf be (tet) ile Comme nous pouvonsle vote valeurs tumédate ne ine SY tal peuvent jamais ére de 32 its. Cependantilest possible de char- ger la partie haute d'un mot de 32 bits, avec une instruction de toot { Pe wana FL ioe} type Ue-type (es 20 bits de poids ford comme Vinstruction Lui et la parte basse avec une instruction de type F4ype, comme Fins- truction add. load tpperimmeiliate Fig. 3: Instructions de lecture et ‘Nous rvallons pas décrire dans le détail chaque instruc- aiecrivure dans ta mémoire. tion RV32I, nous nous contenterons d'une vue générale des instructions pour nous rendre compte qu’elles ne sont pas si Le RV32I permet de charger nombreuses. des mots signés de 8 (bytes), 16 (halfword) ou 32 bits (word). Les instructions de lecture 6tendent automatiquement le bit de signe pour les versions Nous mettrons ensuite en application quelques instructions pour réaliser Texemple de la LED qui clignote. Un exemple concret est toujours utile, pour bien se rendre compte du fonctionnement. Bet ets Pour Ser Fete Sion du bite sige lexste te version non sigide ans ist Load //store gned) pour les lectures 8 et 16 Nous avons wen introduction qvunearchtecture RISC petits Lesinsractonsprenent axreaternent dere commeunearchitectre wadStore. Ces enargurent un regi (es instuctionssontles seule permetant dacceterala memoire _commeadresse dereference Ge données Commengons done par décrielesinsrucins de unevaleu imma signee CY 12 | Hackasie macazine nest wow.ed-diamond.com RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 offset, quis'ajoute a cette . en parameétre rd, Par exemple, aa —s Fig. 4: Instructions Tinstruction de chargement shift right arithmetic ema chargement depuisla mémoire, (Signe extended, bléme en architecture RISC, si Contrairement & beaucoup d'autres jeux instructions, le Yon veut garderla régle d'une —__RISC-V ne posséde pas de registres de statut activant des dra- registre dans une instruction, {La solution trouvée est dele fareen deurinstuctions es 4.3 Instructions de branchement 20 bits de poids fort avec Fins- Les instructions de branchement sont données en figure 5. truction Lui, etles 12 bits de poids faible avec la valeur ‘add upper immediate to pe ««immeédiate » @'une instruction arithmétique (souvent addi). jump and tink { Fenster ee oom antuna{ we} Iiacion ae : branchement. 4.2 Instructions ves SE} arithmétiques a Tesinsrmctonseciime bechamel} fonda tiques sont données en figure 4 Les instructions arithmé- tiques prennent deux registres Les instructions de branchement sont des instructions de (rset rs2)en paramétres et comparaison qui modifient Ie pointeur de programme (PC inscrivent le résultat dans un pour program counter). Les concepteurs du jeu d’instructions wow nackabl HACKABLE MAGAZINE N‘31 13 00 n~u“ ACTUALITES font choisi de mettre la fonction de comparaison dans la fonction de branchement. Cela permet de simplifier la programmation, car il n'y a pas a faire attention a Yordre dexécution des instructions, comme on pourrait Favoir sur ARM ou x86. offset de branchement est une valeur signée qui est ajoutée au PC, s'ily a branchement. Cette valeur immédiate étant codée sur 12 bits, il n'est possible de brancher que sur une zone mémoire de +2 Ko, Pour sauter plus loin, on utilisera la fonction auipe qui permet d’ajouter une valeur immédiate de 20 bits sur le poids fort du PC et done, d'accéder & tout espace mémoire sur 32 bits. instruction de saut jal est utilisée pour l'appel de fonction. Cette fonetion va sauver V'adresse courante du PC (+4) dans le registre donné en argument (rd), puis « sauter » & Yoffset donné en argument (valeur immédiate ou registre). Le pointeur inital étant sauvegardé dans un registre i sera aisé de revenir au flux d’instructions initial 5. COMPARAISON ‘Une instruction de comparaison présentée figure 6 a été ajoutée, en plus des comparaisons se ‘trouvant dans les instructions de branchement. Elle permet de mettre a 1 le registre de résultat (ra) sile premier argument est inférieur au second. Cette instruction se décline en valeur immédiate, signée ou non, immediate nsigned Fig. 6: set less than { tnnedial i unsigned } Inseructions de = Dranchement. 5.1 Registres d’états et de contrdle Le standard RISC posséde une série de registres appelés CSR (4096 maximum) de contréle et de statut, permettant de gérer état du processeur. Ces registres sont décrits dans le volume II de la spécification [3] (spécifications qui ne sont pas encore totalement définitives et évoluent, ef. (12). Is contiennent notamment des compteurs permettant de faire des mesures de performance. C'est aussi dans ces registres que l'on trouvera les informations sur la version du jeu instructions utilisé (avec les extensions). read & clear bit ) 6 samediate Fig.7: control status register ¢ read & set bit {@ a } Insractons de read & write Is ne font pas partie de espace mémoire de données « normal » et peuvent étre lus/écrits/modi- {iés de manidre atomique. D’oi la nécessitédutiliser des instructions spécifiques pour les manipu- ler. Ces instructions sont présentées dans la figure 7. HACKABLE MAGAZINE N‘31 wow.ed-diamond.com RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 Sion prend Pexemple de Vins truction control and status regis- ter read and clear Cette instruction va lire le registre donné en argument (csr) et écrire dansle registre rd, Ele va également mettre 80 tous les bits du registre csr qui sont 1 dans 5.2 Synchronisation de mémoire Le jeu d'instructions RISCV peut étre utilisé sur des systémes a plusieurs cceurs, ainsi qu'avec de la mémoire cache. Il est done nécessaire de fournir un méca- nisme de synchronisation de la mémoire d'instructions et de données, Cest le réle des ins- tructions fence.i et fence que Yon peut voir figure 8. Ces deux instructions vont s'assurer que la _mémoire est disponible, avant de continuer le flot d'exécution. fence load & store fence instruction Fig. 8: Instructions de Dranchement 6. UNE LED QUI CLIGNOTE SUR RV32I (HIFIVE1) ‘Maintenant que nous avons vulensemble des instructions disponibles sur une base RISC, ‘nous pouvons attaquer tn petit exemple de la classique LED qui wou hackable.fe clignote, La LED qui clignote est le « Hello World » de Vélectro- nicien ainsi que du développeur embarqué, toute sa carriére est menée par des LED qui clignotent. Le programme fait clignoter une LED avec une cadence de type eceur qui at (heartbeat). On allume brievement la LED, on Véteint brievement, puis on Vallume a nouveau brievement et enfin, on P’éteint plus longtemps. Bien sr, de nos jours, le développement sur microcontroleur se fait avec des langages de programmation plus évolués. Plus personne ne code en assembleur, part pour des parties tres spécifiques d'un programme. Mais le but ici est de se mettre au plus prés du jeu d'instructions, pour bien comprendre Vesprit du RISCV. Pour développer une « vrate » application, on pourra utiliser un langage évolué de son choix, vu que GCC integre RISC-V et que LLVM est en bonne voie également. Tous les lan- ‘gages de programmation comme le C, C++, Rust, Ada,... peuvent tre utilises sur RISC-V sans trop de problemes, aujourd'hui, Pour étre vraiment concrets dans notre exemple, nous allons utiliser le kit de développement HiFivet, & base de £310 produit par Sifive, qui peut étre commandé pour une cinquantaine de dollars, en passant par le site officiel. Le kit se présente sous la forme d'une carte électronique « compatible arduino », comme le montre la photo de la figure 9, page suivante. Une seconde version du kit avec un module Wii a été lancée, début 2019. Sifive fournit le SDK et OpenOCD, ainsi que la chaine de développement (toolchain) pour Linux. Linstallation sous Linux & base d’UbuntwDebian est donc triviale. Toutes les informations pour installer les outils de développement sont disponibles dans le guide de démarrage [4], nous les résumons juste ici Les plus motivés iront chercher les sources de la chaine de développement sur GitHub, avec la commande suivante Puis, compilerons Te tout avec make. Les plus pressés iront eux chercher la chaine et Youtil openocd précompilés pour leur systeéme dexploitation (les binaires Ubuntu fonctionnent trés bien sur Debian) sur le site de Sifive. Puis, les décompresseront dans le répertoire de leur choix. HACKABLE MAGAZINE N‘31 18 02 oseetarte . eo Perret pees tec arsesery pea ete estar ee https: //atatic.dev.eifive .com/de 1 Linux-ubuntuld. tar.gz 2.0-x86_64-Linux-ubuntuld. tar.gz Pour enfin configurer leur PATH RISC-V dans leur fichier de configuration prétéré ( concernant auteur). FO eee ome CCR ae pL een sete y Pour OpenOCD, il est nécessaire de configurer le convertisseur USB-UART, en ajoutant les régles comme expliqué dans le guide de démarrage. Puis, d'ajouter le groupe plugdev a son wtilisateur. OpenOC va nous servir a télécharger le binaire dans le microcontroleur. CY 16 | HackasLe macazine naa wow.ed-diamond.com RISC-V (> La liberté jusqu’au ceur du processeur avee Ri La chaine de développement spécifique au HiFivel (SDX0 est disponible sur un GitHub, qu'll suff de cloner Seen tenes SEZ Crist Me reseryesrccee Ce SDK inclut toutes les plateformes de développement proposées par la société SiFive, nous nous intéresserons ie la plateforme nommée hifivel. es projets d’exemple sont donnés dans le répertoire « software », Pour les compiler, I faut se placer dans le répertoire racine du SDK et faire un make avec la plateforme de destination (ici le HiFivel), ainsi que le nom du projet exemple eer popes stmt Coo Te TSC ON reseC a tezerse Le téléchargement du binaire compilé se fait également avec une commande make Pee ste cc co See ot Le programme « hello » ne fait qu’afiicher « hello world » sur la seconde interface série (ttyUSB), présente sur le kit. Pour simplifier le développement de notre programme assembleur, nous allons utiliser cet exemple, en remplagant le source hello. par hello. Corsoeroet Poaceae ry vim/nano/emacs/edit hello A Forigine, les Makefile du SDK sont prévus pour compiler du C, mais il suffit de déclarer un label main comme global dans notre code assembleur pour pouvoir « compiler » le programme assembleur au format S. Le programme assembleur complet est & retrouver parmi les sources associées au magazine, nous allons le détailler ici Dans Ven-téte du programme, nous indiquons que nous entrons dans la section texte Puis,1'on donne le cadrage des données [ balign 4 Comme nous Vavons vu précédemment, toutes les instructions sont codées sur 32 bits. est done nécessaire de cadrer sur 4 octets. Le mot clef .balign donne la valeur du cadrage en octets, on peut également utiliser le mot clef -aLign, qui prend en argument une puissance de 2 [ -align 2 | ACTUALITES Pour terminer V'en-téte, nous allons déclarer Ie label main comme global, pour qu'll soit reconnu par GCC comme le point entrée globl main Pour se simplifier un peu la vie, nous allons déclarer ‘quelques constantes, au moyen du mot clef .equ : GPIO_BASE, 0x10012000 GPIO_OUTPUT_VALUE, 0x00c RED, 1<<22 GREEN, 1<<19 BLUE, 1<<21 LEDCONFIG, (RED | GREEN | BLUE) LEDCOLOR, ~GREEN ONGWAIT, 5000000 ‘SHORTWAIT, 1000000 $328 283 22 La LED RGB (rouge, vert, bleu) est vue par le microcontroleur comme trois LED connectées sur des GPIO. Le port de GPIO du F310 peut étre vu comme un registre de 32 bits, avec une GPIO pour chaque bit, Sur le HiFive1, nous avons la LED verte sur le bit 19, rouge sur le bit 22 et bleue sur le it 21 Le point d’entrée du programme est done indiqué parle label main, Nous allons commencer par écrire quelques constantes glo- bales dans les registres $1-3, prévus a cet effet dans V'ABI, qui nous seront utiles parla suite 14 si, GPIO_OUTPUT + GPIO_BASE i s2, GPIO_OUTPUT_VALUE + GPIO_BASE i s3, LEDCONFIG Puis, nous appelons la « fonction » permettant de configurer les trois GPIO des LED en sortie ~ A8 | wecxaste nonce w3t Corte instruction prend le registre d'adresses de retour en argument, ainsi que offset vers lequel il faut transférer le flux d'exécution, Nous utiisons ici le nom ra correspondant & x1 dans ABI standard, Dans la fonction Ledconfig, nous allons commencer par réserver 16 octets dans la pile: addi sp, sp, -16 ‘pour sauvegarder adresse deretour: Nous sauvegardons Padresse de retour a offset 12, de maniére a garder dela place pour d’autres arguments ou valeurs, si besoin. utilisation de la pile ici rest que peu utile, puisque nous n’appelons pas de fonc- tions dans cette fonction. Nous pourrions tout-i-fait nous fen passer dans ce cas précis, mais y penser est une bonne habitude, au cas oli nous aurions besoin d’appeler une sous-fonction. Seuls 3 bits du registre de sortie des GPIO doivent étre modifiés, nous devons done commencer par lire sa valeur : iw t0, 0(s1) Pour ensuite mettre a 1 les trois bits concernés, au moyen dun or et réécrire le registre wow.ed-diamond.com RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 Ce programme de clignotement de LED permet de montrer or t0, 53, t0 concrétement ce qu’est un programme écrit en assembleur sw t0, 0(81) RISCY, Il peut étre largement amélioré. On laissera en exercice au lecteur le soin de Yoptimiser, par exemple en fusionnant les Puis,on dépile Vadresse de deux fonctions setColor et of fled. Ou en réduisant, voire en etour, avant de retourner au —_supprimant Futilisation de la pile, flux d’exécution principal : Liidée était surtout d'avoir un exemple concret mettant en. ceuvre un vrai processeur physique, pour sortir dela théorie et audi ops gen des simulations. addi sp, sp, 16 ret lapseudodnstructon ret 7, EMULATION/FPGA permet de faire un retour au flux d'exécution principal. existe de nombreux simulateurs permettant de se faire Cette pseudo.instruction est un Ja main avec RISC-V. Ces simulateurs émulent généralement raccourci pour : Je fonctionnement du jeu dinstructions seul, Cela permet de Siaffranchir de 'implémentation et d’accélérer P’émulation. développer 'ISA est Spike [5]. Il permet d'exécuter pas-ai-pas La suite du programme les instructions sur un processeur virtuel, muni de plusieurs est une boucle infinte, appe- ccoeurs en paralléle. On peut y brancher son outil de dévermi- lantalternativement les fonc- page GDB préféré. tions permettant allumer et d’éteindre la LED et la fonc- Léémulateur Qemu est déja bien connu dans le monde du tion d'attente. Ces fonctions Libre et au-dela. Une architecture a base de cceurs rv64 et prennent un argument au 1v32 de chez Sifive a été intégrée au logiciel [6]. Cette archi- ‘moyen du registre af, préva tecture a permis de faire le portage de RISCV pour Linux 5.0. pour cela dans PABI, Plusieurs distributions Linux ont également pu commencer Lafonction attente initia. __‘i6aation de Varchitecture, grace a cet émulateur. lise le registre temporaire t0 Chose étonnante, sous Linux, il est également possible de al: faire tourner son binaire RISCV sur un pe x86, grace & linter- face du noyau nommée binfmt_mise et le moteur rv8 [7] addi 0, x0, 1 ‘Tous ces émulateurs fonctionnent au niveau du jeu d'ins- tructions. Mais il est également possible de simuler le fone- Puis,l'inerémente en boucle, _tjonnement du processeur complet, & partir du moment oi tant que t0 est inférieur a la Yon a accés au code source matériel (Hardware Description valeur donnée en argument a9: Language). Cest notamment le cas des nombreux « softcore » disponibles pour FPGA. waitloop: ; nae a La société Microsemi (appartenant & Microchip) propose bltu t0, a0, ailleurs tout un environnement de développement nommé waitloop Mi, pour utiliser des processeurs RISCV dans ses FPGA (pour PolarFire, RTG4 et Igloo2). wow nackabl HACKABLE MAGAZINE N31] 19 <> Fig.10:Schéma-btoc | | de fonctionnement pparation chez eFabless. FE3106-0000 ACTUALITES Les caeurs développés par la société SiFive sont synthéti- sables pour la plupart sur FPGA, histoire de pouvoir tester leurs processeurs en avance de phase. Ils utilisent ailleurs tun nouveau langage de description open source nommé Chisel pour décrire leurs processeurs, Ce langage basé sur Seala permet une meilleure réutilisation du code, grace a un langage-objet et fonctionnel. Le source reste synthétisable, car le format de sortie est du Verilog. Le Picorv32 est intéressant, car optimisé pour avoir une taille minimale, ce processeur initialement destiné aux FPGA a 6t6 utilisé par Tim Edwards, pour démontrer qu'il est pos- sible de réaliser un composant en silicium au moyen outils ‘open source. I pour cela produit un processeur nommmé RAVEN. Une présérie du Raven, cadencé a 150 MHz et gravé en 180 nm, a déja été produite en 2018 et une série est en pré- Enfin, pour finir ce rapide tour des processeurs « softcore » sur FPGA, n’oublions pas de citer le VexRiscv [8], développé ppar Charles Papon et qui a gagné le concours organisé par la fondation RISCV. Lobjectif du concours était de développer ‘un processeur RV32I& destination d'un FPGA, en utilisant le | moins de ressources possibles, ‘mais qui soit tout de méme rapide. ‘originalité de ce pro- cesseur est d’étre développé avec un nouveau langage de description matériel, développé par auteur: SpinalHDL [9] Ce langage est également hasé sur leScala. 8. LES SILICIUMS Luniversité de Berkeley a deja produit plus dune dizaine de variantes de processeurs RISC-Y, Mais ces siliciums sont principalement des proto- types de recherche. De méme, beaucoup de laboratoires de recherche, comme le SHAKTI de institut de Technologie de Soca Te PRN SE Pant es ite 3 ‘du E310, consticuant a carte HiFivel ~ 2 HACKABLE MAGAZINE N‘31 ee fl as E eae amar ta tao i] al — a RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 ‘Madras en Inde [10] ou le projet PULP de université de Zurich [11], se basent désormais sur cette ISA pour leurs processeurs. En matiére de production de ccomposants réels, les choses ont commencé & bouger en 2017, avec la sortie du premier processeur RISC vraiment accessible au « grand-public »: le £310, produit parla société SiFive. SiFive est une société sans fabrication (fabless company), dont les fondateurs sont issus de Vuniversité de Berkeley. SiFive ne pouvait rester crédible, sans sortir un premier processeur physique sur ses propres fonds. Ce quelle a fait avec le E310, d'autres, sociétés ont ensuite emboité le pas, avec le Kendryte £210 d'une société chinoise et Ie RV32MI, de NXP. Les siliciums qui nous inté- rressent ici sont ceux que nous pou- vvons nous procurer, méme sile prix rest pas toujours tout & fait abordable pour bricoler dans son garage. Voici done une petite liste de processeurs/microcontréleurs RISCV en silicium, déja accessibles aujourd'hui 8.1 E310: le processeur « Compatible arduino » ‘Le E310 est un microcontrdleur € conur RV32IMAC, gravé en 180 nm, et pouvant etre cadeneé & 320 MHz ‘maximum, Le composant, présenté cen figure 10, posséde une seconde horloge permettant de cadencer un ‘mode basse consommation, pour wow nackabl faire fonctionner les périphériques se trouvant dans le domaine AOD (always on domain) pour permettre le fone- tlonnement de V'horloge, du watchdog et la sauvegarde de certains registres. SiFive propose un kit de développement basé sur le stan- dard Arduino pour s’y initier, comme nous avons pu le tes- ter dans le programme d'exemple, La carte siintégre trés bien IDE Arduino & partir dela version 1.85, il suffit q'ajouter URL : httpz/istatie. devsifive.com/bsp/arduino(package sifive_index.json dans les préférences de l'interface:« file», « preferences », « Additional Boards Managers URLS ». Puls, de se rendre dans le board manager :« Tools », « Board», « Boards Manager », pour y installer la carte Hifivel, Il faut ensuite sélectionner « Sifive open cd » comme programmeur dans le menu « Toots », « Programmer: ». Lutilisation de IIDE d’Arduino est parfaite pour pouvoir jouer avec son cadeau, dés réception du colis. Les puristes préféreront passer assez vite & un langage plus « pro ». est également possible de se procurer le processeur nu. (258 les 5), pour se faire sa propre carte électronique. Une nouvelle version, le HiFive1 Rev. B, est sortie en 2019, avec Vajout d'un module Wi-Fi/Bluetooth a la carte de développement. 8.2 US40 : le premier processeur pour Linux Le U540 peut étre considéré comme le premier micropro- cesseur physique permettant de faire fonctionner Linux. Cest un quad-cceur RVG4GC, muni d'un « compagnon » RVG4IMAC (nommé F51). Le schéma-bloc du processeur est donné figure 11, page suivante. Gravés en 28 nm, les caeurs peuvent étre cadencés jusqu’a 1.5 GHz, Le kit de développement est proposé sous la forme d'une carte nommée HiFive Unleashed. Le tarif de 1000 $ en fait un kit plus destiné aux bureaux d'études qu’aux particu- liers, mais l évite Putilisation de FPGA et permet donc une utilisation en pleine puissance. HACKABLE MAGAZINE N‘31 21 00 ACTUALITES ‘DOR: / DORAL / DORE ConrolePHY eel 3 Seopa] | pater ; ae # Ticaeo— [Wace tr ue mise] | ae “ta Caren ana 6 sPi2 } rc Barked 28 4 oa a aa i ‘0. ‘Gock Generaion ‘loess Con Fig. 11: Schéma-bloc du processeur US40, constituant de la carte HiFive Unleashed. | on {we va nev || use || —— a ne 7 [ime rm ||| ir rs 5 a mm oat estrtor = m= i Feat me nea eonrosnts eee: | bloc du K210 L —_ ae ete CY 22 | HackapLe macazine nist 8.3 Kendryte K210: Vintelligence artificielle embarquée Le K210 est produit par une société chinoise. Gravé en 28 nm, ILest composé d'un, double coeur RV6AGC, cadencé 400 MHz, Le composant (figure 12) posséde tout ce qui faut pour faire du traitement de signal audio et vidéo, ainsi qu'un coprocesseur de réseau de Plusieurs kits intégrant le processeur sont disponibles & Ja vente, La plupart de ces kits, utilisent un module intégré nommeé SiPeed MAW permet- tant ajouter le Wi-Fi, comme nous pouvons le voir sur la photo de la figure 13. 8.4 RV32M1: le Wi-Fi Bluetooth avec multicceurs hétérogénes Le RV32M1 a été lancé par NXP, pour équiper la carte VegaBoard. Cette carte est dis- ponible & la vente pour une soixantaine de dollars, Ce microcontréleur est un fovni dans le monde de'embar- qué. Il posséde 4 coeurs de pro- cesseurs hétérogénes, puisquil mixe des caeurs ARM (un cor tex-MO et un cortex M4) et dewx RISC-V (RISCY et RISCY), RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 Le développement de cette carte est la pierre angulaire d'un projet nommé OpeniSAa (Figure 14, page suivante). 8.5 GAPS: le parallélisme embarqué Produit par GreenWaves Technologies, le GAPS est un microcontroleur massivement paralléle, muni de 8 cceurs RISCY (RV32IMFCXpulp). Le GAPS est tune mise en application de Yar: chitecture PULP, de Puniversité de Zurich. Cette architecture vise la tres basse consommation dans les microcontroleurs embarqués (Figure 15, page suivante). est possible de se procurer ‘un kit de développement compa ‘uble Arduino (GAPUINO) pour une centaine d’euros sur le site de GreenWaves Technologies (https:/ greenwaves-technologies.com). 8.6 RAVEN : open source jusqu’au bout du silicium Le RAVEN est un peu spécial, car il nexiste pas encore de kit de développement ni de possi- Dilité de se procurer le compo- sant, a Theure ot ces lignes sont écrites Cependant, ce microcontréleur est remarquable dans la mesure co ila été congu intégralement avec des logiciels au code ouvert. est muni d'un coeur RV32E wow nackabl eer ear (Sdicio ar thsin Cay) fe Ee is nommé Pieorv32, cadencé a 100 Miiz avec une promesse de ‘monter & 150 MHz. Il posséde ‘un convertisseur analogique numérique, ainsi que numé- rique analogique et est gravé en 180 nm, La version « virtuelle » est disponible, sans coat de licence, sur la plateforme eFabless (Figure 16, page 25). HACKABLE MAGAZINE N'31| 23 AO ACTUALITES Arduino R3 & Open-isa wo fiterens) Peers Fig. 4 La VegaBoard permettant de faire du multicarur hétérogene, avec tout Vétage radio 2.4 Gi [— FC clock & voltage domain ‘Cluster clock & voltage domain Crd ee fy reer Fig.15. Schéma-bloc donnant architecture du GAPS. CY 26 | HackapLe macazine nest wow.ed-diamond.com RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 Raven RISC-V 32RVI core Dac. ores 8.7 GD32VF103 : le microcontréleur généraliste a bas coat Produit par la société chinoise GigaDevice, le GD32VF est une déclinaison RV32IMA de leur microcontrbleur GD32F, basée initialement sur un cceur ARM Cortex-M3, Cadencé & 108 MHz, ce microcontréleur embarque jusqu’a 128 Ko de flash et 32 Ko de mémoire vive. wow nackabl Fig. 16: Schéma-bloc du RAVEN, un mlcrocontrOleur congu exclusivement Suivant le modéle utilisé, le ‘avec des logiciels tires. GD32VF propose les périphé- rriques suivants : SPI, PC, USART, deux ADC 12-Bit & IMsps, deux DAC 12-Bit, ainsi que deux bus CAN et un port USB. Plusieurs kits de dévelop- pement sont disponibles pour tester le composant, mais le Longan Nano proposé par la société Sipeed marque les esprits, avec son prix de 5 $ pour un kit {incluant un éeran LCD (Figure 17, page suivante). HACKABLE MAGAZINE N'31| 25 <5. ACTUALITES Nano, proposé 4,98 sur lesitede vente en ligne 9. CECI N’EST PAS QU'UNE EVOLUTION TECHNOLOGIQUE, MAIS UNE REVOLUTION INDUSTRIELLE Le RISC-V est un nouveau jeu d’instructions, ce ‘qui rétait pas arrivé depuis un certain temps. Les, jeux d'instructions actuels sont surtout des évolu- tions de jeux d'instructions des années 70-80. Cette ‘nouveauté a permis aux concepteurs d'apprendre des erreurs des autres, ainsi que de récupérer les bonnes idées. RISC-V rrest pas révolutionnaire par les concepts appliqués, cest surtout une évolution. Beaucoup de concepts (le registre cablé & 0, par HACKABLE MAGAZINE N‘31 exemple) rappellent ceux du MIPS. Le standard RISC per- ‘met d’ajouter ses propres ins. tructions personnalisées, en plus du standard (ce que faitle RISCY, par exemple). Cependant, RISCV est une révolution industrielle, car est un jeu dinstructions libre, Nimporte quel industriel peut s’en servir pour faire son microprocesseur. Le nombre de grands noms de l'industrie lectronique et informatique qui font partie de la fondation RISC-V peut nous mettre en confiance sur sa pérennité et Lalicence du jeu d’ins- tructions est de type BSD (quelle surprise pour une ISA venant de Berkeley 1), ce qui signifie qu’elle n'est pas « contaminante ». Test pos- sible de reprendre le jew instructions tel quel et de garder son architecture de processeur jalousement fermée, il est également pos- sible deétendre sans rien publier, Cette «non contami- nation » rassure beaucoup les industriels et assure un certain essor pour cette ISA. La fondation RISC a tout dde meme mis en place un sys- teme de numérotation avec Videntifiant des construe- tours (dans les registres CSR), comme on peut le trouver sur VUSB ou sur ’Ethernet avec les adresses MAC. SiT'on veut référencer son processeur et wow.ed-diamond.com RISC-V (> Laliberté jusqu’au ceur du processeur avec RISCV 5 avoir un identifiant construc ‘eur, il faut done payer sa dime a la fondation. Le monde du microcon- troleur commence a etre bousculé par Varrivée de cette ISA. La société ARM, qui écrasait le marché du microprocesseur embar- «qué, prend ce petit nouveau tres au sérieux. MIPS a également bougé, avec son annonce fracassante dela Libération de son ISA sur le modele RISCY. Seul Intel n'a pas encore vraiment bouge. Cela est principalement da au fait quill ny ait pas encore de processeur RISC rivalisant avec les performances des x86, Les extensions du jeu instructions permettant de rivaliser avec ceuscci ne sont pas encore stabilisées et la finesse de gravure de ce genre de processeur nécessitant des investissements tres Iourds, personne ne s'est encore post tionné dessus, Un standard libre et stable comme RISC permet égale- ‘ment une simplification des logiciels de compilation, puis des systémes d’exploitation. Linux supporte déja IISA RISC dans son dernier ker- nel 5.0, Tous les logiciels de compi- lation, qu’ils soient libres ou propriétaires, se sont lancés dans le portage de leurs outils pour RISCV. GCC est déja wow nackabl ‘mature, LVM ne va pas tarder. Ft beaucoup d'0S temps- réel comme Zephyr, FreeRTOS... sont déja bien avancés sur le sujet. RISC est une révolution™, le marché des processeurs du futur devra composer avec cette ISA. MEET REFERENCES [1] PRADOS Philippe, « Au Coeur des ‘icroprocesseurs », GNU/Linux Magazine n°218, septembre 2018, pp. 66 3 81 [2] PATTERSON David et WATERMAN Andrew, «The RISC-V Reader, An Open Architecture Atlas », Strawberry Canyon LLC. [3] Andrew Waterman, Krste Asanovié, « The RISC-V Instruction Set Manual - Volume HI Privileged Architecture », SiFive Ine. [Al SiFive HiFiver Getting Started Guide « SiFive HiFivel Getting Started Guide », https:/wwwsifive.com/documentation [5] Spike RISCV ISA Simulator, ttps://github.com/riscvjriscv-isa-sim [6] RISC with QEMU, https:/wiki.gemu.org) Documentation/Platforms/RISCV [7] Michael Clark, Bruce Hoult, « rv8 : a high performance RISC-V to x86 binary translator », CARRV 2017, octobre 2017, Boston, MA, USA. [8] Charles Papon, « VexRiscv », ‘ttps://github.com/SpinalMDL/VexRiscv [9] Charles Papon, « SpinalHIDL », ttps://github.com/SpinalHDL/SpinalHDL. [10] SHAKTI, IT de Madras, http:/shakti.org.in [11] Paraltel Ultra Low Power, ttp:/iis-projects.ee.ethz.ch/index.php/PULP [12] Spécification RISCV ttps:/friscv.org/specifications/ HACKABLE MAGAZINE N‘31 27 00 | ARDUINO & MICROCONTROLEURS CAPTEUR AUTONOME ESP8266 : PROBLEMES ET EVOLUTION Denis Bodor Dans le numéro 29, nous avons étudié, assemblé et programmé une sonde de température ne nécessitant pas d’infrastructure complémentaire pour fonctionner, puisqu’elle stockait les données en interne et se chargeait elle-méme de ’affichage, sous la forme d’un graphique web. L'un des montages ayant servi de base pour article a fonctionné depuis lors, sur un coin de mon bureau, cumulant les mesures et répondant toujours & Pappel. Et puis un beau jour... c’est le drame ! CY 28 | HackasLe macazine nist wo sonde autonome > Capteur autonome ESP8266 ; problemes et évolution 5 ut fonctionne toujours parfai- tement, jusqu'au moment oi ¢a ne marche plus (vérité de La Palice, version 2.0). Lorsque ceci arrive, cela peut étre du fait d'un bug, d'un oubli, de occurrence une situation qu'on avait jugée improbable ou impos- sible (certains ont perdu des fusées ainsi, *tousse* Ariane 5 “tousse*), un probleme maté- riel ou tout simplement, d'une raison qui restera & jamais, ‘un mystére, Dans le cas de Ja fameuse sonde autonome, Vorigine du probleme est une combinaison savante des deux derniéres possiilités En effet, bien que le symp- tome basique était Vaffichage d'une page web vide, une investigation plus poussée in¢ quait quune partie de la page fonctionnait sans probleme, ‘mais que les données issues d'un fichier CSV, stockées en SPIFFS, étaient tout simple- ‘ment devenues inaccessibles, as excessivement frustrant, le fichier data. csv était le seul a rencontrer le probléme, tous les autres éléments de la page, HTMLet JavaScript, également stockés & la racine SPIFFS, étaient parfaitement lisibles. Pire encore, le fichier semblait bien 18, affichant une taille de quelques 149000 octets, mais, sa lecture, méme en dehors de intervention du serveur HTTP, ne retournait que des erreurs. wow nackabl ‘ul doute done qu'il s‘agissait clairement d’un probleme de corruption des données SPIFSS, en lien avec 'écriture dans Ie fichier. Cest la une situation que je ne suis malheureusement pas le seul 8 avoir rencontré, bon nombre de messages dans les Forums ou de tickets sur GitHub témoignent d’exactement le ‘méme probléme. Le plus frustrant dans cette affaire n'est pas simplement la perte de données (quelque 3 mois de mesures de température, d’hygrométrie et de pression atmosphérique), mais le fait qu'on se sente totalement démuni devant ce type de situa- tion. Bien str, ai envisagé la possibilité de retirer le blindage métallique du module Wemnos D1 mini, afin de dessouder: PROM SPI et daccéder directement a son contenu, mais Veffort était clairement disproportionné, par rapport & la valeur réelle des données. Non, en réalité, le probleme avait une tout autre utilité: servir de lecon. La fonctionnalité SPIFFS des ESP8266 est absolument fantas- tigue,certes, mais en cas de probleme d’écriture depuis le cro- quis, iln'y a aucune solution de correction simple. Le systeme de fichiers est totalement abscons, spécifique & la plateforme cet impossible a traiter avec des outils classiques, comme ceux qu'on trouve sous GNU/Linux (Je fantastique PhotoRec, par exemple). Les données SPIFFS ne sont finalement accessibles {que par le croquis ou éventuellement via esptool..py, util intégré au support ESPS8266 pour I IDE Arduino. 11 est possible utiliser esptool. py pour récupérer une image de la zone SPIFES et mkspif fs ('outil pour créer le systéme de fichiers) afin de désempaqueter son contenu, mais ceci n'est ni souple utilisation ni d'un grand intérér,sile systéme de fichier est effectivement corrompu. Idéalement, pour se ménager une foule options, ce quill faudrait, c'est pouvoir prendre le support et le lire comme une clé USB ou... une carte SD. Voici précisément objet de cet article : profiter du probleme our revoir notre copie, jongler entre microSD et SPIFFS et par Ja méme occasion, améliorer quelques points concernant le concept initial 1. MELANGE SPIFFS ET SD Afin de disposer d'un support amovible contenant toutes ‘nos mesures, la solution la plus simple est de stocker le fichier data. csv sur une carte microSD. Un tel support s'interface trés facilement en SPI et 'ESP8266, par Fintermédiaire d'un ‘module se limitant & un emplacement adapté & la carte et a un HACKABLE MAGAZINE N‘31 29 00 Sur ce graphique présentant les relevés Sur plus d'un mois avee tune période horaire, on volt clairement quela densité de données est Dien trop importante, m seulement Vaffichage dans te rnavigateur est d'une lenteur affligeance mais le résultat est presque ilisible. 1! dott yavolr une meilleure Jason de faire. ARDUINO & MICROCONTROLEURS ‘régulateur de tension, pourra alors accéder au contenu de la carte, formatée en FAT16/32 (et non exFAT ou NTFS), Ceci nous permetira de trés simplement extraire la carte pour récupérer les données, que ce soit pour une sauvegarde, une analyse ou la correction d'une erreur. Ce dernier point sera un bonus, car il m’est arrive & plusieurs reprises de voir apparaitre dans data.csv des dates rela vvement fantaisistes, du fait d'un probleme avec la rrécupération des informations en NTP. Probleme ‘que nous corrigerons également, dans la suite de article, Cependant, lorsqu’on ajoute de la simplicité un cote, cect est automatiquement compensé par ‘davantage de complexité par ailleurs. 11 suffit de se poser de simples questions : que se passera-til sila carte n’est pas dans son emplacement, lorsqu’une écriture sera tentée ? Est-ce raisonnable de retirer ‘une carte initialisée ? Comment dire au montage que la carte est & nouveau présente ? Le nombre de GPIO est for- tement limité sur une carte ESP8266 comme le Wemos D1 ‘mini, mais nous pouvons tout dde méme trouver une solution. Le capteur environnemental BME280 interfacé en i2c uti- lise les broches D1 (SCI) et D2 (SDA), Vinterface avec la carte microSD repose sur une liai- son SPI utilisant D6 (MISO), D7 (MOSD, DS ($CK) et DB (Ss) et enfin, D4 est connecté a la LED bleue présente sur le module. Sion ajoute & cela que D3 est GPIOO et que cette broche est utilisée durant le démarrage et Ja programmation, il ne nous reste finalement plus que DO pour éventuellement placer un interrupteur, nous permettant de désactiver/activer Pacces > 30 | HackasLe macazine nist sonde autonome > Capteur autonome ESP8266 ; problemes et évolution 5 Ja microSD. I faut cependant faire attention ‘une petite subtilité, car cette broche est sensiblement différente des autres, offrant la possibilité d'activer une résistance de rap- pel la tension dalimentation (Pull-up). DO peut également se voir configurée avec une telle résistance, mais elle est connectée ala ‘masse (Pull-down). IL faudra done utiliser pinMode(D0, INPUT_PULLDOWN_16) dans Ja fonction setup() pour Factiver (et non pinMode(D0, INPUT_PULLUP)) et connec- ter linterrupteur entre la broche et VCC (et, non la masse). A présent, nous avons un moyen de déter- ‘miner sile croquis doit ou ne doit pas uti- liser le support et nous devons modifier le croquis en conséquence. Notre logique sera lasuivante: + réguliévement dans Loop(), nous allons tester utiisabilité dela carte SD, en lisant état de la broche D3 ; Bae lesimple croquls binalre. Ony ‘le serveur HTTP embarqué ne fonctionnera que sila carte est Hclesapib hai secon accesible: Traionaetettereoaeta stosenregistrements auront eu que sa cartes usable; (Srtireen erie cinens, + et nous utilisons la LED intégrée au module pour signaler sila carte oo peut étre retirée (LED éteinte) ou non (LED allumée). initialisation SD s'intégrera dans setup() trés simplement avec Af (18D.begin(D8)) { Serial.printin("Erreur initialisation sD !"); } else { Serial.printin("tnitialisation SD OK." digitalWrite(LED BUILTIN, Low); ? aprés avoir inclus les fichiers/bibliothéques SPI.h et $D.h en début de script, bien entendu. Puis, nous changeons sensiblement la fagon dont le fichier data. csv est fourni parle serveur HTTP. Notez que nous n’avons aucune raison de sortir les autres fichiers de la mémoire SPIFFS. Non seulement, il ne s'agit pas de données sensibles, mais de plus elles ne sont accédées qu'en lecture, opération qui n'a jamais posé de probleme. wow nackabl HACKABLE MAGAZINE N31] 31 >. | ARDUINO & MICROCONTROLEURS ‘Un module permettant ‘deconnecter une carte microSD (ou 'SD) un montage de type Arduino est relativement simple un emplacement pour le ‘support de stockage, un ‘régulateur de tension, tun circuit intégré permettant d'ajuster les niveaus de tension et quelques composants passifs. Economique cet relativement fiable, est une solution de stockage souple et facile Les fichiers servis depuis SPIFFS se configurent ainsi dans setup (), avant le démarrage sur jerver.serveStatic("/", SPIFFS, "/index.html") server.servestatic("/index.html", SPIFFS, "/index.html"); J jerver.begin(); Pour des données provenant d'autres sources, comme la carte SD, il n’est pas possible (pour instant) @utiliser cette approche. Nous devons faire en sorte que Vacces a /data.csv soit tralté par une fonction dédie, ainsi /data.csv", HTTP GET, getdatacsv) ; nous suffit ensuite @'écrire getdatacsv() : void getdatacsv() { A £(SD.exists("/data.csv")) ( File £ = SD.open("/data.csv"); s£(t2) return; if(server.streamFile(f, "text/plain") != f.size()) ( She CY 32 | HackapLe macazine nist wow.ed-diamond.com sonde autonome > Capteur autonome ESP8266 ; problemes et évolution 5 Ce n’est pas tout. Servir le fichier qui se trouve sur la carte SD est une chose, mais encore faut- {il qu'll soit mis & jour avec de nouvelles mesures. Nous devons done réécrire une bonne partie de notre fonction adddata( ) void adddata() { if(sdinact) { Serial.printin("SD désactivée return; ) 7/ seulement si on a une sync NTP LE(NTP.getLastNTPSync()) { char strbuffer[64]; snprint£(strbuffer, 64, "\"%s\";%.26;%.2£;%.2£\n", NIP.getTimeDateString().c_str(), bme. readTemperature() , bme. readHumidity () , bme. readPressure () /100.0) ; Serial. printin(strbuffer) ; File £ = SD.open("/data.csv", FILE WRITE) ; se (8) Serial.printin("Erreur ouverture fichier !"); ) else { £.print (strbuffer) ; £.close() ; sdinact est une variable globale mise a jour par ailleurs, servant a indiquer si la carte SD est inactive, i tel est le cas, aucun enregistrement ne sera effectué. Le traitement des chaines de carac- tres est identique au précédent croquis, mais la méthode de stockage (ouverture et écriture) est légérement différente, du fait qu’on passe de SPIFFS & la SD. Notez une autre modification, via une condition reposant sur NTP. getLastNTPSync(). Cette fonction nous permet de vérifier, dans une certaine mesure, que la synchronisation NTP a bien eu lieu et que Vheure que nous allons lire est {rés certainement valide et utilisable. Bien entendu, en remplagant Paces NTP par une RTC (type 'DS1337 ou DS3231) en i2c, le probleme ne se poserait pas, ine nous reste plus qu’a écrire la fonction qui sera chargée de mettre a jour sdinact et de réagir un changement d’état sur la broche D3 (alias la macro WRITEPIN) : void testspu() ( if (digitalRead(WRITEPIN) '= sdinact) { sdinact=digi talRead (WRITEPIN) ; if(sdinact) { server. stop(); SD.end() ; wow nackabl HACKABLE MAGAZINE N'31| 33 5. | ARDUINO & MICROCONTROLEURS igitalWrite(LED_BUILTIN, HIGH); Serial.println("SD & serveur inactifs"); } else { Af (18D.begin(D8)) ( Serial.printin("Erreur initialisation sD !"); } else { Serial.printin server.begin(); ‘Initialisation SD OK."); digitalWrite(LED_BUILTIN, Low); Serial.printin ‘SD & serveur actifs"); -Achaque fois que la fonction sera appelé,celle-civérfiera si état de D3 a changé et sitel este as, elle procédera aux actions adaptées (contrdle du serveur, iitialisation/arrét SD, controle de la LED). Cette fonction sera appelée la fin de setup(), mais également dans Loop (), en utlisant une condition reposant sur mitLis() et une nouvelle variable globale, previousMittissDU Af (currentMillis - previousMillissDU >: // test si SD est utilisable ou ina: testsDU() ; previousMillisSDU = currentMillis; ) A pprésent, dés que D3 est connecté a VCC, la carte peut étre retirée et dés que celle-i est réinsé- rée, il suflit de déconnecter D3, pour qu'elle soit & nouveau prise en charge. 2. AFFICHER PLUS DE DONNEES Puisque jen étais a revoir ma copie concernant ce projet et que utilisation d'une carte SD allait done apporter un minimum de sécurité, quant & 'intégrité des données enregistrées, il était égale- ment temps de régler un autre probléme. En effet, aprés plusieurs semaines de mesure et de collecte (avant donc que je ne perde tout) Vaffichage du graphique présentant plus de 400 points (argument maxn=490 dans I'URL) était trés difficilement lisible. En effet, non seulement Vatfichage et le rendu. était excessivement lent, mais la densité des informations et des points rendiit le tout assez pénible aire La solution classique pour ce genre de problématique est le ré-échantillonnage des données (downsampling) avec une approche simpliste consistant, par exemple, & tout simplement faire une ‘moyenne des valeurs sur une tranche de temps arbitrairement choisie (une journée, par exemple). Le probléme cependant est la perte de précision, en particulier pour les températures. La moyenne des températures relevées en 24 heures n’a que peu d'importance, sila nuit i fait 19° et 'aprés-mid 36", la journée passerait pour relativement tempérée, alors que la chaleur est étouffante (surtout en. CY 34 | HackapLe macazine nist wow.ed-diamond.com sonde autonome > Capteur autonome ESP8266 ; problemes et évolution AD Alsace). De plus, leré-échantillonnage rest pas une technique simple, si Yon sou- haite Vappliquer correctement et ceci risque de massivement surcharger le code JavaScript. Une autre approche, celle pour laquelle fai opté, nécessite moins de code et donne un résultat plus pertinent : tracer les minimales et maximales pour une période donnée (une journée, encore une fois). Ainsi, grace & Charts, nous obtiendrons 6 courbes (température min et max, hygrométrie min et max, pres- sion min et max) avec un remplissage entre chaque paire. Le méme jeu de don- nées sera utilisé etilne sera pas nécessaire de changer le code qui collecte les ‘mesures nile format du fichier data..csv. Mieux encore, nous pouvons conserver le contenu de index.html et tout simplement créer une nouvelle page pour ce nouveau rendu, indexninnax. html. Il nous suffira alors de modifier le croquis pour servir les nouveaux fichiers, ce qui se résume a deux lignes dans setup() ‘La sonde complete, construite ‘autour d'un capteur BME280, ‘est relativement simple, mais utilise toutes les Broches notre disposition sur VESP8266. Notez ecdble violet sur la gauche. St elute est connecté ata tension alimencation, cee signatera au ‘eroquis qu'il dott plus utiliser Tesupport de stockage amovible, ‘afin que Von pulsseretirer ta carteetenlirelecontenu sur PC. Hfaudra que je remplace ‘cela par un incerrupceur, dw HACKABLE MAGAZINE N'3i| 35 A. | ARDUINO & MICROCONTROLEURS mmovent. js est une bibliothéque JavaScript facltante traitement des dates et des chalnes de caractéres en relation. En effet, notre fichier contient des lignes quise présentent ainsi "11:48:56 05/07/2019" ;30.53;34.83;995.37.Le format dela date rest pas standard etl nest pas ques- tion de revenir sur ce qua déja été enregistré. Nous avons donc besoin de moment .js pour inter- préter ces dates, pour trouver les valeurs minimales et maximales d'une journée. Du fait que nous avons non plus 3, mais 6 courbes, il nous faut done autant de tableaux, plus celui pour les étiquettes du graphique. D’autre part, Ie format utilisé pour la date change, ‘puisque nous travaillons cette fois avec deux valeurs par jour, pour chaque type de données. Nos variables deviennent done See ea var timeFormat = 'DD/M#/YyYY'; eereprécis), mais ee gees (1 Aerey pour Le graphique ue densemble yar trés simple, avec var tune précision a var quotidienne. On les informations vraiment utiles, {forme bien plus isi. CY 36 | HackasLe macazine nist wow.ed-diamond.com sonde autonome > Capteur autonome ESP8266 ; problemes et évolution 5 Je passerai par la sulte grandement a c6té de Vaspect « configuration » du graphique, qui pourra {tre étudié par vos soins directement dans le fichier HTML. Concentrons-nous plutdt sur Papa Parse (la bibliothéque interprétant les données en CSV) et en particulier, sur la fonction dépi- lant les données, Celle-ci a été revue et ne se contente plus de lire les valeurs, les stocker dans les tableaux et d'écarter les plus anciennes. La variable jour a été déclarée et initialisée & 0 précédemment. Celle-ci est destinée & stocker Je numéro du jour dans mois, de la derniére ligne lue. De cette facon, nous avons un moyen de savoir si nous lisons toujours des données du méme jour que le précédent ou sil sagit d’un nou- vveau jour. Pour extraire le numéro du jour de la date qui se présente sous la forme d'une chaine de caractéres la premiére colonne de chaque ligne du fichier CSV, nous utlisons la bibli theque monent.. js step: function(row) { var mymoment = moment (row.data[0].label, "hh:mm:ss DD/s4/YYYY"); // Sommes-nous un jour différent ? Af (mymoment.get (‘date') '= jour) ( Lab. push (mymoment . format (timeFormat) ) ; //premiares valeurs on push tou ‘tempmin. push (row.data[0] . temp) ; ‘tempmax. push (row. data [0] . temp) hummin.push (row.data[0] .hum) ; hunmax. push (row.data[0] -hum) ; presmin.push (row.data[0] pression) ; presmax.push (row.data[0] pression) ; jour = mymoment.get (‘date') ; Comme jour est initialisé a 0, la premiére ligne CSV est forcément un nouveau jour et nous poussons dans les tableaux les valeurs, Cette premiere insertion de données pousse la méme valeur dans les tableaux sulfixés min et max. A ce stade, c'est Punique entrée du jour et la valeur est forcément celle maximum et minimum. Sinous sommes le méme jour en revanche, nous agissons de fagon différente ) else ( // Mane jovr. La nouvelle valeur est-elle un minimum ou maximum de 1a journée ? // On xemplace 1a ligne de l'array si c'est le cas 4 (parsePioa* (zow.data[0] temp) < parsefioat (tempmin[tempmin. length-11)) ( tenpmin.pop() tenpmin.push (row .data(0] .tenp) : , if(parseFloat (row.data[0].temp) > parseFloat (tempmax[tempmin.length-1])) { tempmax.pop() ; tempmax.push(row.data[0] . temp) ; ) Af (parsePloat (zow.data{0] .bun) < parseF oat (humninfhummin.length-1])) { hunain.pop()7 hunnin.push (row.data [0] -hum) ; ul wow nackabl HACKABLE MAGAZINE N'31| 37 <5. | ARDUINO & MICROCONTROLEURS if (parseFloat (row.data[0] hum) > parseFloat (hummax{hummin.length-1])) ( ‘unmax.pop() ; hunmax.push (row .data [0] .hum) ; t Af (parsePloat (zow.data(0] .pression) < parseF lost (presmin{presmin.length-1])) { presnin.pop(); presnin.push(row.data[0] .pression) , Af (parsePloat (zow.data[0] .preasion) > parseFloat (presmax{presmin.length-1])) { presnax.pop(); presnax.push(row.data[0] .pression) , , Iya certainement une plus jolie facon de faire et les développeurs web qui me lisent doivent étre entrain de hurler & la mort, mais voyez-vous, j'ai une excuse : je n’aime pas beaucoup JavaScript et son typage dynamique. Ici, nous comparons la nouvelle valeur & celle déja existante dans les tableaux, Sielle est inférieure a la valeur minimum, elle 1a remplace dans le tableau suffixé min, Si elle est supé- rieure, elle la remplace dans le tableau sulfixé max. Il ne nous reste plus ensuite qu’a traiter, comme dans la version précédente, le cas oli nous dépassons le nombre maximum d'entrées : // si on dépasse maxn on supprime 1a plus ancienne ligne if(lab.length > maxn) { lab. shift (); ‘tempmin. shift (); tempmax. shift () ; bummin. shift () : hummax. shift () ; presmin, shift (); presmax. shift (); i ie Ceci fait énormément d'opérations push(), pop() et shift() et nous traitons ainsi ensemble du fichier CSV pour n’en conserver qu'une partie, tout en modifiant en permanence le contenu des tableaux. Ily a done énarmément d’opportunité, pour qui voudrait optimiser ce code, et je Iui en laisse done gracieusement le plaisir. Le dernier point important de la page et du code JavaScript concerne la présentation des données. Nous avons 6 courbes & tracer et nous pouvons tout bonnement copier-coller la configuration des datasets existants pour doubler le tout, tout en modifiant les parties variables (Label, data, etc.) Ceci fonctionne trés bien, mais nous nous retrouvons simplement avec le double & !'écran, sans plus de fioritures, Une option cependant permet de tout changer et de rendre cela absolument magnifique (a mon 000). Pour 'heure, Yoption FilL: a été précisée comme false, mais il est possible d'utiliser une valeur absolue ou relative, Les datasets étant spécifiés dans un certain ordre, tenpmin, tempaax, hunnin, humnax, presmin et presmin, en précisant systématiquement fill: *-1' en guise d’option de chaque valeur max, nous demandons un remplissage jusqu’au jeu de données précédent dans le graphique. Ainsi, avec une simple option répétée trols fois, nous obtenons une bande, bornée par les CY 38 | HackasLe macazine nist wow.ed-diamond.com sonde autonome > Capteur autonome ESP8266 ; problemes et évolution AD courbes de valeurs minimales et maximales, pour chaque type d'information : eempéi ture, hygrométrie et pression, Ine suffit plus que d’ajou- ter indexminnax. html et moment. js (récupérés sur ‘etps:/momentjs.com)) en SPIFFS et reflasher le croquis, Te tout sans se soucier des don- rnées CSV qui sont sur la carte SD (un vrai bonheur), Le résultat ? Un graphique présentant, en un clin d'eil, fnaxn jours de mesures (30 par défaut et non plus 48) oi appa- raissent lisiblement les valeurs ‘minimales et maximales (voila qui me rappelle subitement ‘un morceau de Kraftwerld. On constate alors que les varia- tons de pression en une jour- née sont relativerent faibles et constantes, celles de tempé- rrature restent entre 1° et 6° (le ccapteur est dans un bureau avec une fenétre entre-ouverte en permanence), mais celles hygromeétrie relative peuvent changer gran- dement et de facon erratique (tantot 4% en une journée, tant6t 23 % deux jours aprés). 3. IL Y A TOUJOURS DE LA PLACE.. pour améliorer et optimiser le concept. Mais e pense que e ne reviendrai pas surle sujet dans Ie magazine, sauf st une avancée ‘majeure est accomplie (comme un fonctionne- ‘ment sur batterie avec une mise en sommeil) Ce type de projet est sans fin, il est toujours possible d'améliorer ou d'ajouter quelque chose, de multiplier les capteurs ou les repré sentations graphiques. Mais l'on se rend éga- ement compte que ESP8266, couplé & une exécution de code déporté dans un naviga- teur, peut faire bien plus de choses qu'on ne le suppose au départ. Qui sat, cela pourrait ‘méme me réconcilier avec JavaScript au fil du temps...ou pas, ME ‘Lenouveau graphique révile Péellement ses blenfalts dé lors qu'on traite de tongues périodes, commeici, du 184uin au 29 juillet de cette ‘année. Remarquez la seconde -moitié du graphique, en particulier au niveau des temperatures: une hausse constante et des écarts entre ‘maximum et minimum de Vordre du degré. La raison est route simple, Je nécals pas ‘au bureau et la fenetre état iferméejour et nut HACKABLE MAGAZINE N'3i| 39 A. ARDUINO & MICROCONTROLEURS CREER, ECRIRE, LIRE ET DECODER UNE IMAGE SPIFFS D’UN ESP8266 Denis Bodor Lespace de stockage SPIFFS des ESP8266 est trés pratique, mais il arrive tantét qu’on se retrouve dans une situation ot ’on souhaiterait vraiment récupérer les données stockées, sans avoir a bidouiller un croquis, au risque de faire une fausse manipulation et de tout perdre. Fort heureusement, le support ESP8266 (et ESP32) de l'environnement Arduino est composé d’un ensemble d’outils, qui peuvent étre utilisés individuellement. > 40 | Hackapte macazine nest wow.ed-diamond.com SPIFFS (> Créer, écrire, lire et décoder une image SPIFFS d'un ESP8266 A a fonctionnalité SPIFFS, pour « SPI Flash File System », est une solution permettant de stocker des données (et non des croquis compilés) dans la mémoire flash utilisée par un ESP8266. Cet espace peut alors étre accédé d'une facon similaire a un support, comme une carte SD. Mieux encore, Yenvironnement Arduino équipé du support ESP8266 permet de placer des fichiers dans un sous-répertoire data du répertoire, contenant le croquis, et son contenu sera alors automatiquement placé dans la flash, en SPIFTS, via un simple clic de souris dans un menu. SPIFFS n’est pas parfait et il arrive tantét qu'une corruption des données survienne, en particulier avec des gros fichiers (> 128 Ko) et en écriture (depuis le croquis). Il peut donc étre intéressant et utile de pouvoir comprendre les mécanismes qui dirigent la gestion de cet espace de stockage. Notre exploration commence ainsi parle fichier de description des différentes plateformes -ESP8266 supportées par IIDE Arduino. Lorsque vous utilsez le gestionnaire de cartes de IDE et ajoutez un support, plusieurs éléments sont téléchargés et installés sur votre machine, Parmi tous es fichiers, ilen est un qui résume les caractéristiques des différentes cartes prises en charge, Cest ‘ce méme fichier qui est utilisé pour vous permettre la sélection de la carte dans le menu « Outils », « Type de carte»; boards. txt. Dans Ie cas de ESP8266, celul-ci se trouve dans le sous-répertoire packages /esp8266/hardware/ esp8266/2.4.2/ de emplacement oi IDE stocke ses préférences (\Arduinol5\ ou \Documents\ ArduinoData\ sous Windows, ~/Library/Arduino15/ sous macOS et ~/.arduino15/ avec GNU/ Linux). En Vinspectant, on trouve des informations importantes concernant la gestion SPIFFS, carte par carte, Pour la Wemos D1 R2 et mini, par exemple, nous avons di_mini.name=LOLIN(WEMOS) D1 R2 & mini dl_mini build. board=ESP8266_WEMOS_D1MINI dl_mini build variant=di_mini to di_mini.menu.FlashSize.4MiM=-4M (1M SPIFFS) d1_mini menu. FlashSize.4MIM.build.flash_size=4M dl_mini menu.FlashSize. 4MIM. build. flash_size bytes=0x400000 di_mini menu.FlashSize.4MIM.build.flash_ld=eagle. flash. 4mim.1d dl_mini menu.FlashSize.4MIM.build.spiffe_pagesize=256 di_mini menu.FlashSize.4MiM.upload.maximum_size=1044464 d_mini menu. FlashSize. 4MIM.build.rfcal_addr=0x3FC000 di_mini menu FlashSize.4MiM. build. spiff: dl_mini menu.FlashSize.4MIM.build.spiffe_end=0x3FB000 di_mini menu. FlashSize.4MIM.build.spiffs blocksize=8192 d1_mini.menu.FlashSize.4M2M=4M (2M SPIFFS) di_mini menu.FlashSize.4M2M.build.flash_size=4m di_mini menu. FlashSize.4M2M.build.flash_size bytes=0x400000 di_mini menu. FlashSize.4M2M.build.flash_1d=eagle. flash. 4m2m.1d di_mini menu. FlashSize.4M2M.build.spiffs_pagesize=256 di_mini menu.FlashSize.4M2M.upload.maximum size=1044464 dl_mini menu. FlashSize.4M2M.build.rfcal_addr=0x3FC000 dl_mini menu. FlashSize. 4M2M. build. spiffs_start=0x200000 wou hackable.fe HACKABLE MAGAZINE N'3t| 41 AO LLorsqu’un ESP8266 est aefectuewx, mais quon ‘souhaite absolument rrécupérer ses données, faut forcement passer par Vétape du désoudage ‘du composant. En fonetion du matériel ucitisé, cect peut étre plus ‘ou moins délicat, mais lorsqwonen arrive & cestade, ta seule chose qui compte est de garder intacte la mémoire flash ‘et son contenu (mais pas nécessairement le rest) (Cela faclite un peu les choses. ARDUINO & MICROCONTROLEURS dl_mini.menu.FlashSize. d1_mini.menu dl_mini menu. dl_mini menu. FlashSize d1_mini.menu. d1_mini menu. dl_mini.menu.FlashSize ‘d1_mini menu, FlashSize. di_mini menu. FlashSize d1_mini.menu. d1_mini.menu. di_mini menu. FlashSize te 4M2M. build. spifts_end=0x3FB000 4M2M. build. spiffs_blocksize=8192 4M3M=4M (3M SPIFFS) 4MGM.build.flash_size=aM build. flash_size_bytes=0x400000 build. flash_ld-eagle. flash. 4m.1d 4MGM.build. spifts pagesize=256 4M3M.upload.maximum_size=1044464 4M3M.build.rfcal_addr=0x3FC000 build. spiffs_start=0x100000 build. spiffs_end=0x3FB000 4M3M. build spifts blocksize=8192 1 s'agit ni plus ni moins que des entrées correspondantes du menu et les paramétres qui leurs sont associés. Ainsi, concernant SPIFFS et en fonction de la taille souhaitée par Putilisa- eur, nous avons : +1 Mo avec spiffs_start=0x300000 et spiffs_end=0x3FB000, soit une taille de (0x0FB900 ou 1028096 octet ‘ms € eal CY 42 | Hackapte macazine nist wow.ed-diamond.com SPIFFS (> Créer, écrire, lire et décoder une image SPIFFS d'un ESP8266 A +2 Mo avee spiffs_ start=0x200000 et spif fs_end=0x3F0 soit une taille de Ox1FB 00 2076672 octets; +3.Mo avec spitts_ start=0x100000 et spif fs_end=0x3FB0 soit une taille de 0x26 ‘ou 3125248 octets. n voit également dans le fichier que se trouvent préci- sées la taille de pages (spiffs_ pagesize) eta taille de blocs (spiffs_bLocksize), respec- tivement a 256 et 8192 pour les trois configurations. Toutes ces informations nous sont utiles, Ja fois pour créer et flasher une image SPIFFS, mais également pour lire depuis la flash et désempaqueter une image. Et effectivement, lorsquon analyse 'exécution des com- ‘mandes permettant de créer cet charger une image SPIFFS, par exemple pour un Wemos D1 mini avec 1M de SPIFFS, a commande suivante est utilisée :mkspiffs - /chenin/vers/croquis/ data -p 256 -b 8192 -s 1028096 /tmp/chemin/vers/ image/croquis.spiffs. bin. On retrouve lila taille de ages (argument -p 256), la taille de blocs (-b 8192) eta taille de Vimage elle-méme (s 1028096). Cest ensuite le binaire esptool qui prend le relais pour flasher les données, tou- jours pour la méme configu wow nackabl ration, avecla commande esptool -cd nodencu -cb 921600 -cp /dev/ttyUSBO -ca 0x300000 -cf /tmp/chenin/vers/image/croquis.spiffs.bin. On retrouve en argument le nom du fichier image précé- demment généré, mais aussi 'adresse & partir de laquelle Yécriture aura lieu (-ca 0x300000). Naturellement, c'est Jaméme que celle spécifiée dans boards. txt. ‘Sinous voulons manuellement produire et inscrire une image SPIFFS en flash, il nous suffirait d'utiliser Ja méme commande, en variant les valeurs des argu- ‘ments en fonction de la taille de SPIFFS souhaitée. Ceci cependant ne présente pas grand intérét, puisque cela peut étre fait plus simplement depuis IIDE Arduino ‘nats information peut 6tre intéressante & avoir, Ie cas échéano). 1. PLUS INTERESSANT : LIRE LA FLASH ET DECODER SPIFFS Le binaire esptool livré avec le support ESP8266 pour VIDE Arduino ne semble pas permettre la lecture de la flash, mais uniquement son effacement et son écriture, Cependant, le support ESP32, lui, est livré avec un script Python chargé de faire exactement la méme chose et plus encore, tout en étant parfaitement compatible avec YESP8266. Ce script esptool.py est capable de lire et télé ‘charger la flash d’un ESP32 et d'un ESP8266, Pour extraire nos données, il nous suffit done d'utiliser ce script, en lew et place du binaire esptool. Notez que vous pouvez récupérer l'outil directement sur le GitHub des développeurs Espressif(httpss/github. com/espressifiesptool), mais a mon sens, ilest bien plus simple dinstaller le support ESP32 pour Arduino et done utiliser Ie script se trouvant dans le sous-répertoire packages /esp32/tools/esptool du répertoire des préférences de 'IDE Arduino, Bien entendu, la version disponible en ligne sera sans doute plus récente que celle intégrée a TIDE, Pour obtenir une image de la zone SPIFFS, il nous suffira alors d'invoquer le script avec les bons arguments. Ici pour lune image SPIFFS de 1 Mo, nous avons HACKABLE MAGAZINE N‘31 Pred ~“ Par ype mreSey Streit ST ipeee Le et se Sede eee eC eer PeeWee eerie yeats Pen ieles Comets ee RS aL Cement yc? Peter rene eed erent eure eC) erry reas) RCS) ORC Steere Ue er er ete) Hard resetting via RTS pin Loption -b précise la vitesse de communication, -p le port série & utiliser, read_flash esta commande de lecture pour lire la mémoire, 0x300000 est adresse de départ et 0x0fb000 la quan: tité de données lire. Le script produit, si tout se passe bien, le fichier précisé en dernier argument, spiffs. bin, Limmage obtenue, nous Putilisons avec mkspif fs (du support FSP32 ou ESP8266, peu importe) pour extraire les fichiers Pe ctea ie crtsy Per pest treo ST ipee on sts aed Aste Le ee eC este eens rye Sera are tae ase Beet Sie eevee Tere TE toe falerte.jpg Peay tra eee ere tee ee poten wey Een tesco nels Meee es Roses] Ee reste) Meee coed Loption -u demande le désempaquetage des donnéesifichiers, tout en précisant un répertoire de destination, et -p, -b et ~s sont les mémes options que celles utilisées pour la création de Vimage. Aprés lexécution de la commande, nous retrouvons dans /tmp/data l'ensemble des fichiers qui étaient présents en SPIFFS, y compris bien entendu ceux qui auraient pu étre générés ou remplis par le croquis exécuté par YESP8266, Ces deux commandes pourront étre utilisées séparément ou de concert pour extraire les données, mais également, éventuellement, pour sauvegarder réguliérement le contenu SPIFFS, Avec un peu ahabitude, ceci est a peine plus difficile que de récupérer des fichiers sur une carte SD. SPIFFS (> Créer, écrire, lire et décoder une image SPIFFS d'un ESP8266 A Pour ree contenu dun 2, POUSSONS LE BOUCHON UN PEU PLUS LOIN | ‘estututpraarins pare Récupérer et décoder une images SPIFFS comme nous venons de le faire pourra Palcntterininee tan0t vous sortir Cune impasse ou tout simplement, vous rendre lave plus facil. ees Mais cela suppose que YESP8266 fonctionne encore parfitement, puisque c'est rusaace. sera copelede Jui qui sert d'interface avec la flash SPI. Un module ESP8266 comme un Wemos 4 Se ere 1 min peut faclement éte endommagé, mécaniquement ou élecriquement. Si (aes eens 1a puce ESP5266 ou son circuit alimentation ne fonction pls, devient alors ‘VPRO. impossible de lui demander de nous fournir le contenu de tout ou partie dela flash SPI. La solution esptool py ne fonctionnera pas, HACKABLE MAGAZINE N'3i| 45 A. ARDUINO & MICROCONTROLEURS Lapince de test sores ‘est accessoireidéat pour relier te composant Imémoired un lecteur, ‘commele TL8G6CS. Ceet permet de connecter, Jacilement les minuscules broches & Vemplacement \dédié du programmeur, ‘quiest en DIP. Cetype de ince permet en principe Waccéder au composant falors quit est encore sur Te eireuit, mais dans notre cas, eprogrammeur ‘limenterait VESP#266 ‘tlereste du circuit, ce ‘qui interférerait avecta tecture Ceci ne veut pas dire pour autant que les données sotent irrécupérables ou ili sibles. En effet, a plupart des modules ESP8266 sont composés de la puce Espressif et d'une flash SPI distincte (contrairement & I'ESP8285) placées sous un blindage en rétal. Il est done physiquement possible de retirer le blindage et d'accéder directe- ment A la mémoire utilisée par le SoC. Une fois la mémoire flash dessoudée du sup- port, sicelle-ci est toujours fonctionnelle, on pourra utiliser un montage dédié ou ‘out simplement un programmeur d'EEPROM, comme le TL866CS dont nous avons parlé dans le numéro 17, pour produire une image de son contenu. Liopération est Aélicate, mais parfaitement réalisable, en particulier en utilisant une pince de test [pour circuit intégré au format SOIC. Notez que laccés au composant directement sur le circuit ne fonctionne pas, en raison des connexions avec I'ESP8266 qui inter- ferent dans la communication avec le programmeur TL866CS. Il est done impératif de dessouder le composant ou, au minimum, de couper quelques connexions sur le circuit, pour le désolidariser de VESP8266 et du circuit d’alimentation. Une fois le composant détaché du circuit, il conviendra de Videntifier afin de pouvoir le ire. Dans le cas des expérimentations pour cet article, le module Wemos D1 mini de test était équipé d'une flash 32Mb fabriquée par XMC, dont il n’a pas é possible de retrouver la documentation. Cependant, la plupart de ces mémoires sont compatibles entre elles dans une certaine mesure et ila alors suffi de spéci- fler un modele approchant de chez Winbond pour procéder a la lecture avec routil ‘minipro sous GNU/Linux CY 46 | Hackapie macazine nist wow.ed-diamond.com SPIFFS (> Créer, écrire, lire et décoder une image SPIFFS d'un ESP8266 A Pers etre eS aN PON si cE a eT) Co reece Sic Ceres rote) reer Crain’ Notez que I'utilitairesignale le probleme en précisant que le composant devrait étre identifié avec Ja valeur 0xEF4016, mais que celui utilisé est 0204016. Lioption -y permet précisément de passer outre cet avertissement. L’opération est relativement lente (plus de 40 secondes), mais nous obtenons au final un fichier flash bin correspondant a ensemble du contenu de la flash (croquis, SPIFFS, zone OTA, EEPROM émulée, configuration Wi-Fi. Pour récupérer nos données, nous devons alors séparer la partie SPIFTS de Yensemble et l'une des solutions possible sous Linux consiste a tout simplement utiliser Vout dd ‘Nous précisons le fichier en entrée (if) ainsi qu’en sortie (of), la taille des éléments que nous spé- cifions (bs), le nombre d’éléments a sauter en début de lecture, qui correspond a adresse du début de la zone SPIFTS et enfin, le nombre d’éléments a copier, qui est la taille du systéme de fichiers. Ces deux valeurs sont exactement les mémes que celles que nous avons déja utilisées et elle changeront en fonction de la taille initiale du SPIFFS (1M, 2M, 3ND. Le fichier spif fs .bin généré sera alors stric- tement identique a ce que nous aurions pu obtenir avec esptool. py et nous pouvons Putliser avec kspif fs pour extraire les fichiers Peers eee ee etree ese fess eee Aer ae eee Sroed peers eee mere teed easter) ER ee mere TCE Story ote wes EAs Meer ester ete] ere eetedge Cate seery CONCLUSION Comme vous pouvez. le voir, des solutions existent pour pouvoir sauvegarder ou récupérer ses don- nées en cas de probléme, Attention cependant, ces techniques reposent sur le fait que les données aient conservé leur intégrté. En effet, en cas de corruption d'un ou plusieurs fichiers en SPIFFS ou si lamémoire fash s'avere défectueuse, il sera beaucoup plus difficile, voire impossible, de reconstituer ce quiest devenu inaccessible. Les techniques de récupération ne sauraient done se substituer & une politique préventive, consistant a dupliquer le plus possible les informations sur différents médias. Lalogique est absolument la méme que celle qui vous incite, en principe, & faire des sauvegardes des données de votre ordinateur. Bien entendu, tout ceci dépend totalement dela nature, de la sensillité etde Fimportance des données en question wou hackable.fe HACKABLE MAGAZINE N‘31 47 2 | ARDUINO & MICROCONTROLEURS ARDUINO MKR VIDOR 4000 : UN ARDUINO PAS COMME LES AUTRES Denis Bodor Les microcontréleurs existaient bien avant l'arrivée des cartes Arduino. La révolution provoquée par ’initiative italienne n’a pas été technologique, mais pédagogique. C’est le fait de totalement démocratiser et de rendre accessible le développement sur microcontréleurs qui a mis le mot « Arduino » sur toutes les lévres. Aujourd’hui, Arduino récidive avec un autre domaine de l’électronique numérique et s’attaque a une technologie, aussi difficile a aborder aujourd’hui que étaient les microcontréleurs il y a une dizaine d’années : les circuits logiques programmables. MkR Vidor 4000 (CY Arduino MER Vidor 4000 : un Arduino pas comme les autres AD etitavertissement avant de commen- cer le présent article n'est pas ce qu'on peut appe- ler un tutoriel ou une prise en main. Mes expérimentations autour de Arduino MKR Vidor 4900 ont découlé sur une triste conclusion, me faisant pen- ser que ce produit est loin de pouvoir étre utilisé la fagon autres cartes Arduino. Mon objectif ici est davantage de faire une critique objective de cette carte, et en particulier de son support logiciel, et de vous donner un simple conseil (spoiler alert): il est urgent dattendre que tout cela prenne un peu de bouteille, Sivous étes un fervent utili sateur de carte Arduino, vous connaissez sans doute son prin- cipe de fonctionnement : vous écrivez un code appelé croquis qui, une fois compile, est placé dans la mémoire du compo: sant principal dela carte, oi il est exécuté. Ce composant, le microcontroleur, est composé d'un processeur, de mémoire vive, de mémoire de stockage (flash) et d’un ensemble de périphériques, le cout réuni sur une seule et méme puce. Charger un croquis dans la carte Arduino revient donc a donner une partition a un chef orchestre, pour obtenir dela musique. ‘Mais quid des musiciens et du chef dorchestre luiméme? Is sont inscrits, définitivement, wow nackabl dans le silicium et ne peuvent étre remplacés ou modifies, que ‘vous les utilisiez ou non dans votre composition du moment. Vous n’avez pas besoin de trompette, mais auriez aimé avoir cing vviolons et non deux ? Utilisez simplement un orchestre différent, ‘mieux adapté a votre musique. Il en va de méme pour vos pro: jets Arduino si, par exemple, vous avez besoin de plusieurs ports série, vous opterez pour l’Arduino Mega avec quatre d'entre eux, cen lieu et place de 'UNO ne disposant que d'un seul périphérique de ce type. Qu'ily ait davantage de mémoire ou de GPIO importe peu pour votre croquis, mais ces ressources seront tout de méme 1a inutilisées, Une solution & ce probleme est de plus en plus populaire dans industrie et consiste & adopter une approche modulaire avec «une part, un microcontrdleur aux caractéristiques et fonction- nalités fixes et de Yautre, un composant trés particulier appelé «circuit logique programmable ». Ces circuits existent depuis, longtemps et peuvent étre vus, grossiérement, comme une énorme platine a essai peuplée de milliers de transistors. En défi- nissant des connexions entre ces transistors ou éléments logiques, ‘est possible de les faire agir de concert comme nvimporte quel circuit intégré ou ensemble de circuits intégrés, de la simple porte logique au processeur, Un type particulier de ces petites mer- veilles d’électronique est appelé FPGA pour Field-Programmable Gate Array. Etablir les connexions entre ces transistors de maniére & eréer un circuit, généralement relativement complexe, est une tache longue et pénible. Afin e’éviter ce laborieux travail de fourmi au concepteur, des langages de description sont généralement utilisés : Verilog ou VDHL. Un code dans l'un ou Tautre de ces, Tangages décrt la structure du circuit a créer et un logiciel spé- cifique, intimement lié au fabricant du FPGA, permet de trans- former cette description en une configuration qui prendra place dans le composant, en interconnectant les éléments logiques de fagon appropriée (un bitstream). Les FPGA, et leurs cousins les CPLD (Complex Programmable Logic Device) peuvent étre utlisés seuls pour former, par exemple, un processeur ou un microcontroleur complet. Mais la tendance actuelle soriente, dans certains domaines, vers une utilisation conjuguée avec un microcontréleur ou un SoC, sous la forme de deux composants distincts, mais aussi tantot réunis sur ‘une méme puce de silicium, avec comme principaux avantages une communication ultra rapide entre les deux types de compo. sants et une réduction des coats. HACKABLE MAGAZINE N‘31 49 2 | ARDUINO & MICROCONTROLEURS 1, LARDUINO MKR VIDOR 4000 twoleur de toute pice est une ‘che phénoménale, alors Le développement en Verilog ou VDHL n'est pas qu'une partie des éléments est réellement un obstacle en soi. A partir du moment clairement réutilisable (port oon comprend et assimile le fait quon ne crée pas SPI, contrdleur mémoire, bus tun code destiné a étre exécuté par un processeur, ide, etc.). Chaque fabricant ‘mais plutot une description dun circuit, Papprentis- propose done des éléments sage est similaire & celui de m'importe quel nouveau, tout faits, ou JP core, que le domaine, ‘développeur peut intégrer a son projet. condition d’en avoir le droit. Le «IP » de IP core signifie « Intellectual Property » et ces briques de base sont soumises aux régles de la propriété intellectuelle. ARM, par exemple, ne fabrique pas de microcontrdleurs ou de processeurs, mais vend des licences sur ses IP cores & des fabricants comme Samsung, Ce qui bloque généralement l'accés aux technologies FPGA est a difficulté qu'un utilisateur aura & faire ses premiers pas. L'utilisation des circuits logiques pro- grammables est depuis longtemps restée la chasse gar- ddée du milieu professionnel et de Vindustrie, en raison du coiit prohibit des environnements de conception et des plateformes de développement. lly a quelques années encore, s‘initier la programmation de FPGA. représentait un budget conséquent et était une déci- sion trés délicate. En effet, le marché est principale- Larduinosevidor | mentdominé par deux enttés: Xin et Altera (depuis _‘fShricantscomme Samsung, {cones Taner peurachetpar inte. Chacune lle disposedesa Yur gegmpeane te eo amme de composants, son logiciel de conception eee fetagammearduine, | & posants con We ‘ aquil soit techniquement pos- Sffointuuse Cotte! | édié etun ensemble de ressources spécifiques : docu: SW) sit tehniguement Pos integreun nombre mentation code et IP core incre nom . pour eréer votre propre pro- defonctonnalts Ce dernier point west pas négligeable, Nous Tavons _ceseur avec un FPGA, vous cera dit préctdemment,un FPGA peut devenir wimporte _nven avez pase dit car vous crcoriwomere 4° | quel ireuit, mais reréer par exemple un microcon- avez pas de licence. limites ce **poHs/5 21. Hi CY 50 | HackasLe macazine nist wow.ed-diamond.com MKR Vidor 4000 > Arduino MKR Vidor 4000 : un Arduino pas comme les autres AD CChoisir un FPGA est done choisir un écosystéme tout entier et investir de fagon non. négligeable dans ce dernier, dans une perspective profes- sionnelle généralement, Ce contexte était également celui du domaine des microcontré- leurs, ily aun peu plus d'une dizaine d’années. Avant V'ar- rivé des plateformes Arduino, Energia et autres Discovery kits de ST, mais aussi des outils open source comme AVR-GCC bien avant cela, la program ‘mation pour microcontréleurs suivait presque exactement les -mémes régles : kits chers, suites de développement spécifiques et outils difficiles ase procurer pour un amateur. Aujourd’hui, on voit enfin apparaitre une ouverture et un changement de cap dans le wow nackabl domaine des FPGA. Comme nous allons le voir, cout nest pas encore au beau fixe, mais on sent clairement un changement dans ar, en particulier grace aux efforts des développeurs Arduino (et autres avant eux), Le mouvement est global et concerne la fois, les fondeurs de FPGA comme Xilinx, Altera/Intel ou Lattice, les constructeurs de cartes d'évaluation et 'expérimentation base de FPGA et les développeurs ‘du monde entier produisant des IP cores ouverts et libres de droits, des outils open sources et des projets réutilisables. Arduino fait ainsi partie de cette mouvance, avec une carte spécifique : Arduino MKR Vidor 4000, Cette carte est déja relativement « musclée » ala base, puisqu’elle est construite autour d'un micracontrd- leur ATSAMD21G18A intégrant un ARM Cortex-MO & 48 MHz, 256 Ko de mémoire flash, 32 Ko de SRAM, un. controleur USB 2.0 (héte et périphérique), § timers 16 bits, 3 timers 24 bits, une RTC, un watchdog, 6 ports série (USART, SPI, 20), un DAC et bien dautres choses. ‘Mais la carte embarque également 8 Mo de SDRAM cet 2 Mo de flash SPI, un module Wii + BLE (U-BLOX. NINA W102), un contrOleur pour accu LiPo et surtout, un FPGA Cyclone 10 LP (10CL016) d’Altera/Intel, dis- Le Vidor 4000, comme toute ta gamme MKR, ttitiseun brochage standardisé appelé «connecter MRR » Leconcept est le méme ‘que celui des shields, dune nuance prés tes ‘modules peuvent étre cempilés parle haut ou parle bas, Notez que danse cas deta carte Vidor 4000, tes GPIO sont partagés entree ‘microcontréteur SAMD ‘tle FPGA Cyclone 10 LP. HACKABLE MAGAZINE N31] 51 <>. La carte dispose surla tranche dun ‘connecteur mint Pcte, dont une bonne partie des broches mest controlable que par le FPGA. L'un es développeurs Arduino a confirmé ‘queleconnecteur ératt «pinout compatible »,en plus de proposer VSB, mais sans surprise, existe actuellement ‘aucun support ou IP ‘core permettant de faire dela carteun péripherique mint Pete, ARDUINO & MICROCONTROLEURS posant de 15408 éléments logiques programmables, S‘ajoute a cela une connectique tout aussi riche : un port ESLOV dédié a Ize, un connecteur micro-HDMI etun connecteur mini PCl-express (ce n’est qu’un cconnecteur, vous ne pouver pas faire fonctionner la, carte Arduino comme une carte mink-PCle dans un PC (enfin, pas vraiment). Cette carte, disponible pour environ 70 €TTC via les canaux officiels et habituels, est tout simplement ‘un monstre. Mais la présence du FPGA la sort de la simple catégorie des cartes suréquipées et la propulse dans un tout autre univers : celui de la souplesse de configuration absolue, En effet, le concept derriére cette carte repose principalement sur le fait d'utli- ser le FPGA pour fournir des périphériques supplé- mentaires au microcontréleur, La quasi-totalité des broches disponibles, désignées par « port MKR » pour cette famille de cartes (Arduino MKR Zero, Arduino CY 52 | HackasLe macazine nist MR WAN 1300, Arduino MKR GSM 1400, etc.), peut etre controlée ala fois par le SAMD21 et le FPGA. Un certain nombre de bibliothéques font déja usage de cette architecture par- ticuliére en implémentant dans le FPGA, par exemple, un contréle particulier des. GPIO ow encore des bus i2e et SPI supplémentaires, Cette approche combinée FPGA + bibliothéque dédiée est capi- tale, puisque tel est le choix. fait en profondeur par les développeurs, mais nous y reviendrons plus tard, wow.ed-diamond.com MkR Vidor 4000 (CY Arduino MER Vidor 4000 : un Arduino pas comme les autres AD 2. INSTALLATION ET PRISE EN MAIN installation du support pour cette nouvelle carte se fera trés classiquement, puisque celui-ci est directe- ‘ment listé dans le gestion- naire de cartes. Choisissez done simplement « Arduino SAMD Beta Board (32-bits ARM Cortex-M0*) » et procé- ez a Vinstallation, La ver- sion actuelle du support est la 1.6.25, mais ne vous y trompez pas, la mention « beta » dans le nom du support est malheureu- sement parfaitement justifie, En plus de ce support, vous aurez besoin d'ins- taller les bibliothéques « VidorGraphics » permettant de piloter le port micro-HDMI, « VidorPeripherals » vous don- nant accés aux périphériques configurés dans le FPGA par Ja bibliothéque elle-méme et éventuellement « WiFININA », pour le support du module ‘WEF intégré. Enfin, de fagon totalement optionnelle, vous pouvez ajouter la bibliotheque ‘« USBBlaster », offrant un acces ‘au FPGA au travers du connec- ‘eur USB de la carte Vidor 4000. Programmer un FPGA est, tres different de programmer un microcontréleur, Ce der- nier dispose généralement d'une mémoire flash intégrée, dol est directement exécuté le code parle processeur (ce n'est pas toujours vrai, un ESP8266 wow nackabl utilise une mémoire PI externe). Un FPGA est totalement vierge 2 la mise sous tension et la configuration, le bitstream, dott tre chargé & chaque fois. Les constructeurs de FPGA associent souvent un composant dédié pour stocker le bitstream, comme un EPCS4 pour le bon vieux Altera Cyclone II (EP2CS), et celui: ci sera alors chargé automatiquement. Dans le cas de la carte Vidor 4000, ceci fonctionne différemment. Pour programmer le FPGA Cyclone 10 LP, les développeurs ‘ont envisage trois options : + Embarquer le bitstream sous la forme d'un fichier TTF (Tabular Text File) dans une bibliothéque qui sera flashée, avec le croquis utilisant, dans la mémoire utilisée par le microcontréleur. Ce bitstream sera alors chargé dans le FPGA ‘au démarrage, directement par le code de la bibliothéque, suite a Vnitialisation du FPGA depuis le croquis. Cest la méthode privilégiée, puisque Pidée est précisément de faire de la configuration FPGA un élément ou composant d'une bibliothéque. Un peu comme si un pilote de périphérique sur PC, au moment de son chargement, créait le périphérique quill controle + Programmer le FPGA en plagant le bistream en RAM (celle présente sur la carte, non celle du microcontrdleur) via le port JPGA présent (mais non peuplé) sous la carte, alors que le bootloader est exécuté. Ceci nécessite un périphérique USB Blaster (USB Blaster download cable dans la littérature Altera/Intel) et la mise en place d'un connecteur & Yemplace- ment JTAG, + Uuiliser un émulateur USB Blaster exécuté par le microcon- tréleur SAMD21. La, la carte Vidor 4000 connectée en USB se fait passer pour un adaptateur USB Blaster. Ceci est une now- veauté de la version 1.6.25 du support Arduino pour cette carte et la raison d’étre de la bibliothéque « USBBlaster ». Comme vous pouvez le constater, architecture de dévelop- pement lige au Vidor 4000 est clairement définie et Yon remar- {quera que les solutions reposant sur USB Blaster (réel ou émulé) ne sont non seulement pas approche privilégiée pour les développeurs, mais ne présente également que peu dintérét En effet, on pourra trouver sur divers sites, dont eBay, des kts de développement livrés avec un USB Blaster, pour une fraction duu prix de I'Arduino MKR Vidor 4000 et intégrant généralement un FPGA avec autant d’éléments logiques programmables. Le tout sachant que Quartus, 'environnement de développement pour HACKABLE MAGAZINE N‘31 53 00 ARDUINO & MICROCONTROLEURS Faire clignoter une simple LED est le Hello World » de 'étectronique numérique ‘Matheureusement, si vous souhaitez le faire favec le FPGA intégré aw [MRR Vidor 4000, ne vous attendez pas quelque chose dausst alse jArduino UNO. ‘ces FPGA plus anciens (Cyclone IIa 1V), est totale- ‘ment gratuit en version compléte et non limitée (édi- tion Lite), Considérer le Vidor 4000 comme un devkit FPGA test absolument pas intéressant financiére- ‘ment (sauf sieffectivement, offre logicielle appor- tait un réel avantage pédagogique). Mais revenons & nos moutons. Une fois le support et les bibliotheques installés, la premiere chose & faire est, en principe, de mettre a jour le bootloader installé dans le microcontréleur, Depuis la version 1.6.23 du support, ceci peut étre fait via un croquis ‘exemple accessible via « Pichier », « Exemple » et «SAMD_BootloaderUpdater ». Une fois la bonne carte choisie via le menu « Outils » et « Type de carte », ouvrez Vexemple en question, sélectionnez le bon port pour la carte, ouvrez le ‘moniteur en réglant la vitesse & 9600, puis compilez et téléver- sez le eroquis, Dans la fenétre du moniteur devrait apparaitre un message vous indiquant s'l faut ou non mettre & jour le bootloader. Si telest le cas, envoyez simple- ‘ment « y »dans la fenétre en guise de réponse et la mise & jour sera effectuée... ou pas. CY 84 | HackapLe macazine nist wow.ed-diamond.com MkR Vidor 4000 (CY Arduino MER Vidor 4000 : un Arduino pas comme les autres AD En effet, dans mon cas, la mise a jour a toujours systématiquement refusé de sinstaller avec un _message des plus énervants, « oh no! the bootloa- der failed to update :(» aprés une breve progres- sion exprimée en pourcentage. Etrangement, la seconde carte testée n’avait pas besoin de mise a jour, alors qu’elles ont toutes deux été comman- dées et livrées ensemble, ne semble exister aucune documentation (la mise a jour est une simple copie mémoire) et il rest fait nulle part ‘mention d'un tel probleme, ou d’un autre dail- leurs... e me demande combien d'utilisateurs de cette carte existent réellement... Quoi quillen soit, Pétape suivante consis tera a tester votre carte avec 'un des exemples livrés avec la bibliothéque « VidorPeripherals » « VidorTestSketch », qui nous donne un apergu des capacités de la plateforme, mais aussi, et surtout, de Varchitecture de développement. Ce croquis, une fois chargé et envoyé a la carte, a chera sur le moniteur série un certain nombre informations : Vidor bitstream version: 1020109 number of devices 9 (02000000 MB_DEV_GPIO 03000000 ma_DEV_GEX 04000000 mB_DEV_12c 05000000 MB_DEV_SPT 06000000 mB_DEV_UART 08000000 me_DEV_SDRAM 99000000 MB_DEV-NP 11 0A000000 MB_DEV_ENC 0 08000000 ma DEV REG Pin AO is HIGH Pin AO is LOW Labibliothéque « VidorPeripherals » embarque un bitstream fournissant un certain nombre de périphériques supplémentaires, comme un contréle des GPIO différent de celui du micro- contréleur, un bus i2¢, un port SPI, un accés la ‘SDRAM placée sur la carte, ete. Ce que nous voyons apparaitre sur le moniteur série est une énuméra- tion de ces périphériques, associée a un numéro de version du bitstream. Le test se conclut, de plus, wow nackabl par une communication entre FPGA et micro- contréleur, via une brache commune. AO est ccontrélée par le FPGA et son état est lu par le ‘SAMD21, Le croquis fait un peu plus que ce qui ‘affiche, en initalisant également le nouveau bus i2c et en envoyant des données sur les ports SPI et série Sivvous avez déja touché un FPGA ou un autre composant logique programmable, ‘ou méme simplement joué avec des circuits logiques, vous remarquerez que cet exemple est étrangement complexe, en matiére de fonctionnalités. Lister les circuits formés dans un FPGA n'est pas ce qu’on peut appe- ler quelque chose de standard, pas plus que la gestion de numéro de version @’un bitstream. Nous sommes trés loin de la cont guration simple d'un FPGA communiquant asiquement, via quelques broches, avec un microcontréleur. I'y a quelque chose de complexe & leuvre, ick 3. ALLEZ PLUS LOIN : FRUSTRATION GARANTIE 11 parait que lorsqu’on ne comprend pas ‘un message, cest qu’on n’en est pas la cible. En ce qui me concerne, le concept consistant avoir réunis un FPGA et un microcontréleur ‘ARM sur une carte Arduino présage, en prin- cipe, d'une promesse fort plaisante : rendre utilisation des FPGA aussi accessible que celle des microcontroleurs, depuis Varrivée des cartes Arduino. Et cela se traduirait, cen pratique, par le fait de démocratiser la programmation Verilog ou VHDL dans Pen- semble de la communauté des utilisateurs Arduino. En dautres termes, je pensais avoir centre les mains La solution tant attendue pour écrire dans un langage de descrip. tion de matériel (ou HDL, pour Hardware Description Language en anglais), comme on éerit des croquis en C/C+. HACKABLE MAGAZINE N‘31 55 00 ~ 56 ARDUINO & MICROCONTROLEURS Selon cette approche, Vidée aurait été d’écrire un code Verilog ou VHDL, Ie transformer en bitstream avec le logiciel adapté (Quartus en occurrence, & défaut d'un outil libellé Arduino), charger ce bistream et communiquer avec mon ou mes circuits frafchement créés. Tout simplement. Dans 'absolu, cect est parfaitement possible... sion fait impasse sur le «tout simplement ». Philippe Boudot présente, par exemple, une approche possible sur son blog (systemes- ‘embarques.fr) ct len existe d'autres que Yon découvre, dés lors, ‘que 'on fouille danse code, les bibliotheques et Ie peu de docu- ‘mentation entourant les sources diffusées & ce jour. Mais force est de constater quil agit 4 clairement de hacks, s'écartant de la logique et de la structure choisies comme base officielle, En effet, si vous voulez une approche simple et claire, vous devrez réimplémenter une partie du code et méme bidouiller le contenu des fichiers utiisés (avec un outil spécial en Java de Philippe, Poutil des développeurs Arduino en Go, ou le votre). Le support Arduino pour le MKR Vidor 4000 n’est pas congu, a mon sens, pour faciliter Vapprentissage des FPGA, mais pour autre chose (Dieu sait quoi). Jugez plurot Le bistream configurant le FPGA est créé par Quartus sous, la forme d'un fichier TTF, un simple fichier texte composé des valeurs décimales des octets du bistream. Ce TTF est intégré dans une bibliothéque destinée a prendre en charge les péri- pphériques et circuits créés, et il prendra place de fagon binaire ‘en flash en compagnie du croquis compilé. Ce mécanisme impose un format de données qui n'est pas celui du TIF généré par Quartus, il faut inverser ordre des bits dans chaque octet, avant d'intégrer ces données dans la bibliothéque (mais en gar- dant la méme extension), ce rest pas tout. En plus du bistream, la bibliothéque devra intégrer la logique permettant la communication entre le FPGA et le microcontroleur. Dans sa version la plus basique, cette communication se fait en principe via le JTAG, en interne sur la carte. Bien entendu, cect est relativement peu efficace ‘et une meilleure solution est utilisée. Elle consiste & ménager ‘une zone de la SDRAM, accessible par le microcontréleur et le FPGA, afin de Putiliser pour transmettre des données. Les deux ‘acteurs lisent et écrivent dans cette zone et signalent l'événe- ment par les broches du JTAG. Sivous voulez quelque chose de simple, vous devrez tout de méme prendre ce mécanisme en compte, du moins en HACKABLE MAGAZINE N‘31 partie, puisque c'est le seul ‘moyen, dans un croquis, de provoquer le chargement de la configuration dans le FPGA. Vous pouvez aussi choisir de vous baser sur les squelettes ‘ou modéles (templates) de bibliothéques présents sur Ittps:/github.com/vidor- libraries/VidorBitstream, ‘mais cela implique dautres ‘dgpendances. En effet, dans un telcontexte, le stream west pas composé uniquement de votre petit projet personnel, mais est accompagné d'un... processeur. Les choses se compliquent rapidement et, petit a petit, nous nous éloignons de Pobjec- tif supposé d'apprendre a créer des circuits dans un FPGA. Le mécanisme de communication faisant intervenir la SDRAM, appelé mailbox, utilise d'un c0té Ie code de la bibliotheque et de Yautre un petit code en , compilé pour un processeur cré6 dans le FPGA, Ie softcore IOS IL, propre a Altera/Intel, et bien entendu, propriétaire. Les bibliothéques templates reposent massivement sur ce mécanisme et done sur la pré- sence du softcore, méme pour MKRVIDOR4000_template_ bare quiest censé ne pas "ut liser (en suivant les inclusions successives dans les fichiers d'en-téte, on se rend rapide- ‘ment compte que le systéme de mailbox est utilisé, et que des fichiers manquent dans les sources). wow.ed-diamond.com MkR Vidor 4000 (CY Arduino MER Vidor 4000 : un Arduino pas comme les autres AD A.cette complexitéclairement incompatible avec une ddémarche consistant & débuter avec un simple « HelloWorld » pour FPGA, puis. progresser, il faudra également ajouter + un manque drastique de documentation ; + des scripts de construction qui ne sont clairement pas des- tinés 8 une diffusion publique ; + des liens mort la pelle dans les README ; + des exerples impossiles a réellement utlser pour autre chose qu'une démonstration, car les IP core ne sont pas iffuses (« not public»); + bon nombre de dépots n’ont pas conn de modification (commit) depuis plus de 7 mois, laissant presque penser & tun projet a Vabandon ; sete wow nackabl Cette carte, la DEO-NANO de Teraste, integre un FPGA Altera/incel Cyclone IV (EPACE22FI7C6N) ‘isposant de 22320 éléments loglques programmables et se trouve dans ta méme _gamme de prix que le MER Vidor 4000 et son Ghelone 101LP de 15408 éléments logiques. Elle comprend également un USB Blaster intégré, une _mémoire de stockage pour la configuration FPGA (EPCS64), 32 Mo de SDRAM, une EEPROM iz, un laccélérométre, et un convertisseur analogique/ ‘numérique & canaun, Le tout, pris en charge de bout en bout par ta suite logicielle Quartus ‘en version 18.1 Lite (gratuite) et accompagné ‘dune documentation exhaustive. Sivous vous Intéressez aux FPGA, mieux vaut, pour Vheure, opter pour ce genre de matériel. HACKABLE MAGAZINE N'31| 57 <5 ARDUINO & MICROCONTROLEURS ‘Une autre option, eres économique, pour découvrir les FPGA et fapprendreun langage de description de matertel, comme Verllog et VHDL, consisted se ‘ourner vers des composants cet des kits consiaérés comme ‘obsolétes. Cette carte équipée dun Altera Cyclone I est supportée par ‘Quartus Prime jusqu'a ta version 13.05pt, toujours disponible au teléchargement pour Windows ec GNU/Linux. Méme sites caractéristiques du composant sont aujourd'hui tres modestes, 1afagon de e programmer est identique aux modeles plus Finalement, seules deux méthodes sont disponibles aux humbles programmeurs souhaitant débuter avec le MKR Vidor 4000, autrement qu’en utilisant simple- ment les deux bibliotheques existantes : analyser la démarche des développeurs Arduino, pour tenter de comprendre leur logique et leurs choix, ou hacker son che- rin comme I'a fait Philippe Boudot, en ‘développant une version « maison » plus simple que l'usine a gaz originale. Dans les ceux cas, il ne s'agit plus vraiment de sinitier aux FPGA, mais plutst de faire ses ‘premiers pas en rétro-ingénierie. CY 58 | HackasLe macazine nist CONCLUSION Disonsie franchement, c'est avec le coeur lourd (et bien des noms oiseaux prononeés) que jai finalement jeté Péponge avec cette carte qui, pourtant, promettait tant de choses. Mon objectif initial était d'intro- duire le fantastique domaine des circuits logiques program- ables, mais cette carte n’est clairement pas faite pour cela, Aborder un sujet implique de > un Arduino pas comme les autres AD pouvoir s'y investir rapidement et directement, exactement comme une carte Arduino UNO ou autre permet de le faire avec un mierocontréleur ‘on installe VIDE, on branche quelques compo. sants et on entre dans le vif du sujet. Ici, sile vif du sujet est effectivement de faire connaissance avec les FPGA, il faut fouiller Jes sources, comprendre la logique des déve- loppeurs, apprivoiser Quartus, se conformer & une architecture et éventuellement, réinventer la roue. Ceci n'a absolument rien de pédagogique. Mais peut-étre me suis je trompé. Peut-étre que le fait de découvrir les FPGA et Verilog n'est pas Vobjectif de cette carte, Mais dans ce cas, je ne sais pas quel est le but poursuivi réellement. Sagitil d'une dynamique & deux vitesses, avec certains développeurs concevant IP cores pro- prietaires et bibliothéques associées, et autres se contentant de les utiliser ? Notez que état dans lequel se trouvent les développements aujourd'hui n'est certai ‘nement pas définitif. Massimo Banzi, co-fon- dateur d’Arduino, évoquait un VIDOR FPGA Visual Composer lors de Arduino Day 2019 en ‘mars dernier. Peu de choses sont connues & cette date concernant cet outil, qui ressemble effectivement a un éditeur visuel fonctionnant dans un navigateur web. Rencontrant des pro blémes pour jouer la vidéo lors de sa présenta- tion, Massimo remarqua, non sans un certain humour, que ceci « était d’autant mieux, car ainsi le mystére restait entier », Pour ma par, je vais done laisser de c6té les dloux exemplaires de MKR Vidor 4000 en ma pos- session atendre que ce fameux mystere se dis sipe, et me tourner (ou retourner) vers autres solutions FPGA moins chéres, plus convention- nelles et mieux documentées, Comme un devkit Cyclone IV eBay 820 le projet open source TeeStorm et ses FPGA Lattice iCE40, une DE10- NANO de Terasi, avee un Cyclone V SoC ou encore la carte chinoise Lichee Tang, qui semble simple utilisation et trés économique, wou hackable.fe RTE Ce macAZINe DE LA cvBenstC =m “OFFENSIVE EY DEFENSIVE SECURITE DES ENVIRONNEMENTS CLOUD AMAZON WEB SERVICES ROBOTIQUE & IA _ DECOUVREZ LES RESEAUX DE NEURONES AVEC ARDUINO Denis Bodor Intelligence Artificielle, Deep Learning, Apprentissage Automatique, Classification, Machine Learning... Ces termes sont en ce moment sur toutes les lévres et semblent souvent utilisés dans les médias comme joker, en lieu et place de « vaudou », « magie noire », « sorcellerie », «alchimie » ou plus généralement, « technologie a la mode qu’on ne peut pas vous expliquer, car on n’y comprend rien ». Pourtant, chez vous, vous pouvez découvrir ce domaine assez facilement et sans avoir a utiliser un PC monstrueux, avec trois cartes graphiques hors de prix. La preuve, on peut méme le faire avec une simple carte Arduino... a Tani 60 | HackasLe macazine nist jamond.com réseaux de neurones > Découvrez les réseaux de neurones avec Arduino AS nlisant la page Wikipédia traitant de Vapprentissage automatique, et en particulier, la partie « Historique », on est presque tenté de completer mentalement avec un « En 20xx, le systéme d'intelligence artificielle développé par XXX devient conscient et prend le contréle de Phumanite ». 11 faut dire que Yavenir dépeint par nombre d’couvres de science- fiction, associé avec V'aceéléra- tion des successions d'avancées technologiques ces 20 der- nires années, a de quol faire froid dans le dos. Rappelons que le Deep Blue d'TBM battant Je champion mondial d’échecs Garry Kasparov rétait qu’en 11997, Depuis, bien d’autres jeux ou problémes, réputés extré- -mement difficies, sont tombés sous le joug de Yintelligence artificielle ‘Mais ne soyons pas pour autant alarmistes, car, par ailleurs, es IA de Google et ’Amazon sont toujours aussi incapables de me suggérer des vidéos qui m'intéressent, alors méme quills lisent mes ‘ails ou ont mon historique achat, Lintelligence arti- ficielle véhicule un certain nombre de mythes et de fan- tasmes, attisés et entretenus par les médias, exactement comme le terme « algorithme » semble capable dexpliquer tout et rimporte quoi, alors ‘méme que madame Michu et wow nackabl d'entrée Couches cachées ‘monsieur Toulemonde en utilisent, en préparant les recettes de mémé Ginette, Vous et moi savons par- faitement ce qu’est un algorithme et qu’il n'y a done absolument rien de mystérieux ou magique qui s'y rattache, Mais qu’en estil de V'intelligence artificielle ct des réseaux de neurones, en particulier ? 1. QU'EST-CE QU'UN RESEAU DE NEURONES ? Un réseau de neurones ou plus exactement un réseau de neurones artificiels est un concept inspiré du fonctionnement du cerveau et des neu- rones biologiques. Cette idée n’a rien de nouveau cet remonte aux années 50, Apres une période de désillusion, oii es recherches se sont heurtées & des limitations qui semblaient impossibles & contourner, ‘un nouvel essor fur initié par une toute nouvelle approche. Cest celle qui est utilisée de nos jours et est connue sous la désignation de perceptron multi- couche ou Multilayer Perceptron (MLP en anglais). Un réseau neuronal artificil se compose de neu- rrones reliés entre eux par des connexions et organi sésen couches, Linformation circule dans le réseau depuis les neurones de la couche d’entrée vers les neurones de la couche de sortie, par l'intermédiaire Figure 1: Un réseau ‘deneurones ou plus exactement, tun perceptron muiticouche est composé de neurones, organisés en couches interconnectées information présentée iates neurones dela iche entrée cireule travers du réseau et joutt, cransformée, surla couche de sortie, HACKABLE MAGAZINE N31] 61 <>. Ere iuud ~ 82 Figure2 : Les connexions entre les neurones de différentes couches ont une Valeur qui leur est associée: le poids. Ce ‘Sontees valeurs qui déterminent, apres ‘caleut, Pactivité d'un neurone et impactent les neurones de a couche suivante. La hase d'encrainement d'un réseau de neurones consiste a ajuster la valeur de ‘chacun de ses poids, de maniére a obtenir lerésultat souhaitéen fonction de entrée ‘donnée, d'une ou plusieurs couches cachées. Chaque neurone d'une couche est relié & tous les neurones de la couche suivante, et ainsi de suite. Il existe d'autres topologies, mais gardons cela le plus simple possible ici. données du systéme. Il peut s’agit de rvimporte quelle informa- tion, numériquement représentable par une liste de valeurs. Un exemple courant est celui d'une image d'une taille arbi- trairement choisie, oi! chaque pixel (intensité lumineuse ou valeurs RVB) est connecté & un neurone de la couche Wentrée. Les neurones de cette couche passent alors V'information & ceux de la premiére couche cachée qui, en fonction de ce qu'il, recoivent, s'activent avec une certaine intensité et passent, en conséquence, une information a la couche suivante. Le praces- sus se poursuit jusqu’a atteindre la couche de sortie, qui four- nit un résultat. Crest 1a fagon dont ces neurones s‘activent, et Timportance donnée & chaque connexion, qui font que le réseau fonctionne, jusqu’a obtenir le résultat escompté, en fonction des entrées respondante. En d'autres termes, on entraine le réseau a clas- ser l'image d'un A, d'un B, etc, dans une catégorie «lettre A», «lettre B », etc. Cest la classification. Le jeu de données uti en entrée, plusieurs déclinaisons de chaque lettre manuscrite, apprend ainsi au réseau 4 reconnaitre ces symboles. Une fois, le réseau entrainé et donnant des résultats satisfaisants, il doit correctement, sans jamais les avoir traités précédemment. HACKABLE MAGAZINE N‘31 ROBOTIQUE & IA Les neurones d’entrée sont ceux qui représentent entrée de Entrainer le réseau revient & ajuster les valeurs des connexions fournies. Pour reprendre exemple classique de limage dont les pixels forment es données en entrée, on peut ainsi soumettre le dessin de lettres de Valphabet et attendre, en sortie, la lettre cor- alors se comporter de la méme maniére avec des données totale- ‘ment nouvelles: il reconnait des syraboles dessinés et les classe Cette capacité d'apprentis- sage est inspirée du fonctionne- rent du cerveau dans le sens oii, d'un point de vue biolo- sique, des événements récur- rents structurent la connexion des neurones. Regardez un film 20 fois, lisez un texte 15 fois ou répétez tous les jours Jes mémes activités et vous ‘cimprimerez », presque lit: téralement, ces informations et ceteIogique dans votre cerveau. A force de penser ou de faire quelque chose, une partie de vos neurones et les connexions existantes entre ceux se modifient et vous appre- nez. Ilen va de méme pour un réseau de neurones artificiels, Les similitudes ne s'arrétent pas a, car, et c'est bien la aspect le plus attrayant de ce domaine, en observant l'nté- rieur du réseau, il nest pas vraiment possible de savoi ce quill fait. De la méme fagon, quill est pas possible de savoir exactement ce qu'une personne pense en observant son activité cérébrale, il nest pas possible de savoir précisé- ‘ment, par exemple, comment Ie wow.ed-diamond.com réseaux de neurones > Découvrez les réseaux de neurones avec Arduino AS programme AlphaGo est arrivé de bout en bout. On utilise plutot des bibliothéques et des fra- A battre des joueurs de go pro- __ meworks dédiés faisant le travail a votre place, parfois avec V'as- fessionnels. Contrairement & sistance de matériel spécifique (GPU, TPU, périphériques USB, autres approches, comme etc.) Cependant, il existe toute une terminologie qu'il est impor- celle wtlisée par Deep Blue & tant 'assimiler, car dans le cas contraire, on se trouve rapide- Tépoque, il ne s‘agit plus de ‘ment perdu, Pour comprendre cette terminologie, il faut savoir jouer toutes es parties pos- comment fonctionne un réseau de neurones, dans son aspect le sibles et de choisircelle menant plus élémentaire, la vietoire chose presque {impossible au jeu de go). Le réseau de neurones entrainé, 2.1 Fonctionnement d'un réseau de neurones Jul, salt jouer. Avant de découvrir précisément comment un réseau de neurones apprend, nous devons savoir comment i fonetionne (qui soit entrainé ou non). Imaginons quelque chose dextré- 2. UN PETIT ‘mement simple, avec deux neurones pour la couche d'entrée et é un unique neurone d'une des couches cachées. A ce neurone RESEAU DE estassciée une valeur calculde,repréeniée su le schéma en NEURONES POUR __ figure2parun point dinterrogation rouge. Les deux neurones dela couche d'entrée relaient Vinformation de départ Vinten- COMPRENDRE sitélumineuse dun piel, par exemple) via deux connexions. vest pas nécessaire de créer un énorme réseau pour obtenir un résultat ou com- prendre les principes de bases, quelques neurones suffisent. important est de comprendre Jes relations entre les neurones et comment les influences, pour changer le comportement de toutle réseau, Actuellement, ilest relativement rare de tout Pour déterminer la réaction du neurone dela couche cachée programmer en partant de cet done les valeurs quil va fournir en sortie, nous avons besoin zéro et done, de tout construire d'une méthode de calcul, qui est alors désignée sous le nom de ‘Tout le principe de fonctionnement d'un réseau de neurones ‘repose sur ces connexions et elles ne sont pas toute égales. Comme avec un cerveau, c'est le niveau de connexion entre neurones qui « imprime » le réseau avec un « savoir ». Sur notre schéma, ces deux connexions sont associées, chacune, a une valeur numérique : cest le poids (weight en anglais). Ce sont ces valeurs, ou poids, qui sont ajustés, lorsque le réseau est entrainé et apprend. Pour Vheure, contentons-nous de partir du principe ‘que ces valeurs sont les bonnes. Fipcre sn nesiire dont un roman da nacronas ‘pprendrepore sur a propagation dune correction, dans te sens inverse da fnctionnement standard dtuveseeu erreur mesurée en sorted recat est tia pour apie ln poue dor Counenions 8 58. Coci perwt de itrccnar une nourale veer LZ™ L™. danse résuttat deta fonction dactivation de Met Noet derepercuer as correction» urls pode, des connotions ceo neurones. Ce meme precede ‘continue en remontant dans le réseau, c'est la rétropropagation. wow nackabl HACKABLE MAGAZINE N'31| 63 <5. Ere iuud "NOUVELLE RUBRIQUE ROBOTIQUE & IA Lapprentissage d'un réseau de neurones est lune tache rrés gourmande ‘enressources de calcul, mais celle-ci peut etre découpée en un ensemble de taches plus petites. Ces catculs pouvant etre arallelises,ilest possible ‘accélérer de fason tres importante cette étape en utilisant des architectures multiceurs, ‘comme es GPU de cartes -graphiques ou illustré ei, ‘du matériel dédié comme le Neural Compute Stick a Intel source Inte). fonction d’activation. Celle-ci détermine lactivité du neurone et ilen existe plusieurs, ayant chacune leurs avantages et leurs inconvénients, et donnant un résultat dans les plages différentes. Ici, nous nous contenterons de voir celle que Yon retrouve le plus souvent, lorsqu’on commence a se pencher sur le domaine: la fonction sigmoide. Pas de panique, il ne s’agit que d’une fonction mathématique, comme un sinus, cosinus, un loga- rithme ou simplement un carré. Pour comprendre son intérét dans notre contexte, commengons deja par voir d’oi vient ce sur quoi il opére. Nous avons deux neurones envoyant 43 et 24, via des connexions qui possédent un poids. Nous pondé- rons donc les valeurs en les multipliant par les poids de chaque connexion et obtenons 43°21 90,3 et 24*-3,9 = 93,6, soit-3,3 en tout. Bien sir, avec d'autres valeurs et d'autres poids, on pourra tomber sur un tout autre résultat, au sein du meme réseau et dans une plage trés variable. Ce n'est pas pratique, d'autant que les autres couches procéde- ront au meme genre de calcul, on pourra vite se retrouver avec des valeurs ingérables. 64 | HackapLe macazine nist La solution & ce probléme serait donc de prendre le résultat du calcul et d’en faire quelque chose de borné et de gérable. L'idéal serait une fonction qui nous permettrait de rapporter n'importe quelle valeur entre moins 'infini et plus Pinfini a quelque chose entre 0 et 1, de préférence de facon non linéaire, Une fonction qui nous permettrait, d'écraser nos valeurs est juste- ‘ment la fonction sigmoide, que nous notons f(). Ainsi, pour ramener notre calcul dans la plage de 0 1, nous n’avons quia faire f43°2,1 + 24*-3,9) qui nous retourne 0,03557. Cette valeur sera alors utilisée avec les poids des connexions aux neurones de la couche suivante et se propagera dans Ie réseau de la méme maniére, grice ala ‘méme fonction activation. De maniére plus formelle, notre fonction dactivation si moide s'applique a la somme pondérée des entrées du neu- rone. Cette somme est souvent completée d'une valeur plémentaire nommée bi qui permet de « prédisposer » un neurone & étre actif ou non. est un paramatre complé- mentaire permettant de contrd- Jer le comportement du réseau, mais nous en ferons ici abstrac- tion, pour simplifier les choses. Comme vous pouvez le voir, la base, il ny arien debien complexe, en particulier au niveau des mathématiques (mais nous ne parlons pas ici réseaux de neurones > Découvrez les réseaux de neurones avec Arduino AS optimisation et done, dela raison pour laquelle la fonction sigmoid est choisie). La ques- tion qui se pose réellement & ce stade est: comment ajuster les poids de chaque connexion, de ‘maniére a ce que les neurones dela couche de sortie nous donnent une réponse, la plus exacte possible ? 2.2 Comment le réseau de neurones apprend-il? La réponse a cette épineuse question est simple: nous avons pas a régler quoi que ce soit, cest au réseau de trouver Jes valeurs qui conviennent, via ‘un entrainerent. En initialisant le réseau avec des poids aléatoires, nous allons cobtenir un résultat médiocre ct inutilisable. Imaginez, par exemple, un réseau ayant pour entrée deux valeurs, disons des relevés de température & diffé- rents endroits d'une machine infernale de votre création et en sortie, deux neurones vous indi- {quant si tout va bien ounon, Ces neurones de sorte ($1 et $2 sur Je schéma en figure 3), comme tous ceux des couches cachées (N1 et N2, par exemple), utilisent Ja fonction eactivation que nous vvenons de voir et done, four- nissent une valeur entre O et 1. Vous entrez alors deux valeurs que vous savez étre indicatives @’une situation par- faitement normale et attendez wow nackabl done que le neurone de sortie indiquant que tout va bien délivre 1,0 et que celui indiquant que tout part en vrille donne 0,0. Mais comme tous les poids sont aléatoires, disons que vous obtenez respectivement 0,7 et 0,4. De ces valeurs totalement fausses, il est possible de tirer une information capitale : une erreur. 0,7 devrait étre 1,0, nous avons donc une erreur de 0,3, car il ‘manque 0,3 pour avoir un résultat juste, et 0.4 devrait étre 0,0 et avons une erreur de-0,4, Nous pouvons nous servir de ces now- velles valeurs, pour décider de la fagon de changer le poids des connexions en entrée de ces deux neurones. Il existe plusieurs techniques, impliquant plus ou moins de notions mathématiques en fonction du niveau d'optimisation recherché. Gardez a Vesprit qu'un tel réseau peut étre massif et qu'il est done important de ‘minimiser les temps de calcul, tout en reposant, parfois, sur des fonctionnalités mises & disposition par certains matériels (GPU, en particulier). A pant de erreur que nous constatons, nous pouvons savoir «quel devrait étre le résultat de la fonction activation de chaque neurone de sortie. Comme celle-i est parfaitement connue, nous pouvons également connaitre Fimportance de chaque poids dans ce résultatet done, déterminer dans quelle mesure chacun deux evra étre chang, pour avoir un impact bénéfique sure résul- tat, Ce nest pas tout, car pulsque nous savons quel devrait ere chacun des poids et comment ils sont appliqués au résultat de la fonction activation d'un neurone de la couche précédente, nous pouvons caleuler Verreur dans cette fonction et ainsi répercuter es changements aux poids des connexions qui composent leurs entrées. Ceci se complexifie sans méme ajouter de mathématiques, ‘mais il est possible de résumer les choses simplement, Leerreur que Fon constate est utilisée pour ajuster des éléments de la couche de sortie. Cette correction nous permet de déduire une erreur dans la couche précédente. Et celle-ci est alors utllisée pour déduire des ajustements a faire, et ainsi de suite. La cor- rection se propage dans le sens inverse du fonctionnement normal du réseau. Cest le concept de rétropropagation ou backpropagation en anglais Une fois tous les ajustements effectués de cette maniére jusqu’’ la connexion entre la couche «entrée et la premiere ‘couche cachée, un nouvel essai est fait et une nouvelle erreur est constatée. Une nouvelle phase de rétropropagation s’en suit et ainsi de suite, jusqu’a avoir un niveau minimum erreur avec le jeu de données utilisé. L'ensemble de cette procédure répétitive HACKABLE MAGAZINE N‘31 65 wo ud La plupart des exemples pédagogiques 'uciisation des réseaux de neurones reposent sur la reconnaissance decriture ‘manuscrite,car il sagit dun probleme éndralement considere comme difficile. ‘Un test devenu standard au fil du temps consiste a utiliser la base de données MNIST, regroupant quelque 60000 images de 28 pisels de cate. Ce jeu de données peut dire ‘u comme le terrain de eu d'un concours mondial visant& obtenir un taux derreur _ NOUVELLE RUBRIQUE ROBOTIQUE & IA ‘plus bas possible, mats les applications Dratiques sont relativement limitees, parrapport aux solutions deja utilisées Industriellement DAISARWL-O DwVSOurWp—-o D¥tegcunec waleakaw—-& aay nyewere IwVAISKHSHYPNO SHieruatey-a 0 1 2 3 4 s 6 x x 7 forme l'entrainement du réseau de neurones, jusqu’a ce que le taux d’erreur soit & son minimum, Le réseau peut alors étre utilisé avec des données nouvelles, que celui-ci n’a jamais vues, ‘mais il devrait fournir des résultats, ou prédictions, avec le méme taux d'erreur minimal. Bien entendu, lentratnement dépendra du jeu de données utl- lisé. Il doit étve représentatif de la classification que nous souhai- tons obtenir et assez grand pour entrainer correctement le réseau {de neurones. Entrainer un réseau avec une base de données de chiffres manuscrits comme MNIST ne servira a rien pour recon- naitre des lettres, pas plus que d'utiliser des échantillons incom- plets. Inversement, le surapprentissage peut également étre un probleme, puisque le réseau se comportera alors comme une table de correspondance entre les éléments du jeu de données et les résultats Il reconnaitra a la perfection les échantillons d’en- ‘ralnement, mais ne sera pas capable d’en traiter correctement ‘de nouveau, car ils ne seront pas assez « parfait », 3. UN TOUT PETIT PEU DE MATHEMATIQUES Comprendre le fonctionnement général d'un réseau de neu- rones est important afin d'éviter d'utiliser aveuglément une bolte noire, sans comprendre pourquoi les résultats obtenus ‘peuvent s'aveérer justes ou faux. Creuser davantage en revanche ne présente aujourd'hui, & mon sens, que peu d’intérét, a moins de vouloir se passer de tous développements préexistants et reconstruire quelque chose de neuf, en se basant uniquement HACKABLE MAGAZINE N‘31 SeITarUP\S 2MTRALUK~O Sv r eA eun—d 2AVADLOL~O SeAeHSUHALS SHVOQUZU PHS SAN HHEOPLO Pet ensuyr~o sur les publications scienti: fiques des 10 derniéres années. Pour autant, la plupart des développements existants ‘utilisent des techniques qu'il est intéressant de connaitre, ppuisqu’elles peuvent étre chok- sies comme options de configu- ration dans un certain nombre de frameworks. La fonction @activation est un excellent exemple, car méme sile sig- moide est trés populaire, i existe quantité alternatives. La fonction Heaviside, par exemple, fonctionne en « tout- ou-rien ». Rappelez-vous que la fonction d'activation est uti- lisée sur la somme pondérée des entrées du neurone, que ‘nous allons ici appeler x, Avec Heaviside, 3) est 0 six est infé- rieur 8 0et 1 sixest supérieur ‘ou égal 80, On se retrouve done avec un neurone qui fonctionne comme un interrupteur. Une autre fonction, de plus en plus uilisée, est ReLU pour «Unité de Rectification Linéaire » wow.ed-diamond.com VOUS ! 4 MAGAZINES/AN 42. au lieu de 51,60 € FRAIS DE PORT OFFERTS ‘Pr TIC en Euros ance Mévopoltaine DISPONIBLE EN VERSION PN a eT FLIPBOOK DISPONIDLE EN VERSION PAPIER OU FLIPBOOK DISPONIGLE EN VERSION papiER OU FLIPEOOK Prix kiosque Prix kiosque 51,60€ 99,00€ + Economie + Economie a6oe € se0e DECOUVREZ LE FLIPBOOK ! 3i5i.:-ciamona.com BULLETIN D’ABONNEMENT JE MABONNE A JE REGLE wn € | COORDONNEES DE L'ABONNE HACKABLE MAGAZINE sous C offre txt - 4 numéros pour 42 €* (papier) Oo ar cheque pbancaire t re numéros pour ipboot ouppsealaloreire. = O offre nna-4 ears vino des Editions Diamond brénom JE MABONNE A HACKABLE (uniquement France nde MAGAZINE ET LINUX PRATIQUE et DOM TOM) Oot paper meron et ruméros pour 1 Pour tes reglements par | code Postal Dy Offre Ka 4 numéros et 6numéros pour virement, veuillez nous Vie 81 € (Fipbook) contacter par e-mail : Pays: “roc an Gir ac oat Fee Fial@ed-diamend.com | Téléphone opal ope fae ore Soponser en ge Garusanes Pre Acouper ou recoper et rervoyer avec votre +33 (0)3 67 10 00 20 réglernent 9 Les Editions Diamond service des Abonnements [1 Jiatorise Gwurtinux Magazine a me contacter par 16, Place dela Cathedrale 68000 Colmar = France ‘email ou par telephone RETROUVEZ TOUTES NOS OFFRES SUR : WWwW.ed-diamond.com ! HACKABLE CONSULTEZ ~MAGAZINE~ _ EN NUMERIQUE! ete} I Tea -.CELUI D'AUJOURD’HUI ET CEUX D’HIER... ewe eed Uo RENDEZ-VOUS SUR: connect.ed-diamond.com réseaux de neurones > Découvrez les réseaux de neurones avec Arduino AS (REctified Linear Units en anglais) qui utilise tout simple- ‘ment f(x)=x, mais limite cette fonction aux valeurs de x supé- rieures ou égales 80. La fonc- tion activation retourne done directement la somme pondérée des entrées du neurone, mais ‘uniquement si elle est positive. ‘Notez que f(x)=x est également une fonction d'activation utii- sable, cesta fonction rampe. Plus dune douzaine de fonctions d’activation sont référencées comme usuelles sur Wikipédia et il est pro- bable qu’en utilisant un fra. ‘mework trés complet comme TensorFlow, vous pourrez choisir celle que vous pensez Ja plus appropriée pour votre application, Il arrive également {que vous ayez le choix avec de petites bibliothéques relative- ‘ment modestes. Endehors de ces fameuses fonctions d’activation, un autre élément récurrent dans les documentations de fra- _meworks et de bibliotheques concerne la fagon de mesurer Jes performances du réseau, lors de son entrainement, Dans notre précédent exemple, nous avions seulement deux neu- rrones pour la couche de sortie et mesurer lerreur était trivial. Avec un réseau de neurones destiné & la classification, il y aura souvent autant de neu- rrones que de classes. Ceci est particuliérement vrai lorsqu'il sSfagit de reconnaitre des élé- ‘ments graphiques, comme des wow nackabl images de lettres ou de chiffres. Pour mesurer les performances ddu réseau, il nous faut une valeur unique représentative de ensemble des sorties. Celle-ci est généralement calculée sous la forme d'une erreur quadratique moyenne ou MSE en anglais (pour Mean Squared Error), Derriére ce terme, qui peut sembler ésotérique, se cache quelque chose de relativement simple : une somme de carrés. Si ‘nous imaginons six neurones pour la couche de sortie, chacun, eux correspondant a une classe dans laquelle doit étre ran- .gée une entrée du réseau de neurones, nous souhaitons idéa- Iement qu'une seule de ces sorties vaille 1,0 et les cing autres 0,0. Pendant lentrainement du réseau et aprés application de la fonction dactivation sur les neurones de la couche de sortie, ‘nous pouvons cependant avoir quelque chose comme 0,32, 0,10, 0,05, 0.90, 0,41 et 0,18. La somme, 1,96, ne nous apprend rien intéressant, car, apres tout, nous pourrions avoir la meme chose avec d'autres valeurs d'activation, voire obtenir 1,0, alors quiilne s‘agit absolument pas de cing 0,0 et d'un 1,0, La solution consiste done a prendre chaque valeur obtenue de la fonction dactivation, lui soustraire 0,0 pour chaque neu- rrone qui devrait étre inactif et 1,0 pour le neurone qui devrait nous indiquer la bonne prédiction, puis élever le résultat au carré, avant de tout additionner : (0,32 - 0,0) + (0,10 - 0,0)? + (0,05 - 0.0)? + (0,90 1,09 + (0,41 - 0,0) + (0,18 - 0.0)? = 0,3254. Cette valeur est erreur quadratique moyenne, qui doit tendre vers zéro, plus le réseau est entrainé et fonctionne correcte- ‘ment. 11 s‘agit d'une valeur unique indicative des performances (ou de la précision) de Vapprentissage. Cette approche de la mesure de la performance du réseau durant Fapprentissage est un élément permettant d'appréhen- der ensemble du réseau d'une fagon plus « académique ». En effet, nous avons 1a un ensemble de fonctions d'activation ayant cchacune ses arguments et paramétres, découlant vers un résultat devant idéalement étre 2éro, En d'autres termes, nous avons une fonction géante avec une myriade d'arguments dont Ie résultat doit étre nul, soit flarguments)=0. Nous entrons alors dans le domaine purement mathématique, en tentant de résoudre une équation et plus exactement, en voulant minimiser cette fonction. Si vous vous rappelez de vos cours de seconde, vous savez que si cola est relativement simple a faire avec une fonction & un seul argument, il n’en va pas de méme avee quelque chase d’aussi complexe qu'un réseau de neurones, ot les poids des connexions sont autant de variables impactant le résultat. HACKABLE MAGAZINE N‘31 69 wo Ere iuud "NOUVELLE RUBRIQUE ROBOTIQUE & IA aN TCS34725 RGB ae aa Sa) INT a RT TT) Pour éprowver ta qualteé deVapprentissage de notre réseau de neurones, nous allons leconfronter ‘des données bien réeltes, rovenant de mesures faites avec ce module de chez Adafruit. 70 | Hackasce ak OF af oe oy ‘Une solution utilisée est Palgorithme du gra- dient stochastique (gradient descent) et c'est un terme que I'on retrouve souvent pour décrire les algorithmes utilisés pour la rétropropagation et done, !apprentissage. Ceci implique une masse de calculs importante sur des matrices et vecteurs, ainsi que utilisation de fonctions @'aetivation ayant des caractéristiques particuliéres, comme le fait d'etre dérivable, On comprend alors instar tanément pourquoi certains types de matériels comme les processeurs graphiques (GPU), les puces spécialisées (TPU) ou méme simplement, un nombre important de caeurs dans les processeurs sont bénéfiques. Le parallélisme est la clé de la performance, pour ces algorithmes et méthodes de calcul. MAGAZINE N'31 4. ET MA CARTE ARDUINO, ALORS ? Par cette introduction, certes sommaire, vous aurez compris, que « réseaux de neurones » rime apparemment avec « des tonnes de maths » et « grosse machinerie ». En réalité, ce n'est pas tout a fait vrai car les maths peuvent étre prises en charge par des bibliothéques et la puissance de calcul n’est ‘qu'une solution pour économi- ser Fautre précieuse ressource utest le temps. Crest ainsi qu'il est parfal- tement possible, en restant une échelle raisonnable, employer cette technologie prometteuse sur quelque chose aussi modeste qu'une carte Arduino UNO. Pour démontrer cela, nous allons établir un seé- nario fort simple : entrainer un réseau de neurones sur la base dune correspondance entre un jeu de valeurs de rouge, de vert et de bleu et Ie caractére chaud ou froid de la couleur issue du mélange. Notez que la notion de cou- leur ou de tons chauds ou froids n'est absolument pas scientifique. Il s'agit de quelque chose d'utilsé dans tes arts sgraphiques etjou la décoration, {qui est avant tout une impres- sion, une convention ou, au ‘mieux, un effet psychologique. Rien done de réellement cal- culable... Ajoutons a cela que la répartition entre les teintes wow.ed-diamond.com réseaux de neurones > Découvrez les réseaux de neurones avec Arduino AS chaudes et froides se fait géné- ralement dans le cercle chro- ‘matique, qui peut étre exploré sous la forme d'un modéle utilisant les composantes que sont la teinte, la saturation et la valeur (TS¥). Il existe des formules et algorithmes de conversion de valeurs RVB & ‘TSV et inversement, mais nous nous en passerons. Il sera a la charge du réseau de neurones de se débrouiller avec ce quill Enfin, comme il serait trop facile de tester le résultat avec des valeurs choisies, nous allons entrainer le réseau avec des données arbitraires (et idéates), mais le mettre a épreuve avec celles prove- nant d'un capteur de couleurs cet donc, avec des mesures réelles, Le matériel utilisé sera un capteur TCS3472, vendu sous la forme d'un module par Adafruit et interface en ize Celui-ci comporte le capteur Jui-méme, une LED blanche controlable par un GPIO et un circuit @alimentation permet tant de l'utliser aussi bien en 5 volts qu’en 3,3 volts 5. CROQUIS POUR L'ENTRAINEMENT Coté réseau de neurones, nous reposerons sur la biblio- théque NeuralNetwork de George Chousos, qui est directe- ‘ment installable depuis le ges tionnaire de bibliotheques de wow nackabl VIDE Arduino. Cette bibliothéque est simple d'utilisation, économe ‘en mémoire et la fonction dactivation utilisée est le sigmoide. Nous allons créer un réseau composé de 3 neurones sur la couche d'en- trée pour les valeurs de rouge, de vert et de bleu, un neurone sur la couche de sortie indiquant sila couleur est chaude ou non, et deux ‘couches cachées de 12 neurones chacune. Ceci se fera trés simple- ‘ment, juste aprés Vinclusion de a bibliothéque dans le croquis include fdefine ITER 4000 unsigned int couches[] = (3, 12, 12, 1); float *sorties; ‘La macro ITER est définie pour un usage ultérieur et correspond au nombre d'itérations de la procédure de rétropropagation. sorties est un pointeur qui nous permettra de connaitre le résul- tat de la fonction d'activation sur le neurone de sortie, Notez que nous n’avons pas a établir les connexions entre les neurones, contrairement & approche d'autres bibliothéques comme neural- Duino. Ce simple tableau couches sulfit structurer tout le réseau, Pour entrainer notre petite création, nous devons préciser un jeu de données, chose que nous faisons sous la forme d’un tableau a deux dimensions const float entrees{6] [3] = { {1.00, 0.00, 0.00), // Roucs {0.00, 1:00, 0.00), // VERT {0.00, 0.00, 1.00), // BLEU {1:00, 1:00, 0.00}, // JauNE {0.00, 1:00, 1.00), // cyan {1:00 0.00, 1.00), // MAGENTA CChaque ligne correspond & un ensemble de valeurs rouge, vert et bleu dont le mélange produit les couleurs données en commentaire. Pour faire correspondre ces données avec un résultatattendu une fois Ie réseau entrainé, nous déclarons un autre tableau const float sortiesAttendues[6] [1] = ( (1), // ROUGE {0}, // VERT {0}, // BLEU {1}, // JUNE, {0}, // C¥AN (1), // MAGENTA HACKABLE MAGAZINE N‘31 ” Ere iuud emodule «868 ae {Un correspond ie au fat aa aqme couleur soit considérée constitue d'une Imatrice de photodiodes parfaitem Ssurce gros plan. La lumigre arrivanc sur lecapteur et captée parle petit rectangle au centre, puis convertie en données ues par la carte Arduino, an ‘comme chaude (rouge, jaune ‘et magenta) et un 0 4 une cou- leur froide (vert, bleu et cyan. ‘Remarquez que le magenta est, dans certains cercles chromatiques, ‘considéré comme une couleur «limite », comme le vert jaune, car elle se trouve a la frontiére entre les deux catégories. Le violet en rrevanche est généralement classé ‘comme étant une couleur froide est filerée ‘Tout est présent prét pour centrainer le réseau et obtenir un premier résultat. Tout se passera dans la fonction setup(), 8 com- mencer par la création effective du réseau: void setup() { Serial. begin (115200) ; NeuralNetwork NN(couches, 4) ; [Nous instancions Pobjet NN en. spécifiant en argument le tableau ‘que nous avons précédemment ‘déclaré, ainsi que sa taille. Ine nous reste plus qu’a lentrainer HACKABLE MAGAZINE N‘31 ROBOTIQUE & IA for (int 4 = 0; 4 < ITER; i++) ( SE (48 (TER/100)==0) { Serial. print ("Entrainement Ser: print (4/ (2TBR/100) ); Serial. println( ) for (int j= 0; 4 <6; 344) WN. FeedForward (entrees (j]) ; ‘NW_BackProp (sortiesAttendues(3]) ; ) Cette simple boucle est principalement consti- tuée de deux étapes. Dans un premier temps, nous présentons les données au réseau (méthode FeedForward()) ete neurone de sortie, ainsi que tous les neurones cachés, utiliserons intialement des valeurs de poids (et de bias) aléatoires. ensemble du réseau se trouvera alors dans un certain état, qui sera immédiatement utilisé pour la phase de rétro- propagation (BackProp()). Alimenter le réseau se fait en spécifiant les données & utiliser, mais la rétro- propagation utilise le résultat que nous souhaitons obtenir. Lopération est ainsi répétée le nombre de fois correspondant la valeur de ITER. La condition if en début de boucle n'est la que pour nous permettre de suivre la progression de apprentissage, en nous indiquant un pourcentage de progression. En effet, cette phase est relativement lente, en particulier en utilisant beaucoup de neu- rones, et done de connexions/poids, comme ici. Pour ce croquis d’exemple, cette simple boucle mettra quelques 7 minutes a s'exécuter entiérement. ‘Mais une fois que le processus d’entrainement est terminé, nous pouvons immédiatement tester le rrésultat en réinjectant notre jeu de données for (int 1 = 0; £< 6; iM) ( sorties = NN Feedforward (entrees [i]) ; Serial.print (4); Serial print(*:"); Serial.printin(sorties(0], 7); Enfin, puisque Fentrainement est relativement Jong, nous navons pas envie de le répéter & chaque wow.ed-diamond.com réseaux de neurones > Découvrez les réseaux de neurones avec Arduino AS utilisation du réseau de neurones. Nous souhaitons donc obtenir la liste des poids de chaque connexion pour une utilisation ultérieure. Fort heureusement, la bibliothéque met & notre disposi tion une méthode pour cela, dont 'appel conclura notre fonction setup() : Une fois le croquis compilé et chargé dans la carte, le moniteur série nous indiquera la progres- sion de Pentrainement et finira par afficher le résultat du test avec le jeu de données fourni (horo- ddatage est activé ii dans le moniteur) 10 10 7-733 > Entrainement 0% [179 -> Entrainement 13 10 [658 -> Entrainement 2% 10 => Entrainement 3% [ 10 9972061 10 10058303 10 ‘0066308 10 19937487 10: 10 l. 10009738 9930828 Bien entendu, ce résultat est excellent et démontre que le réseau a bien ajusté les poids des connexions, de maniére a établir les correspondances. Ceci n’a rien de surprenant pour instant, Le reste de la sortie découlant de lexécution de NN. print () se présente ainsi 12| bias:1.00 W:-3.2345151 W:0.1309597 W:0.5248704 W:1.7743554 | w:-111128615W:-i.0229023 W:1,0439237 W:-0.9548942 W:-0.7500634 W:-0,2013842 W:-0.2736966 W:0.6675353 W:1,244508 w:-0.8756721 w:0.0717406 W:1.2812261 W:-110434827 W:0.1039599 W:0.0799494 W:-0.1168651 W:0.4985597 2 12| bias:1.00 W:0.2504118 W:-0.0748784 wW:0.1988482 W:0.3846305[ vl 2 1] bias:1.07 1 2 3 a 5 6 7 i u 1 t 121 1 W:0.8991649 W:-0.6896954 1,5418012 W:-0.5206812[ Les poids des différentes connexions entre neurones sont listés et groupés par couche avec, res- pectiverent, les 36 connexions des 3 neurones dentrée aux 12 neurones de la premiere couche cachée, les 144 connexions des 12 neurones de la premiére couche cachée aux 12 dela seconde, et enfin, les 12 connexions des 12 neurones de la seconde couche cachée & unique neurone de sortie. [Nous avons également une mention du biais utilisé avec chaque neurone des différentes couches uti lisant une fonction d'activation (et done pas la couche d'entrée). wow nackabl HACKABLE MAGAZINE N‘31 73 00 Ere iuud "NOUVELLE RUBRIQUE ROBOTIQUE & IA Wait Controt Interrupt > wr v IR-Blockng oo Fier Upper Limit GBC Control ato Clear ADC | Clear Data Qe] [clear g > Red ADC | Red Data | Ltowertimt |" | 2 Red i i Green ADC | Green Data | ————»] © Green let soa sal] = Bree LBtse see [eu bata |}——> ano (| St 1 oe Le capteur TCS472 et ‘capable de fournir des Informations sur tes composantes de couleurs détectées grace a des photodiodes équipées aun flere de couleurs. Des convertisseurs ‘analogiques numériques sont ensuite utilises pour structurer les donnees et les presenter sur le dus Ze. Nous pouvons ‘ins obtentr tes valeurs derouge, de vert et de Dieu, mais également tune représentation de Vintensitélumineuse non filerée notée «clea ‘dans la documentat Cette sortie peut étre copiée-collée, puis légérement reformatée, afin dinitialiser un réseau similaire, destiné a traiter des données futures. Et est précisément ce ‘que nous allons faire avec un second croquis. 6. CROQUIS POUR L'UTILISATION lel, plutot que d'utiiser des valeurs collectées pour tester notre réseau de neu- rrones, nous allons travailler « en live », Nous allons connecter le capteur de couleurs et Finterroger pour obtenir les valeurs R, V et B, puis les présenter en entrée du réseau. Celui-ci se débrouillera alors pour déterminer sila couleur & proximité du capteur est chaude ou froide. La bibliotheque permettant d'utliser le module Adafruit 1C83472 est installable depuis le gestionnaire de bibliothéques et son utilisation est relativement simple. Pour ce nouveau croquis, nous commengons done par inclure les bibliothéques utiles et déclarer macro et variables globales : Hinclude finclude Hinclude fdefine LEDB 7 Adafruit 10834725 tos = Adafruit_1CS34725(TC834725_INTEGRATIONTINE_SOMS, TCS34725_GAIN_4X) ; const unsigned int couches{] = (3, 12, 12, 1}; float *sorties; float entrees [3]: TA | Hackapte macazine nist wow.ed-diamond.com réseaux de neurones > Découvrez les réseaux de neurones avec Arduino AS La broche permettant de contréler la LED blanche d’éclairage de Péchantillon est la 7 et est définie via la macro LEDB. objet ‘tes représente notre capteur et nous Vinitialisons avec deux arguments de configuration sans grande importance ici (le délai intégration et amplification souhaitée). S'en suit la déclara- tion des couches de notre réseau de neurones, la sortie du réseau et un tableau pour les entrées, comme précédemment. Notez que nous ne comptons utiliser qu'un seul jeu de données a la la fois et avons donc pas besoin d’un tableau de float a deux dimensions. lest important ici de comprendre, méme si c'est parfaitement Jogique, qu'il est impératif que le réseau de neurones déclaré ait strietement la méme structure que celle uilisée pour Ventraine- ‘ment. Ala différence du croquis précédent, nous allons intialiser ce réseau avee des valeurs de poids et de bias, et done placer le réseau exactement dans Ie méme état que celui oii se trouvat, au terme de son entrainement. Pour cela, nous allons réutiliser les valeurs listées au terme de Vexécution du cro- quis précédent. A commencer par les biais : const float biais{] = (1.00, 1.00, 1.07); Puis, nous passons aux poids // 3*12 + 12412 + 1241 const float poids{] = ( -3.2345151, 0.1309597, 0.5248704, 1.774354, -1.1128615, -1.0229023, 1.0439237, -0.9548942, -0.7500634, -0.2013842, -0.2736966, 0.675353, 1.3244508, -0.5756721, 0.0717406, Jene listerai pas ici 'ensemble de la déclaration, qui est assez massive (192 floats). IL ne s'agit que d'une longue liste de valeurs séparées par des virgules, issues d'un rapide reformatage de la sort d'ajouter une méthode je que nous avons obtenu. Il pourrait @ailleurs étre intéressant printarray() a la bibliothéque, affichant directement une déclaration de variables, afin de facliter 'intégration de ces valeurs dans un nouveau croquis. Lanotion de couleurs chaudes et froides hénoméne physique. Msagit d'une simple ‘question de perception etde convention, ‘impliquant que ‘suggerent une sensation de falors que d'aueres voquent plutst le Froid. HACKABLE MAGAZINE N'31| 75 <3. ROBOTIQUE & IA ~ Le constructeur prend en argument le tableau de couches, les poids, les biais et le nombre de couches. A ce stade, notre réseau, représenté par Pobjet NN, est prét a étre utilisé. Mais avant cela, nous devons nous occuper de la gestion du capteur dans la fonction setup() : void setup() { Serial.begin(115200) ; pinklode (7, LEDB) ; Af (1tes.begin()) ( Serial println("Erreur 7CS34725 1"); while (1); ) » Rien de bien exceptionnel ii, il s‘agit d'une simple initialisation assez classique, La part impor- tante et intéressante se trouve dans Loop() oii nous lisons les valeurs du capteur sous la forme 'entiers longs (uint16_t),les convertissons en valeurs a virgule flottante (Float) et les passons en entrée de notre réseau de neurones : void 1oop() { uintl6é_t rouge, vert, bleu, tout; // Lecture capteur digitalWrite(LEDB, HIGH) ; delay (300) ; tcs.getRawData(trouge, évert, sbleu, stout); digitalWrite(LEDB, LOW) ; // Composition des entrées entrees [0]=(zouge*1.0) / (rougetverttbleu) ; entrees [1]=(vert*1.0) /(rouge+vert+bleu) ; entrees [2]=(bleu*l. 0) / (rouge+vert+bleu) ; // Utilisation du réseau sorties = NN.FeedForward (entrees) ; I REfichage Serial.print (rouge) ; Serial.print("/"); Serial.print (vert); Serial.print("/"); Serial.print (bleu) ; Serial.print(" "); Serial. print (sorties [0]>0.52"Chaud (":"Froid Serial print (sorties[0], 7); Serial printin(")"); aelay (500) ; HACKABLE MAGAZINE N‘31 wow.ed-diamond.com > Découvrez les réseaux de neurones avec Arduino AS Lerésultat, pointé par est alors utilisé pour déterminer ‘agit plutét d'une couleur chaude ou froide. Une fois le eroquis chargé dans la mémoire du microcontréteur, on peut alors s'amuser a tester le réseau, en approchant divers objets du capteur. Voici quelques résultats + C16 USB rouge : + Pince a papier jaune + Relais plastique bleu wou hackable.fe HACKABLE MAGAZINE N‘31 7 2 Ere iuud Aprés ta phase apprentissage du réseau avec des valeurs RVB ‘arbitrairement cholsies, nous le imettons & Véprewve avec des objets de Ta viecourante. Etonnamment, Terésultat est excellent, alors ‘meme que certaines ideces couleurs rnefatsaient fabsolument pas partie du jeu de données entrainement (orange et rose, en particulier) "NOUVELLE RUBRIQUE ROBOTIQUE & IA + Cable monobrin violet 1983/1975/2774 Froid (0.2626151) + Paire de ciseaux orange : 7399/3805/2057 Chaud (0.9459796) + Bouchon de liquide e-cigarette fuchsia clair 4206/1695/2574 Chaud (0.8851174) *Connecteur VGA bleu 631/748/978 Froid (0.189625) + Manche de couteau en bois 4945/3796/2566 Chaud (0.775171) + Stabilo Boss rose 5404/1594/1987 Chaud (0.965526). Ces résultats sont assez intéressants, car un certain nombre de couleurs présentées n’ont pas fait partie du jeu de données d'entrainement, comme orange par exemple. De manidre générale, les valeurs lues par le capteur rront, rien d’aussi parfait que celles utilisées avec le croquis pré- cédent. Le rouge, par exemple, ce n'est pas 100% rouge. Mais plus étonnant encore, le fuchsia clair, trés proche du magenta, est classé avec une relative certitude dans les couleurs chaudes (88 %), alors que le violet se retrouve 78 | HackasLe macazine nist classé dans les couleurs froides, de maniére tout aussi affirmée ‘Nous rvavons jamais appris cela au réseau de neurones, et pourtant, il fait le travail cor- rectement, Pourquoi ? Je n’en ai pasla moindre idée, CONCLUSION Nous venons de le voir, il est possible d'obtenir des résultats intéressants avec un réseau. de neurones trés simple, pour un usage trés spécifique. Changer d’échelle nous mene des choses comme AlphaGo et d'autres réalisations hyper ‘médiatisées, mais nous sommes trés loin du fantasme. Les technologies courantes ne permettent que de eréer des wow.ed-diamond.com > Découvrer les réseaux de... AD intelligences artificielles dites « fables», desti- rnées A accomplir une tache précise, precio aha aan hee Ss tinlenatapationn opens fpaitmdien clara roams euiesns es to communle yore da ypestqucuvent rN LODG es ment perdu sles qu on sor cae = treslimit, ala base de eur ration Hen va de TF Lay ‘méme pour Alexa (Amazon), Cortana (Microsoft), eee Bixby (Samsung) ou Google Assistant. Demandez: leur une recette de poulet et tout ira bien, posez~ leur une question de philo du bac de cette année, et rien neva plus, Le fantasme, lui, porte en réalité sur le concept intelligence artificielle forte, capable de com- prendre son propre raisonnement et, de ce fait, Yaméliorer et a'étre doté d'une réelle conscience. n parle également tantét dintelligence artfi cielle générale et certains ont méme donné un ‘nom au moment précis oi cette fameuse intelli gence déclencherait une accélération exponen: tielle de P’évolution technologique (sous-entendu pour son propre bénéfice) : a singularité tech nologique. Il en résulterait une super-intll gence, dépassant de loin les capacités humaines, omnisciente, toute puissante et dont les inten- tions a notre égard seraient, par définition, incompréhensibles. iii Pa UT I ieee Mais entre le fantasme et la réalité ly a litté- ae DEEP LEARNING ceceecnsceasete, DLA THEORIE ALA PRATIQUE borné, il reste du travail a accompli. wou hackable.fe ~ 80 RADIO & FREQUENCES PETITES ANTENNES REALISEES PAR IMPRESSION ADDITIVE : DE LA CONCEPTION A LA VISUALISATION DES DIAGRAMMES DE RAYONNEMENT (EN VRAI ET EN VIRTUEL) J-MFriedt-FEMTO-ST département temps-fréquence (Besangon), consultant avec a société SENSeOR £, Carry-FEMTO-ST département temps-fréquence (Besancon) 0. Testault- FabLab des Fabriques (Besancon) Les antennes de petites dimensions sont un sujet quia toujours été Ala mode auprés des ingénieurs, désireux de faire rayonner un signal électromagnétique par un conducteur de dimensions aussi réduites que possible (penser « faire tenir une antenne dans un téléphone portable »). Le probléme a été abordé trés t6t, alors que les émissions sub-MHz, donc avec des longueurs d’onde de plusieurs kilometres, étaient courantes [1]. Alors qu’il a été rapidement montré qu'il existe des limitations physiques aux performances de telles antennes, qui ne sont déterminées que par le rayon de la sphére englobant Pantenne [2] - et en particulier, sur le facteur de qualité de ’antenne, qui est «autant plus élevé que l’antenne est petite, réduisant ainsi sa bande passante— le sujet reste d’actualité, dans un contexte de prolifération des objets communiquant par onde radiofréquence, de plus en plus petits [3]. HACKABLE MAGAZINE N‘31 wow.ed-diamond.com antennes > Petites antennes réalisées par impression additive a conception de telles antennes n'a que peu dintérét sion en eroit [4], qui réduit toute petite antenne & une sphere «A small coil wound on a per- {fect spherical magnetic core is conceived as an ideal small antenna ». Le probleme est & peine plus subtil, sion désire adapter en impédance a une charge qui doit transmettre efficacement sa puissance & ce petit élément rayonnant. Comme toute antenne efficace se résume & un dipole [5], la question est de savoir com- ‘ment tordre suffisamment un dip6le pour le faire rentrer dans a sphere, Comme les interactions en champ proche (Le. une distance bien plus petite que la longueur donde) seront prédominantes dans une telle conception, les solutions analytiques seront peu exploi- tables et nous devrons nous appuyer sur des simulations ‘numériques, pour estimer la fréquence de fonctionnement et Fimpédance de la géomé- trie d’antenne considérée. De toute facon, il nous faudra un modéle numérique pour réa liser Fantenne, done autant tout faire d'un coup : concep- tion, modélisation, réalisation, Eviderment, les logiciels char- és de ces étapes ne parlent pas le méme langage, donc des équations de base définissant la géométrie d’antenne sélection- née, notre travail consistera & sgénérer les fichiers aux diffé- wow nackabl rrents formats, pour alimenter ces logiciels, Nous choisissons cen particulier NEC2 (New Electromagnetic Code, nec2.org, disponible comme paquet nec2c dans la distribution Debian, en complément de son outild’affichage des géométries d’an- tenne et des diagrammes de rayonnement xnecview) pour Ja moddtisation électromagnétique, avec un format parfaite- ‘ment documenté et facile a générer [6] ; nous verifierons les, simulations avec le logiciel propriétaire HFSS (High Frequency Structure Simulator de Ansoft, maintenant Ansys version 13, quia le bon goat «’tre suffisamment ancien pour fonetionner sous Wine), capable notamment d’appréhender des environ- nements diélectriques hétérogenes, qui a besoin dun modéle de CAO (Conception Assistée par Ordinateur), par exemple au format STEP ; et finalement, nous voulons imprimer notre antenne, nécessitant la définition de la surface au format STL, Alors quil existe sirement des bibliothéques fort complexes pour effectuer ce travail (Le. numpy-stl, disponible & pypi.orgiproject/numpy-stl), nous nous contenterons de sgenérer les fichiers ASCII depuis GNU Octave, Nous conclu- rons en caractérisant les antennes que nous réaliserons, pour vérifier qu‘elles rayonnent & une longueur d’onde petite devant leur rayon. 1. CONCEPTION D'ANTENNE Loobjectifest done de tordre un dipdle pour Ie faire ren- trer dans une petite sphere. Pour des raisons qui dépassent, le cadre de cette présentation [7], nous désirons insérer une antenne dans un puits de diametre bien inférieur a la lon- gueur donde, et voir cette antenne rayonner vers la surface. En pratique, nous nous imposons de faire tenir Vantenne dans ‘une sphere de 10 em de diametre, ou a=S em pour une fré- quence de fonctionnement de f=200 MHz, donc une longueur donde de 2=300/f,.,,-1,5 m. Ces contraintes technologiques vviennent d'une part de notre capacité & forer un puits de petit diamétre, sans faire appel a de 'équipement lourd et d'autre part, de celle qu’a une onde électromagnétique de se propa- ger d'autant plus loin dans le sol que sa fréquence est basse : ‘ce compromis est donc classique en instrumentation géophy- sique de structures souterraines. Cet objectif répond bien & la contrainte de petite antenne, puisque 2r-a/A=0,21<< 1 (critére sans dimension, issu du produit du vecteur d'onde 2rr/A par le rayon dela sphere) HACKABLE MAGAZINE N‘31 81 a0 | RADIO & FREQUENCES Nous avions initialement —— at porté notre intérét sur ’an- we =a tenne hélicoidale, en espérant a Ia faire rayonner dans Vaxe de révolution de I’hélice. La bn. physique nous interdit ma “= heureusement un tel fone- on Y tionnement, une hélice de “ circonférence petite devant Ja longueur donde se com- portant comme un dipdle etrayonnant done dans Ia direction normate a Vaxe de révolution. Pour rayonner dans la direction axiale, il faut que la circonférence de chaque boucle soit deVordre | Sm de la longueur donde, ou a 200 Mriz une hélice de diamétre de Vordre de 50 cm, ne réponidant pas au cahier des charges de faire tenir Fantenne dans une sphére de 5 em de rayon, loin de la. La figure ci-contre illustre I'évolution des diagrammes de rayonnement, alors que la fréquence excitation d’une méme antenne hélicoidale augmente, pour passer de la forme de beignet caractéristique du dipdle (mode normal) a basse fréquence, vers un diagramme de rayonne- ment axial aux hautes fréquences. Au-del du projet qui nous intéresse, Pobjctif de faire tenir n= cos" (zn /h) une antenne dans un volume aussi réduit que possible répond ; la mode actuelle de vouloir rendre communiquant par Tn = h-sin(6n) onde radiofréquence tout et surtout nimporte quoi, avec une Xn =Tn-Sin(Pn) contrainte sur les dimensions d'antenne, qui sont en général : bien supérieures aux tailles du syst me embarqué communi- Yn=Tn-COS(Pn) quant (« smart dust » (8). Iln’y a pas beaucoup de fagons de tordre un dipdle dans une sphére : une rapide étude de la litté- Avec @, un indice angu- rature nous porte vers le Small Folded Spherical Helix [9], quiest aire définissant le nombre de finalement une antenne hélicoidale imprimée sur une sphere. _tours en fonction de la hauteur Le probléme 'imprimer une antenne sur une sphére est 2,qIvlN, NeN étant le nombre ‘qu’une sphére rest pas plate et done, un peu compliquée & de segments par hélice et ne{1..N] manipuler. article de référence qui nous fournit la description _ (ot N~1, sion ne veut pas fermer pour aborder le probléme est [9], quia lebon goit 'inclure le __at'sommetes spires oie rayon jeu d’équations paramétriques décrivant Pantene qui nous deviendra nul, posant probleme a intéresse : impression 3D). 82 | HackasLe macazine nist antennes > Petites antennes réalisées par impression additive [Nos degrés de liberté sont donc le nombre de bras de Vhélice et le nombre de tours de chaque hélice. Le passage des coordonnées cylindriques en coordonnées cartésiennes permettent de triviale ‘ment tracer la forme d'une telle antenne sous GNU/Octave 1 N=64 % segments par spire 2 hel; 3 Neours=2; 4 ne[1:0-1]/M; § N pour fermer sommet 5 for phst=0:pi/2:2%pi 4 méme vvv borne que n 6 phin=Linspace(0,Ntours*pi,N-1)¢phst; % +k*pi/2 .. 7 ench#n; & ..! pour les autres hélices 8 deltan=acos (zn/(h)) 9 enshtsin(deltan) ; 30 xnern.*sin(phin) ; 11 ynern.*cos (phin) ; 32. plot3(xn,yn,2n,'b-") ;hold on 13 ena Ayant appréhendé la conception de Yantenne, plusieurs taches vont devoir anh, dettans0, m0 maintenant étre réalisées : modéliser o Vantenne, en vue de simuler sa fone- tion de transfert et son diagramme “ de rayonnement; générer les fichiers de CAO 2D et 3D pour fabriquer cette antenne ow la simuler par éléments o finis (logiciel libre NEC2 ou proprié- taire HFSS et impression additive) ; et finalement, mesurer la fonction de oe phioed » transfert de Yantenne, pour estimer mo OS oe son adéquation a la modélisation et & as utilisation qui doit en étre faite, 2. MODELISATION D'ANTENNE : NEC2 Nous avions déja largement discuté dans les pages d'une regrettée publication cousine (6] le for- ‘mat de description d’antennes de NEC? et la fagon de simuler une antenne. Pour un rapide rappel, les cartes de configuration de NEC2 sont une succession de fils respectant quelques contraintes quant leur longueur et leur diamétre, par rapport a la longueur donde (carte GW suivie des coordonnées des extrémités, en metres), inissant par la configuration de la simulation incluant la bande de fré- ‘quence (en MHz), couverture angulaire et point d'excitation, Seule subtlité qui va nous intéresser ici: alors qu’en nous contentant de tracer le diagramme de rayonnement, i suffit de choisir des plages angulaires des coordonnées polaires couvrant plus de 360° dans les deux axes, le post-traitement que nous considérerons ici sera simplifié si nous couvrons dans l'axe des élévations de 0 a 360° et en azi- ‘mut de 0 & 180° afin d’éviter les recouvrements, lors de la génération de la surface correspondante. wow nackabl HACKABLE MAGAZINE N‘31 83 wo 10 a a2 3 14 15 16 a7 18 19 20 aa 22 RADIO & FREQUENCES Le script Octave est done modifié pour générer le fichier de géométrie d’antenne, sous forme de succession de fils (carte GW) définis par les coordonnées des deux extrémités de chaque segment et du rayon du conducteur, se concluant par la configuration de la simulation % nombre de segments par hélice nseg=5; & nombre d'éléments par segment radius=le-2; & devient 1mm aprés mise a 1'échelle de 0.1 % sonmet de 1a sphére fermée phin-Linspace (phst,Ntours*pi +1) ; zini=htn; deltan=acos (z1nt/(h)); rnehtsin(deltan) ; xnern.*2in (phin} ynern.*cos (phin) ; open (‘sphere.nec!,'w'); Eprints (£,'CM sphere antenna\aCe\n') ; segel: for kel:length (x1nt)-1 Ple[xn(k), yn(k),2n(k)]; P2=[xn (k#1) ,ym(K#1) ,2n (R41) ] 7 fprint€(£,'GH td td $f $f FE SE FE ¥E £\n!,seg,nseg,PL(2) ,PL(2) ,PL(3) ,P2(L), P2(2) ,P2(3) , radius) ; ‘seg=segtl; fprint£(f,'Ga Sd td Of SE Sf SE LE SE SE\n",seg,nseg,-Pl (1) PL (2) ,-P1(3), =P2(1) ,P2(2) ,-P2(3) , radius) ; ~ 84 23 24 25 26 21 28 29 30 31 32 33 segzsegtl; end [... on continue pour les autres spizales seg=seg-1; fprintf (£,'GS 0.0 0.1\n'); sprinté(E, GE 0\n"); % espace libre Eprints (£,'EX 0 $4 1 0 1.000008+00 0.000002+00\n' , gegex) : fprinté (£,'FR 0 30 0 0 1152+00 1.0E+0\n'); € 1 -> 100 Eprinté (£,'RP 0 73 144 0 0.00000E+00 0.00000E+00 2.500008+00 2.50000E+00\n"): fprinté (£,'EN\n'); felose(e) } Le script génére tout de suite 4 hélices imbriquées afin qabaisser Fimpédance de Fantenne et de nous appracher des 50 9 nominaux des systémes radiofréquences, Le résultat de lexécution de ce script Octave est un fichier de géométrie compréhensible par NECZ et affiché par xnecview en Fig, 1. La simulation s‘opére par nec2c au moyen de la commande nec2¢ -i sphere.nec -0 sphere. out et le résultat de la simulation est affiché par xnecview sphere. out, qui accepte aussi comme entrée le fichier de géométrie sphere. nec pour se convaincre de sa validité (Fig, 1). Cette simulation indique que Pantenne rayonne (minimum du taux d’ondes stationnaires VSWR au HACKABLE MAGAZINE N‘31 wow.ed-diamond.com antennes > Petites antennes réalisées par impression additive recur | passage & 0 de la partie imagi- naire de Vimpédance) autour de 517 MHz pour une sphere de 5 cm de diamétre. A cette fréquence, la longueur d’onde dans Pair est de 58 em, ce qui nécessiterait donc un dipéle de 29 cm de longueur : notre antenne est done bien consi- dérée comme petite, puisque ke a= 0,27. Siun plan de masse est disponible, !antenne peut tre coupée en deux au point alimentation, pour profiter des charges virtuelles miroir [10] et réduire d'un facteur de 2Yencombrement de la sphere, en formant un monopeéle. Un calcul sur un ordinateur Panasonic CF-19 muni d'un processeur i5-3320M cadencé 2,60 GHz prend environ 20 minutes pour résoudre le diagramme de rayonnement 30 fréquences différentes, ‘ou 40 secondes par fréquence simulée pour une structure ‘comportant quatre branches de 128 segments chacune. Le wow nackabl temps de calcul est done loin d’étre prohibitit our une simulation unique, mais rend une opti- misation automatique, par exemple par descente de gradient, hors de question en état. nec2e nest pas parallélisé et ne profite donc pas des ‘multiples coeurs de calcul disponibles sur les pro- ccesseurs modernes. ‘Maintenant que nous avons congu Yantenne et simulé son comportement, nous désirons la réa- liser. Pour cela, nous ferons appel a impression, additive pour imprimer le motif de hélice sur une sphére de support. 3. REALISATION D'ANTENNE EN IMPRESSION ADDITIVE : FORMAT STL Le format STL, qui décrit une surface sous forme de ses sommets et de sa normale, reconnu, par les imprimantes 3D, est largement décrit sur diverses pages web et nous ne reprendrons pas {ci sa description, sice n'est pour mentionner que le plus simple est de passer par le format ASCH, dans lequel chaque facette est encapsulée entre les balises « facet ... endfacet », entre lesquelles nous définissons la normale de la sur- Figure 1: Gauche ‘diagramme de rayonnement dans le contexte de Vantenne; ‘droite: taux d'ondes stationnaires (VSWR) et Impédance de 'antenne, ‘démontrant sa bonne ‘adaptation & 517 MEt2 (VSWR= 1) pour un rayon de 25 mm (droite) ou 129 MHz pour un rayon ‘de 100 mm (gauche), correspondanc la ‘fréquence pour laquelle lapartie imaginaire de impedance s'annule eta partie rélles'approche ide502 HACKABLE MAGAZINE N'3i| 85 A. | RADIO & FREQUENCES face enormal wx ny nz > etles sommets vertices) repair mesh..)-Une fis nor- formant le wiangle dela surface «outer Loop tales corigéeset les surfaces vertex x1 yi zi vertex x2 y2 22 vertex x3 éventuellement dupliquées él ¥3 23 endloop .Leplus simple pouridentiferle mines, nous sauvons (Export) ecteurdela normale au plan est deffectuer lero. auformat STEP Cute ape est duit vectorel entre les arrétesF(y,2)-Fxy,2,) aus occasion de manipuler eB (5,9,2)-Fxyy2),fonetion disponible sous Temoddl, en ul ajoutant des GNU/Octavesousla nomencature eress().Lerésul- structures tes qu'unsom- tatde ces travauxse vale isement dansmestiab. _ metou des jonctions entre ls Onnoteraque pour créerievolume, nous devons deux monopées, pour former dessinar 4 pirates adjacentsséparées une épais- _undiple ig. 3).ce mole seur,selonle rayon dretselonTordonnée dz g.2). en volume permet dalimen- ter HFSS et aprés ajout du port dde mesure (lumped port) entre les brins du dipéle, de simu- ler ses caractéristiques (Fig. 3), Sans faire Tapologie d'un logiciel propriétaire dans ces pages, Vintérét de HPSS est de permettre la simulation @'antennes en milieux dig- lectriques hetérogenes que [NEC2 ne sait pas appréhender, ainsi que faire rayonner des Figure2 : Prises de elec Lajout de la sphére seffectue dans FreeCAD, qui suaees Gis ave we ne en salt lire un fichier STL et lu ajouterIes diverses simule que des fils, bien qu’ smote detantenne formes géométriques habituellement manipulées soit possible de simuler une Configuration dans un logiciel de CAO. surface comme wn maillage ‘monopéle gauche), de ils) Le cas des milieux de pene permittivité homogene est plus Jormerun dipole simple, carla célérité dans ce tnt) nate 4. VALIDATION DE LA tlle ext vise parla racine vupremierpient. | SIMULATION : STEP dela permitivtéetTaxe des Sea paamat fréquences est donc multiplié rrenforcement de la Un fichier STL n'est qu'une surface. Un logiciel de autant. Une alternative libre structureen taplagant | CAO ou de modélisation d’antenne propriétaire tel & HFSS pour les milieux hété- surunesphére droite). | cue HPSs a besoin dun volume. Le passage de l'un rogenes est GPRMax3D (http! {Vautre doit garantir qu’aucune surface ouverte ne ‘www-gprmax.com),un code subsiste, laissant une incertitude sur la distinction de FDTD (Finite Difference Time entre intérieur et extérieur. Nous avons prissoin dans Domain) qui nécessite cepen- notre fichier STL de fermer les extrémités tees que les dant un maillage manuel des valide FreeCAD, dont nous nous servons pour conver. _structures et rend Yaffichage du tir STL en STEP. Pour ce faire, lancer dans FreeCAD diagramme de rayonnement un Je menu Mesh Design, charger (Open) le ficher STL et peu plus complexe, Alors que analyser son intégrité (Meshes--Analyze-Evaluate and les diagrammes de rayonne- > 86 | HackasLe macazine nest wow antennes > Petites antennes réalisées par impression additive -ment entre NEC2 et HFSS sont cen accord avec nos attentes de comportement d'un dipéle, la fréquence de fonctionnement est imprévisible dans le second as, nayant pas été capables de convaincre HFSS d'effectuer une simulation sur Fhomothetie dela spirale pour Pamener aux dimensions voulues : pour une sphere de 1 mm de rayon, HESS prédit une fréquence de fonc- tionnement de 12,25 GHz (mini- ‘mum du coefMicient de réflexion, S,), Soit aprés une homothétie d'un facteur 25 une fréquence prédite de 490 MHz, proche de ‘ce qu’annoneait NEC (517 M2), ‘malgré une section de conduc- teurs complétement différente (rectangulaire ou cylindrique) et une méthode de simulation par éléments finis, au lieu de la méthode des moments. insertion du modeéle de Vhélice dans FreecAD est Yop- portunité de la supporter sur une sphére. Initialement, nous wow nackabl Figures; Le moddte vollumique de Vantenne ‘exporté au format STEP ‘apermis devimporter dans HESS e d'effectuer lecatcut du diagramme derayonnement et des propriété électriques. avions naivement supposé qu'une imprimante pourrait fabriquer ‘une hélice, en flottant par un processus physique inconnu pour le ‘moment, pour compenser la gravité. I n’en est évidermment rien et une sphere de support est nécessaire, Aprés plusieurs itéra- tions de conception qui passaient notamment par T'idée de placer le motif de I'hélice en relief sur la sphére pour la peindre de pein- ture conductrice (nous reviendrons sur la qualité ce cette pein- ture plus bas), la conception a convergé vers une hélice en relief inverse dans la sphere, permettant non seulement de remplir la gorge de peinture conductrice, mais aussi de conformer des fils, de cuivre émaillés dans cette gorge, afin de former lantenne. [Nous verrons que c’est cette derniére approche qui a fourni les meilleurs résultats. 5. REALISATION ET MESURES DES ANTENNES Le modele STL est fourni & CURA (ultimaker.com/software/ ultimaker-cura, Fig. 4), loutil de conversion de la surface vers les ‘commandes contrélant une imprimante additive UltiMaker 2+. Le fl ‘en acide polylactique (PLA) est standard : une tentative de tracer la spirale en PLA conducteur, au moyen d'une imprimante UltiMaker 3 avec sa double extrusion indispensable a ce mode d'impression, se solde par un échec avec une résistance excessive :un ohmmeétre indique 10 k® pour une section d'un millimetre de cOté et d'une dizaine de centimetres de longueur, en cohérence avec les valeurs annoncées a www.proto-pasta.com/pagesiconductive-pla. HACKABLE MAGAZINE N‘31 87 ~0 | RADIO & FREQUENCES . Paralleurs cverses—_rdsistviel du conducteur Ge, Ultimaker tenmativesde peindre——_eculre), u=2n fa pulsation Wheliee par une pein-——_angullelie Ala fréquence tureconductree Bare signa ecromagnéique Conductive reference rayonnant de antenne,e 35.2585 chez RS) se la permablité Un 10” pour soldi encore par Fal A100 Miz, Pépalsseur de unertsistanceexces- peau du cure est 65 um, done sivebien quemoindre _yimporte quel ide pus dune auavecle PLAconduc —_centaine de micrometres de teur. Des résistances diamétre conviendra pour réa- de quelques centaines liser Vantenne (Fig. 5). ohms sont observées ch caurant conn Lerésultat de Fimpression encourantconinu, | cjamesute da coefcent de eat tect, | rantene.tinourvetedoneinsoton _‘ilstrésen ig. 6a fequence Se a Benoa Nees dened relsiots ie ictinonement x gus ieee eee la fente formée par a spirale dans la peu inférieure celle model plastique résultante, sphére, lors de la soustraction du pre- ‘sée, mais absence de chambre ‘mier motif du second dans FreeCAD. La anéchoique pour effectuer question du diamétre du fil se résout les mesures fausse quelque simplement : la profondeur de peau peu l'adéquation entre expé- Scents eromegnetiuelons Fence et simulation comme trenton tpmoalischaep en atest les nomireur Figure 5: Etapes d'impression de surface a été atténué d'un facteur e modes parasites que nous (gauche) et de fabrication de (pour rappel, le champ électrique dans _attribuons aux ondes station- antenne (drlte) sur imprimante Uttater 2 La stractarcese ‘un conducteur dot ére nul, sinon les naires formées avec environ vide pour pouvotr la remplir de Gélectrons se mettent en mouvement pour _nement métallique, autour de aieleceriqu (silicone) etalnst le compenser), avec p=1,68:10*2.m la Yantenne {enter 'abaisser sa fréquence de fonetionnement CY 88 | HackasLe macazine nist antennes > Petites antennes réalisées par impression additive 0 5 a Ko =410 = “15 sphere Sem Cu wiossiicone sphere Sem Gu wie ai -20 0 200 400 600 800 1000 frequency (MHz) Figure: Ceractérisation deta Nous concluons donccette _ le puitsétroit devant la longueur spherede sem de diametre,soutenant étude dela conception d'une donde, Inélice de circontérence cipiascinventus acscaare antenne susceptible de s‘insé-_ grande devant la longueur d'onde {a sphere vide puis wremplie» de rer dans un tuyau vertical, qui ne correspond pas a notre siticone afin dabatssersafrequence mais rayonnant vers a surface cas pratique (nécessité de forer defonetionnement Seu! le mode un pew parle tracédes diagrammes un puits de diamatre excessif) et tare eee de rayonnement simulés des __Yantenne sphére qui permet, en antennes considérées, savoir _tournant de 90 degrés la sphere Thélice de petites dimensions _dans letuyau, de rayonner vers la insérantverticalement dans surface (Fig. 7). wow nackabl i Figure 7: Dagrammes boule / se nomal derayonnement lice en mode norm: simutes pour Thelice helice on mode axial enmode axial (ver aqui rayonne bien %, Vers ta surface, mats %, ne peut étreréalisée . en pratique, compte > tenu du diametre du forage qui nous 7 intéresse, "hice en mode normal rouge) {ui nerayonne pas Vers ta surface, et ta sphere boule) tournée te90- dans te tube our rayonner vers ta Surface. A gauche, ta dométrie considérce in our placer tes Y Gai intennes aufond d'un ‘aya HACKABLE MAGAZINE N'31| 89 <>. | RADIO & FREQUENCES 6. IMPRESSION ET AFFICHAGE DES DIAGRAMMES DE RAYONNEMENT 6.1 Du virtuel au réel Pour conclure, ayant appris a générer des fichiers STL pour imprimer une antenne, il nous reste Vaspect ludique et pédagogique d’imprimer.. les diagrammes de rayonnement modélisés par NEC2 en impression additive (11). Pour ce faire, nous observons que les fichiers en sortie de NEC2 sont des fichiers ASCH contenant, les uns aprés les autres, les résultats des calculs de la puissance rayon- née dans une direction en coordonnées polaires pour chaque fréquence, avec les deux premiéres colonnes représentant les angles des coordonnées polaires (8, 4) et en cinquiéme colonne, le gain de Vantenne dans cette direction. Tracer la surface est done simplement une question d'extraire ces champs et de convertir les coordonnées polaires en coordonnées cartésiennes 1 avec son éditeur de texte favori (done Vi, rechercher le mot clé « FREQUENCY : » (il ya bien un espace entre le mot clé et les deux points !), suivi de la fréquence en notation scientifique ; ayant identifié ce point, rechercher le mot clé RADIATION PATTERN qui suit; éliminer (1G) tout ce qui est au-dessus de ces mots clés et tout ce qui suit (4G) la prochaine occurrence de FREQUENCY, afin de rvobtenir un fichier qui ne contient que le diagramme de rayonnement; 2, sauver ce fichier et en extraire les 5 premiéres colonnes, soit cut -¢ 1-51 fichier, puisque les cartes FORTRAN proposent des champs de taille fixe 3.le fichier résultant, de la form: PET MAJOR MINOR TOTAL. DEGREES DEGREES DB DB DB 0.00 0.00 -16.33 -999.99 -16.33, 2.50 0.00 16.25 31.30 -16.11 5.00 0.00 15.84 -25.56 -15.40 7.50 0.00 14.89 23.22 -14.29 110.00 0.00 -13.54 -22.65 -13.04 12.50 0.00 12.21 23.00 11.86 est lu par GNU/Octave pour fabriquer le fichier STL, tel que vu auparavant : oad sphere.tost th=sphere(:,1); ph=sphere(:,2); Gesphere(:,5)~min(sphere(:,5))#1; plot3(G.*cosd (ph) .*sind(th) ,G.*sind (ph) .*sind(th) ,G.*cosd(th) ,'.') shold on dth=di ff (th) ;m=find (dth>0) ;mem(1) ;dth=dth (m) dph=di ££ (ph) ;m=find (dph>0) ;m=m(1) ;dph=dph (m) pem $ m=144 increment from one ph to another adjacent fefopen(*radiation.stl','w'); > 90 | HackapLe macazine nist wow antennes > Petites antennes réalisées par impression additive 10 fprinte(£, ‘solid radiation\n'); 11 for ke1:Length (6) /2 12 P1=[G(k) .*cosd (ph (k) ) .*sind(th(k)) ,G(k) .*sind(ph(k)) .*sind(th (k) ) ,G(k) .*cosd( th(k)) 1: 13 P2=[G(ktp) .*cosd (ph (k+p)) .*sind (th (ktp) ) ,G(k+p) .*sind (ph (kp) ).*sind(th (k+p) ), G(Ktp) .*cosd (th (kt) 17 14 P3=[G(k#1) .*cosd (ph (k+1)) .*sind (th (k+1) ) ,G(k#1) .*sind (ph (k#1)) .*sind(th (k#1)), G(K#1) .*cosa(th (K+) ) 17 15 nlscross(P2-P1,P2-P3) ; 16 fprints(£,! facet normal $f $f $£\n! nl (1) ,nl(2) ,nl (3); 17 fprint£(£,' outer loop\n'); 18 fprint£(f,' vertex Sf Sf S£\n',PL(1) ,P1(2) ,P1(3)); 19 fprintf(f,' vertex tf $f Sf\n',P2 (1) ,P2(2) ,P2(3)); 20 fprint£(£,' vertex 8f 8£ 8£\n',P3(1) ,P3(2) ,P3(3)) 7 21 fprint£(£,' endloop\n'); 22 fprint£(f,' endfacet\n"); 23 [... on recommence en échangeant le premier coin avec le coin oppose en k+p+1] 24 end 25 fprint£(£,'endsolid cadiation\n') ; 26 fclose(£) ; Le résultat est visible en Fig. 8, oi! nous constatons l'importance avoir balayé les angles en élévation de 0 & 360° et en azimut de 0 180° pour obtenir un volume fermé. Les diagrammes de rayonnement sont souvent des motifs & symétrie de révolution autour de Faxe de rantenne afin de faci- liter V'appui de la forme sur le plateau d'impression, nous avons sigireb cssne aucircatans tcvayensionsad choisi de couper en deux chaque diagramme de rayonnement ‘du petit dipole spherique, qui ressemble a s'y “qa iasiaieat di irasreasion’ (Cakvilee Yeudlonmase’e cclzaale dams méprendre au diagramme de rayonnement du mu moment de Timpression (calculer Vordonnée maximale dans dipdteen espace libre, et d'une antenne directive CURA et soustraire sa moitié, afin de r'imprimer que la moitié du Degiose ti ratseiasiantecnal wrdlcoed ‘motif) pour les coer, aussi maladroitement que possible, aprés ide'lément réflecteur Miliew :réalisation impression. Simulation et fabrication ont done fini par converger ‘enimpression additive de ces diagrammes de Pe. 8 rot, rayonnement. Droite: modéle de Vantenne wow nackabl Yagi-Uda avec son diagramme de rayonnement caleulé par NEC2. HACKABLE MAGAZINE N'31| 91 A. 1 RADIO & FREQUENCES 6.2 Du réel au virtuel ‘Maintenant que nous avons des modéles de diagrammes de rayonnement imprimés et mani- pulables, nous proposons le complément qui est dinclure le diagramme de rayonnement au-des- sus duu modle physique de 'antenne : une tele fonction est possible grace la réalité augmentée [14], qui prend une importance croissante dans divers domaines stratégiques 15, 16,17]. Iet encore, le probleme est la conversion de format des diagrammes de rayonnement vers un format compréhensible par infrastructure que nous avons sélectionnée, a savoir ar. js telle que dispo- nible a github.comyjeromeetienne/AR,js. Cette infrastructure permet de sinterfacer & A-Frame (aframe.io), capable de charger un modéle en 3D de CAO et de le placer dans un contexte de la caméra d'un périphérique mobile, tel qu'un téléphone portable, L’objet que nous désirons inclure dans la vidéo capturée par la caméra du téléphone portable est localisé au moyen d'une image de référence, nommée AR-Code (Augmented Reality Code). Le motif classique de cet AR-Code est Je mot Hiro, d’aprés le nom dun des auteurs de ARToolKit Hirokazu Kato (Nara Inst. of Science and Technology) [18], Limage de référence, 4 afficher sur écran ou a imprimer, est disponible & |ttps:/jeromeetienne github io/AR js/datalimages/HIRO jpg. A-Frame conseille de charger des ‘modéles au format gITF, encore un format de plus pour représenter des structures tridimension- nelles, Qu’a cela ne tienne, Meshlab charge le diagramme de rayonnement au format SRL pour sauver un format DAE de COLLADA (COLLAborative Design Activity) compréhensible par |ttps:/icesiumjs.orgiconvertModel/ pour former un fichier exploitable. Ce fichier se charge alors « trivialement », une fois les tutoriels obsoletes éliminés lors de la recherche des informa- tions, par le script Javascript de la forme : 2 3