{"id":81,"date":"2026-09-26T01:25:20","date_gmt":"2026-09-25T23:25:20","guid":{"rendered":"https:\/\/libreduc.cc\/blog\/?p=81"},"modified":"2026-09-27T01:39:30","modified_gmt":"2026-09-26T23:39:30","slug":"pourquoi-un-noyau-naissance-ucblockly","status":"publish","type":"post","link":"https:\/\/libreduc.cc\/blog\/?p=81","title":{"rendered":"Pourquoi un noyau : naissance de \u00b5cBlockly"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignleft\" src=\"https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/logo_\u00b5cBlockly-300x300.png\" alt=\"\" width=\"120\" height=\"120\" \/><\/p>\r\n<span hidden class=\"__iawmlf-post-loop-links\" data-iawmlf-links=\"[{&quot;id&quot;:5,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/BlocklyDuino&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20260217202644\\\/https:\\\/\\\/github.com\\\/BlocklyDuino&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-09-02 19:46:59&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-06 22:47:42&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-13 08:31:53&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-22 23:27:10&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-26 03:17:50&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-09-26 03:17:50&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:23,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/technologiescollege\\\/Blockly-at-rduino&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20260520101300\\\/https:\\\/\\\/github.com\\\/technologiescollege\\\/Blockly-at-rduino&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-09-26 23:39:51&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-09-26 23:39:51&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:14,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/A-S-T-U-C-E\\\/STudio4Education&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20260604043205\\\/https:\\\/\\\/github.com\\\/A-S-T-U-C-E\\\/STudio4Education&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-09-05 15:25:12&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-09 06:41:36&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-13 09:59:11&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-18 05:11:03&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-22 23:27:04&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-09-26 15:23:00&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-09-26 15:23:00&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:7,&quot;href&quot;:&quot;https:\\\/\\\/wiki.libreduc.cc\\\/fr:arduino:ucblockly:convert_rduino&quot;,&quot;archived_href&quot;:&quot;http:\\\/\\\/web-wp.archive.org\\\/web\\\/20260902195205\\\/https:\\\/\\\/wiki.libreduc.cc\\\/fr:arduino:ucblockly:convert_rduino&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-09-02 20:22:50&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-09-06 22:47:50&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-09-13 08:31:55&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-09-22 23:27:14&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-09-26 03:17:51&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-09-26 03:17:51&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:3,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/A-S-T-U-C-E\\\/ucBlockly&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:4,&quot;href&quot;:&quot;https:\\\/\\\/wiki.libreduc.cc\\\/fr:arduino:ucblockly&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:6,&quot;href&quot;:&quot;https:\\\/\\\/forum.libreduc.cc&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;}]\"><\/span>\r\n<p class=\"wp-block-paragraph\">Si vous suivez LibrEduc depuis un moment, vous avez crois\u00e9 <a href=\"https:\/\/github.com\/BlocklyDuino\">BlocklyDuino<\/a>, <a href=\"https:\/\/github.com\/technologiescollege\/Blockly-at-rduino\">Blockly@rduino<\/a>, parfois <a href=\"https:\/\/github.com\/A-S-T-U-C-E\/STudio4Education\">Studio4Education<\/a>. Derri\u00e8re ces interfaces, une m\u00eame question revient : <strong>comment faire vivre un moteur de blocs Arduino sans le recoller \u00e0 chaque nouveau logiciel ?<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">La r\u00e9ponse, en 2026, s\u2019appelle <strong>\u00b5cBlockly<\/strong> : un <em>noyau<\/em> open source, bas\u00e9 sur Blockly 13, qui transforme des blocs en C++ Arduino \u2014 et qui peut s\u2019embarquer dans une d\u00e9mo, dans BlocklyDuino, dans une Factory, ou dans votre propre application.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cet article raconte <strong>pourquoi<\/strong> ce noyau est n\u00e9. Le prochain d\u00e9taillera ce qu\u2019il est (et n\u2019est pas). Ensuite viendront l\u2019\u00e9cosyst\u00e8me, puis BlocklyDuino v3 c\u00f4t\u00e9 classe.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Le probl\u00e8me : un moteur coll\u00e9 \u00e0 l\u2019appli<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pendant des ann\u00e9es, la programmation visuelle pour microcontr\u00f4leurs a progress\u00e9 par <strong>produits complets<\/strong> : une UI, des blocs, un g\u00e9n\u00e9rateur, parfois un moniteur s\u00e9rie. Chaque avanc\u00e9e (accessibilit\u00e9, typage, nouvelles cartes) risquait d\u2019\u00eatre <strong>recopi\u00e9e<\/strong> ou <strong>fork\u00e9e<\/strong> d\u2019un outil \u00e0 l\u2019autre.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">R\u00e9sultat typique :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>un correctif dans BlocklyDuino n\u2019arrive pas tout de suite ailleurs ;<\/li>\r\n<li>un fork p\u00e9dagogique diverge silencieusement ;<\/li>\r\n<li>mettre \u00e0 jour Blockly (Google) devient un chantier monumental \u00e0 chaque d\u00e9p\u00f4t.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Autrement dit : on inventait souvent <strong>plusieurs fois le m\u00eame moteur<\/strong>, au lieu d\u2019inventer plusieurs <em>interfaces<\/em>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">L\u2019id\u00e9e du noyau<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00b5cBlockly inverse la logique. On s\u00e9pare volontairement trois couches :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Blockly<\/strong> \u2014 le moteur visuel g\u00e9n\u00e9rique (workspace, toolbox, s\u00e9rialisation) ;<\/li>\r\n<li><strong>\u00b5cBlockly<\/strong> \u2014 les blocs Arduino typ\u00e9s, le g\u00e9n\u00e9rateur C++, l\u2019API d\u2019int\u00e9gration ;<\/li>\r\n<li><strong>les produits<\/strong> \u2014 BlocklyDuino, Factory, d\u00e9mo, vos projets.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Le noyau ne doit <strong>pas<\/strong> embarquer toute la coque p\u00e9dagogique (Monaco \u00ab produit \u00bb, barre d\u2019outils m\u00e9tier, choix de carte \u00ab marque \u00bb). Il fournit ce qui est <em>commun et r\u00e9utilisable<\/em>. Le reste appartient \u00e0 chaque application.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cette id\u00e9e n\u2019est pas n\u00e9e en 2026 : d\u00e8s 2021, on parlait d\u00e9j\u00e0 d\u2019un noyau commun pour \u00b5cBlockly, BlocklyDuino et Studio4Education. La v3, sur <strong>Blockly 13<\/strong>, en est la forme aboutie et publiable.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Ce que change Blockly 13<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00b5cBlockly <strong>3.x<\/strong> s\u2019aligne sur Blockly 13 et les plugins <code>@blockly\/*<\/code> de la m\u00eame g\u00e9n\u00e9ration. Ce n\u2019est pas un d\u00e9tail de version :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>accessibilit\u00e9 et navigation clavier plus coh\u00e9rentes ;<\/li>\r\n<li>\u00e9cosyst\u00e8me de plugins maintenu ;<\/li>\r\n<li>base saine pour les ann\u00e9es \u00e0 venir.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cons\u00e9quence claire : un projet encore en Blockly 12 reste sur \u00b5cBlockly <strong>2.x<\/strong>. La rupture est assum\u00e9e pour ne pas tra\u00eener deux g\u00e9n\u00e9rations dans le m\u00eame d\u00e9p\u00f4t.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">H\u00e9ritage Blockly@rduino \u2014 sans tout jeter<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Blockly@rduino reste une r\u00e9f\u00e9rence p\u00e9dagogique (instances, niveaux, packs de blocs\u2026). \u00b5cBlockly reprend des id\u00e9es fortes (typage, instances nomm\u00e9es, structure de programme) dans une architecture moderne.<\/p>\r\n<p><a href=\"https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-93 size-full\" src=\"https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001.png\" alt=\"\" width=\"1298\" height=\"816\" srcset=\"https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001.png 1298w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-300x189.png 300w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-1024x644.png 1024w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-768x483.png 768w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-100x63.png 100w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-150x94.png 150w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-200x126.png 200w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-450x283.png 450w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-600x377.png 600w, https:\/\/libreduc.cc\/blog\/wp-content\/uploads\/2026\/09\/Image-001-900x566.png 900w\" sizes=\"(max-width: 1298px) 100vw, 1298px\" \/><\/a><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Les projets existantsne sont pas abandonn\u00e9s : documentation legacy et <a href=\"https:\/\/wiki.libreduc.cc\/fr:arduino:ucblockly:convert_rduino\">guide de conversion<\/a> sont l\u00e0 pour migrer quand vous le souhaitez.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Pourquoi publier le noyau maintenant ?<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Parce que le r\u00e9seau LibrEduc a besoin d\u2019une <strong>source de v\u00e9rit\u00e9 technique<\/strong> claire :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>code sur <a href=\"https:\/\/github.com\/A-S-T-U-C-E\/ucBlockly\">GitHub<\/a> (AGPL-3.0-or-later, copyleft y compris pour une version modifi\u00e9e propos\u00e9e en service r\u00e9seau) ;<\/li>\r\n<li>doc sur le <a href=\"https:\/\/wiki.libreduc.cc\/fr:arduino:ucblockly\">wiki<\/a> ;<\/li>\r\n<li>entraide sur le <a href=\"https:\/\/forum.libreduc.cc\/\">forum<\/a> ;<\/li>\r\n<li>produits d\u00e9riv\u00e9s qui s\u2019appuient dessus au lieu de le forker (<em>copiller comme on dit poliment&#8230;<\/em>) en silence.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Sans noyau partag\u00e9, chaque \u00ab nouveau Blockly pour Arduino \u00bb recommence \u00e0 z\u00e9ro. Avec \u00b5cBlockly, on recommence surtout <strong>l\u2019exp\u00e9rience utilisateur<\/strong> \u2014 l\u00e0 o\u00f9 l\u2019innovation p\u00e9dagogique a le plus de sens.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bient\u00f4t la suite&#8230;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em>R\u00e9seau LibrEduc \u2014 comprendre pour ne pas d\u00e9pendre, partager pour progresser.<\/em><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Pourquoi \u00b5cBlockly existe : s\u00e9parer le moteur Blockly\/Arduino des applications p\u00e9dagogiques, pour arr\u00eater de recoller le\u2026<\/p>\n<p class=\"read-more\"><a class=\"more-link\" href=\"https:\/\/libreduc.cc\/blog\/?p=81\">Read more \u2192<\/a><\/p>\n<p><!-- end of .read-more --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,7],"tags":[],"class_list":["post-81","post","type-post","status-publish","format-standard","hentry","category-blockly","category-cblockly"],"_links":{"self":[{"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=\/wp\/v2\/posts\/81","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=81"}],"version-history":[{"count":13,"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions\/104"}],"wp:attachment":[{"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=81"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=81"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/libreduc.cc\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=81"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}