{"id":2940,"date":"2026-10-14T14:56:46","date_gmt":"2026-10-14T12:56:46","guid":{"rendered":"https:\/\/coding4phone.com\/?p=2940"},"modified":"2026-10-14T14:56:47","modified_gmt":"2026-10-14T12:56:47","slug":"mogwai-nano-0-8-un-debogueur-pas-a-pas-directement-sur-le-microcontroleur","status":"publish","type":"post","link":"https:\/\/coding4phone.com\/?p=2940","title":{"rendered":"MOGWAI NANO 0.8 : un d\u00e9bogueur pas \u00e0 pas directement sur le microcontr\u00f4leur"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La version 0.8 de MOGWAI NANO est en ligne. Sa grande nouveaut\u00e9, c&rsquo;est un <strong>d\u00e9bogueur pas \u00e0 pas int\u00e9gr\u00e9<\/strong> : vous lancez un programme en mode debug depuis MOGWAI NANO Studio, et vous le suivez instruction par instruction, pendant qu&rsquo;il s&rsquo;ex\u00e9cute sur votre ESP32. L&rsquo;instruction sur le point d&rsquo;\u00eatre ex\u00e9cut\u00e9e est surlign\u00e9e dans votre code source, vous pouvez mettre en pause, avancer d&rsquo;un pas, reprendre, regarder la pile, modifier une variable\u2026 comme dans n&rsquo;importe quel environnement de d\u00e9veloppement digne de ce nom.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La 0.8 apporte aussi le <strong>support du BLE en mode p\u00e9riph\u00e9rique<\/strong> sur ESP32. Mais commen\u00e7ons par le morceau de choix.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi d\u00e9boguer sur un microcontr\u00f4leur, c&rsquo;est compliqu\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous suivez MOGWAI NANO, vous savez comment \u00e7a marche : vous \u00e9crivez votre programme dans le Studio, avec toute la syntaxe confortable de MOGWAI (<code>if...then...else<\/code>, <code>while...do<\/code>, <code>for...do<\/code>\u2026). Au moment de l&rsquo;ex\u00e9cution, ce code est <strong>d\u00e9sucr\u00e9<\/strong>, c&rsquo;est-\u00e0-dire transform\u00e9 en sa forme canonique, une suite de mots RPN bien plus simple, puis envoy\u00e9 au device qui le parse et l&rsquo;ex\u00e9cute.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce que vous \u00e9crivez :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>    if (a 10 >) then { \"grand\" ? } else { \"petit\" ? }<br>} <br><br>nano.run<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ce que le device re\u00e7oit :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{ a 10 > } eval { \"grand\" ? } { \"petit\" ? } IFELSE<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est parfait pour ex\u00e9cuter, beaucoup moins pour d\u00e9boguer : <strong>le code qui s&rsquo;ex\u00e9cute n&rsquo;a plus rien \u00e0 voir avec celui que vous avez tap\u00e9<\/strong>. Impossible de dire \u00e0 l&rsquo;utilisateur \u00ab votre programme en est l\u00e0 \u00bb : les deux formes sont trop diff\u00e9rentes pour qu&rsquo;on puisse faire le lien.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L&rsquo;id\u00e9e : d\u00e9corer le code avec les positions du source<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La solution tient en une phrase : en mode debug, le Studio <strong>d\u00e9core<\/strong> le code d\u00e9sucr\u00e9 avec, pour chaque instruction, sa position dans votre source d&rsquo;origine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le device, lui, garde ces informations avec l&rsquo;instruction pendant qu&rsquo;il l&rsquo;ex\u00e9cute. Avant chaque instruction qui peut servir de point de pause, il regarde ce qu&rsquo;on lui a demand\u00e9 :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Une pause est demand\u00e9e<\/strong> : il envoie au Studio la position de l&rsquo;instruction \u00e0 venir, le Studio la surligne dans l&rsquo;\u00e9diteur, et le device attend.<\/li>\n\n\n\n<li><strong>Un d\u00e9lai de trace est actif<\/strong> : il envoie la position de la m\u00eame fa\u00e7on, puis patiente le temps demand\u00e9 avant de continuer.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Deux d\u00e9tails ont leur importance :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>C&rsquo;est le device qui fait tout le travail.<\/strong> Le parser sait lire les informations de debug quand elles sont l\u00e0, et les ignore quand elles n&rsquo;y sont pas. Un programme lanc\u00e9 normalement se comporte exactement comme avant : pas de surco\u00fbt, pas de changement.<\/li>\n\n\n\n<li><strong>La pause a lieu <em>avant<\/em> l&rsquo;instruction surlign\u00e9e.<\/strong> Si le <code>?<\/code> est surlign\u00e9, il n&rsquo;a pas encore \u00e9t\u00e9 ex\u00e9cut\u00e9. C&rsquo;est le comportement habituel d&rsquo;un d\u00e9bogueur : on regarde l&rsquo;\u00e9tat du programme juste avant de faire le pas.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Lancer une session : <code>nano.debug<\/code> et <code>nano.debugall<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour ex\u00e9cuter un programme en mode debug, il suffit de remplacer <code>nano.run<\/code> par <code>nano.debug<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>    0 -> 'n'<br>    while (n 5 &lt;) do {<br>        n 1 + -> 'n'<br>        n ?<br>    }<br>} <br><br>nano.debug<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe deux modes, qui ne changent rien c\u00f4t\u00e9 device (c&rsquo;est le Studio qui d\u00e9cide de la quantit\u00e9 d&rsquo;informations ajout\u00e9es) :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>nano.debug<\/code><\/strong> : le mode minimal. On ne peut s&rsquo;arr\u00eater que sur les instructions qui comptent vraiment pour suivre un programme : les primitives, les mots, et les listes et records en auto-\u00e9valuation.<\/li>\n\n\n\n<li><strong><code>nano.debugall<\/code><\/strong> : tous les tokens sont marqu\u00e9s, litt\u00e9raux compris, pour un pas \u00e0 pas beaucoup plus fin. Seuls en sont exclus ceux que MOGWAI lui-m\u00eame d\u00e9clare non pausables. Le prix \u00e0 payer : davantage d&rsquo;informations \u00e0 parser, donc un d\u00e9marrage plus long.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e8s qu&rsquo;une session d\u00e9marre, un petit <strong>panneau de debug<\/strong> appara\u00eet par-dessus l&rsquo;\u00e9diteur, avec trois boutons : <strong>Pause<\/strong>, <strong>Resume<\/strong> et <strong>Step<\/strong>. Il dispara\u00eet tout seul \u00e0 la fin du programme.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Piloter l&rsquo;ex\u00e9cution<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Le panneau<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les boutons s&rsquo;activent et se d\u00e9sactivent selon l&rsquo;\u00e9tat de la session, \u00e0 partir des informations que renvoie le device \u00e0 chaque instruction :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u00c9tat<\/th><th>Pause<\/th><th>Resume<\/th><th>Step<\/th><\/tr><\/thead><tbody><tr><td>Programme en cours d&rsquo;ex\u00e9cution<\/td><td>actif<\/td><td>inactif<\/td><td>inactif<\/td><\/tr><tr><td>Programme en pause (y compris apr\u00e8s un Step)<\/td><td>inactif<\/td><td>actif<\/td><td>actif<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step<\/strong> ex\u00e9cute une seule instruction, puis remet le programme en pause sur la suivante qui peut en \u00eatre le si\u00e8ge. <strong>Resume<\/strong> relance l&rsquo;ex\u00e9cution normale.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"747\" data-attachment-id=\"2947\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=2947#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video2.gif?fit=800%2C747&amp;ssl=1\" data-orig-size=\"800,747\" data-comments-opened=\"1\" data-image-title=\"nano-debug-video2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video2.gif?fit=800%2C747&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video2.gif?resize=800%2C747&#038;ssl=1\" alt=\"Capture d'\u00e9cran de l'interface MOGWAI NANO Studio affichant un code de d\u00e9bogage et une console, avec des instructions pour interagir avec un appareil connect\u00e9.\" class=\"wp-image-2947\"\/><figcaption class=\"wp-element-caption\">Panneau de debug.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les commandes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque bouton a son \u00e9quivalent en commande. Elles passent par la connexion TCP comme toutes les commandes <code>nano.*<\/code>, et pendant qu&rsquo;un programme tourne, on les tape dans l&rsquo;onglet <strong>Console MOGWAI<\/strong> du Studio :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Commande<\/th><th>Effet<\/th><\/tr><\/thead><tbody><tr><td><code>nano.debug.halt<\/code><\/td><td>Demande une pause \u00e0 la prochaine instruction<\/td><\/tr><tr><td><code>nano.debug.step<\/code><\/td><td>Avance d&rsquo;une seule instruction<\/td><\/tr><tr><td><code>nano.debug.resume<\/code><\/td><td>Reprend l&rsquo;ex\u00e9cution<\/td><\/tr><tr><td><code>150 nano.debug.tron<\/code><\/td><td>Ralentit l&rsquo;ex\u00e9cution \u00e0 une instruction toutes les 150 ms, en affichant l&rsquo;instruction courante dans l&rsquo;\u00e9diteur, comme une trace<\/td><\/tr><tr><td><code>nano.debug.troff<\/code><\/td><td>Arr\u00eate la trace (\u00e9quivaut \u00e0 <code>0 nano.debug.tron<\/code>)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hors session de debug, toutes ces commandes sont simplement ignor\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les points d&rsquo;arr\u00eat : <code>\u00a4<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez aussi demander une pause <strong>depuis votre code<\/strong>. La primitive <code>debug.halt<\/code> fait exactement cela, et pour l&rsquo;\u00e9crire plus vite, elle a un alias : <code>\u00a4<\/code> (comme <code>?<\/code> est un alias de <code>console.println<\/code>).<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>    0 -> 'n'<br>    while (n 5 &lt;) do {<br>        n 1 + -> 'n'<br>        \u00a4                  # point d'arr\u00eat : le programme se met en pause ici<br>        n ?<br>    }<br>} <br><br>nano.debug<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>debug.tron<\/code> et <code>debug.troff<\/code> existent aussi comme primitives : on peut ainsi encadrer la portion de programme qu&rsquo;on veut tracer, sans toucher au reste. Bonne nouvelle, ces trois primitives sont <strong>communes \u00e0 MOGWAI desktop et \u00e0 MOGWAI NANO<\/strong> et se comportent de la m\u00eame fa\u00e7on. Et comme elles ne font strictement rien hors mode debug, on peut les laisser dans un programme sans cons\u00e9quence.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"747\" data-attachment-id=\"2947\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=2947#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video2.gif?fit=800%2C747&amp;ssl=1\" data-orig-size=\"800,747\" data-comments-opened=\"1\" data-image-title=\"nano-debug-video2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video2.gif?fit=800%2C747&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video2.gif?resize=800%2C747&#038;ssl=1\" alt=\"Capture d'\u00e9cran de l'interface de studio MOGWAI NANO montrant un code de d\u00e9bogage dans la console. Les instructions incluent des commandes pour r\u00e9initialiser et ex\u00e9cuter des actions sur un appareil connect\u00e9.\" class=\"wp-image-2947\"\/><figcaption class=\"wp-element-caption\">Utilisation d&rsquo;un point d&rsquo;arr\u00eat.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Voir la pile : <code>debug.stack<\/code> et <code>nano.stack<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans un langage \u00e0 pile, savoir ce qu&rsquo;elle contient est la moiti\u00e9 du d\u00e9bogage. Deux outils s&rsquo;en chargent, utilisables <strong>en run normal comme en debug<\/strong> :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>debug.stack<\/code> (sur le device) empile une cha\u00eene qui repr\u00e9sente la pile telle qu&rsquo;elle \u00e9tait \u00e0 l&rsquo;appel.<\/li>\n\n\n\n<li><code>nano.stack<\/code> (c\u00f4t\u00e9 Studio) demande au device, par TCP, cette repr\u00e9sentation et l&rsquo;affiche dans la console MOGWAI.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Avec 50 60 \u00ab\u00a0Hello\u00a0\u00bb (1 2 3) true [x: 50 y: 20] sur la pile du device :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">> nano.stack<br><br>STACK<br>0: [x: 50 y: 20]<br>1: true<br>2: (1 2 3)<br>3: \"Hello\"<br>4: 60<br>5: 50<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le sommet de la pile est en <code>0:<\/code>. C&rsquo;est particuli\u00e8rement pratique pendant une pause.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ex\u00e9cuter du code pendant une pause<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est le d\u00e9tail qui change tout : <strong>quand le programme est en pause, la console reste utilisable<\/strong>. Vous pouvez y taper du code et l&rsquo;ex\u00e9cuter pour inspecter ou modifier des variables, ajouter ou retirer des \u00e9l\u00e9ments de la pile, appeler une fonction du programme\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce code s&rsquo;ex\u00e9cute normalement, sans pause ni surlignage, et <strong>tout ce qu&rsquo;il fait reste effectif \u00e0 la reprise<\/strong> : ce qui est fait est fait. Vous pouvez donc corriger une valeur \u00e0 la vol\u00e9e, puis reprendre pour voir si le programme se comporte mieux.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"747\" data-attachment-id=\"2955\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=2955#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video3.gif?fit=800%2C747&amp;ssl=1\" data-orig-size=\"800,747\" data-comments-opened=\"1\" data-image-title=\"nano-debug-video3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video3.gif?fit=800%2C747&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/10\/nano-debug-video3.gif?resize=800%2C747&#038;ssl=1\" alt=\"Capture d'\u00e9cran de l'interface du logiciel MOGWAI NANO Studio affichant un code de d\u00e9bogage et des instructions de console.\" class=\"wp-image-2955\"\/><figcaption class=\"wp-element-caption\">Ex\u00e9cuter du code pendant une pause.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et les \u00e9v\u00e9nements ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un gestionnaire d&rsquo;\u00e9v\u00e9nement peut \u00eatre suivi pas \u00e0 pas comme s&rsquo;il s&rsquo;agissait d&rsquo;une fonction du code source. Vous pouvez donc d\u00e9boguer la r\u00e9action \u00e0 un changement de GPIO, \u00e0 un timer ou \u00e0 un message du Studio exactement comme le reste du programme.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les limites actuelles<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cette premi\u00e8re version du d\u00e9bogueur est d\u00e9j\u00e0 tr\u00e8s utilisable, mais il vaut mieux \u00eatre honn\u00eate sur ce qu&rsquo;elle ne fait pas encore :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Le parsing est plus long en mode debug.<\/strong> Il y a beaucoup plus d&rsquo;informations \u00e0 lire, et le device a des moyens limit\u00e9s. C&rsquo;est le prix \u00e0 payer pour pouvoir d\u00e9boguer, et il est plus \u00e9lev\u00e9 avec <code>nano.debugall<\/code> qu&rsquo;avec <code>nano.debug<\/code>. Je continue \u00e0 travailler sur la question.<\/li>\n\n\n\n<li><strong>Le pas \u00e0 pas est de type \u00ab step-into \u00bb uniquement<\/strong> : on avance jusqu&rsquo;\u00e0 la prochaine instruction pausable, sans possibilit\u00e9 de passer par-dessus un appel de fonction (step-over) ni d&rsquo;en sortir (step-out).<\/li>\n\n\n\n<li><strong>Les t\u00e2ches ne peuvent pas encore s&rsquo;ex\u00e9cuter en mode debug.<\/strong><\/li>\n\n\n\n<li><strong>Les unit\u00e9s sont charg\u00e9es sans informations de debug<\/strong>, elles ne peuvent donc pas \u00eatre parcourues pas \u00e0 pas pour l&rsquo;instant.<\/li>\n\n\n\n<li><strong><code>debug.step<\/code> et <code>debug.resume<\/code> n&rsquo;existent que comme commandes du Studio<\/strong>, pas comme primitives utilisables dans un script. Un programme peut se mettre en pause lui-m\u00eame avec <code>\u00a4<\/code>, mais ne peut pas se relancer tout seul.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Le BLE en mode p\u00e9riph\u00e9rique (ESP32)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;autre nouveaut\u00e9 majeure de la 0.8 : votre ESP32 peut maintenant se comporter comme un <strong>p\u00e9riph\u00e9rique Bluetooth Low Energy<\/strong>, c&rsquo;est-\u00e0-dire se faire d\u00e9couvrir par un t\u00e9l\u00e9phone ou un ordinateur, exposer des services et des caract\u00e9ristiques, et \u00e9changer des donn\u00e9es avec eux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La philosophie est la m\u00eame que pour le reste de MOGWAI NANO : un seul <strong>record<\/strong> d\u00e9crit tout le p\u00e9riph\u00e9rique (son nom, ses services, ses caract\u00e9ristiques, les propri\u00e9t\u00e9s de chaque caract\u00e9ristique et sa valeur initiale). Un petit jeu de primitives le pilote :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>ble.peripheral.create<\/code> cr\u00e9e le p\u00e9riph\u00e9rique \u00e0 partir de la description ;<\/li>\n\n\n\n<li><code>ble.peripheral.start<\/code> et <code>ble.peripheral.stop<\/code> le d\u00e9marrent et l&rsquo;arr\u00eatent ;<\/li>\n\n\n\n<li><code>ble.peripheral.setValue<\/code> et <code>ble.peripheral.getValue<\/code> \u00e9crivent et lisent la valeur d&rsquo;une caract\u00e9ristique ;<\/li>\n\n\n\n<li><code>ble.peripheral.notify<\/code> pr\u00e9vient un appareil connect\u00e9 qu&rsquo;une valeur a chang\u00e9.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Trois \u00e9v\u00e9nements, <code>BLE_PERIPHERAL_DID_START<\/code>, <code>BLE_PERIPHERAL_DID_STOP<\/code> et <code>BLE_PERIPHERAL_VALUE_DID_CHANGE<\/code>, permettent \u00e0 votre programme de r\u00e9agir aux connexions et aux \u00e9critures venant de l&rsquo;ext\u00e9rieur. L&rsquo;appareil d\u00e9clare le skill <code>'BLE-P'<\/code>, que l&rsquo;on peut tester avec <code>hasSkill<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quelques pr\u00e9cisions importantes :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pour l&rsquo;instant, c&rsquo;est r\u00e9serv\u00e9 \u00e0 l&rsquo;ESP32.<\/strong> Le support est dans son propre assemblage (<code>MogwaiNanoBlePeripheral<\/code>), r\u00e9f\u00e9renc\u00e9 uniquement par <code>MogwaiNanoEsp32<\/code>. Il n&rsquo;est pas disponible sur Pico W, et d&rsquo;autres cibles viendront.<\/li>\n\n\n\n<li><strong>Seul le premier service d\u00e9fini est annonc\u00e9.<\/strong> Tous les services et toutes les caract\u00e9ristiques sont bien cr\u00e9\u00e9s et accessibles une fois connect\u00e9, mais la d\u00e9couverte BLE n&rsquo;en expose qu&rsquo;un seul.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Un petit confort au passage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>View &gt; Font...<\/code> s&rsquo;applique d\u00e9sormais \u00e0 <strong>tous les volets<\/strong> et plus seulement \u00e0 l&rsquo;\u00e9diteur : l&rsquo;\u00e9diteur et les quatre onglets de sortie (Console MOGWAI, Debug MOGWAI, Console NANO, Debug NANO) suivent la police et la taille choisies. Il suffit d&rsquo;augmenter la taille une fois pour que tout soit lisible, par exemple pour un enregistrement d&rsquo;\u00e9cran.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O\u00f9 la trouver<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Les binaires, le Studio et les notes de version sont sur la <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\/releases\" target=\"_blank\" rel=\"noopener\">page des releases<\/a>.<\/li>\n\n\n\n<li>Le code est sur <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>, sous licence Apache 2.0.<\/li>\n\n\n\n<li>Les nouvelles commandes sont d\u00e9crites dans la <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\/blob\/main\/docs\/studio-primitives.md\" target=\"_blank\" rel=\"noopener\">r\u00e9f\u00e9rence des primitives du Studio<\/a>, les primitives communes (<code>debug.halt<\/code> \/ <code>\u00a4<\/code>, <code>debug.tron<\/code>, <code>debug.troff<\/code>) dans la <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\/blob\/main\/docs\/shared-primitives.md\" target=\"_blank\" rel=\"noopener\">r\u00e9f\u00e9rence des primitives partag\u00e9es<\/a> et celles du device dans la <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\/blob\/main\/docs\/device-primitives.md\" target=\"_blank\" rel=\"noopener\">r\u00e9f\u00e9rence des primitives NANO<\/a>.<\/li>\n\n\n\n<li>Un article d\u00e9taill\u00e9 sur la mani\u00e8re de d\u00e9boguer un programme MOGWAI NANO, pas \u00e0 pas, est pr\u00e9vu.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Et ensuite ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le d\u00e9bogueur est un d\u00e9but. Les prochaines \u00e9tapes naturelles sont le step-over et le step-out, l&rsquo;ouverture des t\u00e2ches et des unit\u00e9s au debug, la r\u00e9duction du temps de parsing en mode debug, et sans doute de vraies primitives pour <code>debug.step<\/code> et <code>debug.resume<\/code>. C\u00f4t\u00e9 BLE, l&rsquo;id\u00e9e est d&rsquo;\u00e9largir les cibles et, plus tard, de couvrir aussi le mode \u00ab central \u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous avez un ESP32 dans un tiroir, c&rsquo;est le bon moment pour l&rsquo;essayer : un programme qui plante ou qui se comporte bizarrement, c&rsquo;est exactement ce pour quoi on a besoin d&rsquo;un d\u00e9bogueur. Et si vous croisez un cas qui ne se laisse pas d\u00e9boguer, ou un comportement surprenant, n&rsquo;h\u00e9sitez pas \u00e0 l&rsquo;ouvrir sur le <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\/issues\" target=\"_blank\" rel=\"noopener\">suivi des tickets<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bon d\u00e9bogage !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La version 0.8 de MOGWAI NANO est en ligne. Sa grande nouveaut\u00e9, c&rsquo;est un d\u00e9bogueur pas \u00e0 pas int\u00e9gr\u00e9 : vous lancez un programme en mode debug depuis MOGWAI NANO Studio, et vous le suivez instruction par instruction, pendant qu&rsquo;il s&rsquo;ex\u00e9cute sur votre ESP32. L&rsquo;instruction sur le point d&rsquo;\u00eatre ex\u00e9cut\u00e9e est surlign\u00e9e dans votre code &#8230; <a title=\"MOGWAI NANO 0.8 : un d\u00e9bogueur pas \u00e0 pas directement sur le microcontr\u00f4leur\" class=\"read-more\" href=\"https:\/\/coding4phone.com\/?p=2940\" aria-label=\"En savoir plus sur MOGWAI NANO 0.8 : un d\u00e9bogueur pas \u00e0 pas directement sur le microcontr\u00f4leur\">Lire la suite<\/a><\/p>\n","protected":false},"author":1,"featured_media":2803,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"D\u00e9couvrez la version 0.8 de MOGWAI NANO avec d\u00e9bogueur int\u00e9gr\u00e9 et support BLE sur ESP32. D\u00e9bogage simplifi\u00e9 pour vos programmes!","jetpack_seo_html_title":"MOGWAI NANO 0.8 : D\u00e9bogueur et support BLE sur ESP32","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[185,177,48,50],"tags":[],"class_list":["post-2940","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-nanoframework","category-mogwai-nano","category-rpn","category-scripting"],"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfoe4s-Lq","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/08\/img01.png?fit=300%2C239&ssl=1","_links":{"self":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/2940","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2940"}],"version-history":[{"count":34,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/2940\/revisions"}],"predecessor-version":[{"id":2977,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/2940\/revisions\/2977"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/media\/2803"}],"wp:attachment":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2940"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2940"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}