----
title: mesh(tastic|core), atelier découverte février 2026
author: joachim@fourbi.eu
----

<style type="text/css">
  section {
    --color-highlight: hsl(170deg, 90%, 50%);
    --color-highlight-hover: color-mix(in srgb, var(--color-highlight), white 20%);
    --color-highlight-heading: var(--color-highlight);

    font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
    font-weight: normal;
  }

  p,
  blockquote,
  li,
  h1,
  h2,
  h3,
  h4,
  h5,
  h6  {
    text-wrap: pretty;
    text-wrap: balance;
  }

  section:not(.center) p:not(.center) {
    text-align: left;
  }

  img {
    max-width: 90%;
    max-height: 50%;
  }

  section.small {
    p {
      font-size: 0.9rem;
    }
    ul {
      font-size: 0.8rem;
    }
  }

  section.galerie ul {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 0.5em;

    &, li {
      list-style: none;
      margin: 0; padding: 0;
    }

    li {
      display: flex;
      flex-direction: column;
      font-size: 0.5rem;
    }

    img {
      aspect-ratio: 1;
      width: 100%;
      max-width: 100%;
      max-height: 100%;
      object-fit: cover;
      object-align: center;
    }
    img:not([src*=".svg"]){
      background: white;
    }
  }
  section.galerie-4 ul {
    grid-template-columns: repeat(4, 1fr);
  }
  section.galerie-2 ul {
    grid-template-columns: repeat(2, 1fr);
    li {
      text-align: center;
      padding: 2em;
    }
    img {
      object-fit: contain;
    }
  }

  p:has(img[alt="balcon"]) {
    float: left;
    padding-right: 1em;
    padding-top: 0.5em;
    width: 30%;

    img {
      object-fit: cover;
    }
  }
</style>

<!-- class: invert center -->
<!-- theme: uncover -->

# mesh(tastic|core)

## atelier découverte

07 . 02 . 26
joachim@fourbi.eu

----
<!-- class: invert small -->

## joachim

![balcon](https://professeurjoachim.com/2026-02-mesh/balcon.jpg)

je fais des sites web, j’arrose mes plantes et j’aime jouer avec des tout petits ordinateurs

je connais peu sur le sujet, je m’y suis intéressé parce que les mini radios ont l’air _fun_, et j’explore tout ça avec des amis

----
<!-- class: invert  -->

## l’atelier

1. le protocole (un peu de contexte)
2. on s’amuse avec les radios
3. les réseaux mesh (un peu + de théorie)
4. questions, discussions, tests

----

## le protocole

----

### LoRa

- technique de radio
- longue portée (LongRange)
- faible consommation énergétique
- couche physique pour différents protocoles (LoRaWAN…)
- principalement utilisée sur l’Internet des Objets
- émet sur les bandes ISM (industrielle, scientifique et médicale)

----

### cadre légal

on émet et on reçoit sur le spectre public, on est soumis aux réglementations

en Europe, la bande 868 MHz (en pratique, entre 869,4 et 869,65 MHz) est utilisée par plusieurs protocoles (LoRa, Helium, Sigfox…) et standardisés par l’ETSI [EN300.220](https://www.etsi.org/deliver/etsi_en/300200_300299/30022002/03.02.01_60/en_30022002v030201p.pdf)

varie selon les zones géographiques (EU : 433 MHz et 868 MHz, US : 915 MHz…)

----

ça veut dire que pour agir sans problème, on reste dans la bande autorisée, à la puissance autorisée

et donc en achetant une antenne ou un module LoRa il faut faire attention à cette fréquence

----

### **meshtastic** / **meshcore**

deux projets qui font la couche logicielle (firmware + applications)

ça permet à ces radios LoRa réglées sur la même fréquence de se comprendre

début du projet **meshtastic** en 2020
**meshtastic** en GPL, **meshcore** en MIT (et clients propriétaires)

----

**meshtastic** ou **meshcore** permettent :

- de communiquer par message (200 caractères)
- en public ou chiffré
- en peer to peer
- avec un haut niveau de résilience du réseau
- sur du matériel pas très cher

----
<!-- class: invert small -->

## démonstration

- ça capte tout le réseau parisien
- on communique sur le canal **NarvaLoRa** entre nous,
  ou en privé avec les contacts “favoris” ⭐️
  (pas sur le canal Public)
- `🙂_820c` smiley, `🌠_d43f` star, `🐍_e628` snek
- code d’appairage bluetooth `123456`
- (et on ne touche pas aux préférences du module svp)

----

## les réseaux mesh

----
<!-- class: invert galerie galerie-2 -->

### topologie

- ![](https://professeurjoachim.com/2026-02-mesh/mesh-distributed.svg) réseau distribué
- ![](https://professeurjoachim.com/2026-02-mesh/mesh-federated.svg) réseau décentralisé

----
<!-- class: invert center small -->

![](https://professeurjoachim.com/2026-02-mesh/meshtastic-topology.webp)

_un résau **meshtastic**_
<small>(via [meshtastic.org](https://meshtastic.org/docs/introduction/))</small>


----
<!-- class: invert -->

le réseau est composé de nœuds qui rediffusent les messages reçus, de rebond en rebond, jusqu’au destinataire

tous les nœuds partagent la même fréquence, bande passante et facteur d’étalement

un message et sa réponse peuvent prendre des chemins différents, les nœuds suivent des règles précises pour la rediffusion des messages, dans une limite de 8 rebonds


----

niveau matériel, la plupart des nœuds s’utilisent avec un ordinateur ou un téléphone, connecté en bluetooth BLE ou en USB série, mais certains modules ont un écran et un clavier pour être utilisés comme des terminaux sans besoin d’un ordi/téléphone externe


----
<!-- class: invert small galerie galerie-4 center -->

- ![](https://professeurjoachim.com/2026-02-mesh/module-01.webp)
- ![](https://professeurjoachim.com/2026-02-mesh/module-02.webp)
- ![](https://professeurjoachim.com/2026-02-mesh/module-02b.jpg)
- ![](https://professeurjoachim.com/2026-02-mesh/module-03.png)
- ![](https://professeurjoachim.com/2026-02-mesh/module-04.jpg)
- ![](https://professeurjoachim.com/2026-02-mesh/module-05.webp)
- ![](https://professeurjoachim.com/2026-02-mesh/module-05b.webp)
- ![](https://professeurjoachim.com/2026-02-mesh/module-06.jpg)


<small>(via les différents fabricants)</small>

----

<!-- class: invert center -->

![](https://professeurjoachim.com/2026-02-mesh/meshtastic-paris.jpg)

_le réseau **meshtastic** parisien_

----

<!-- class: invert small -->

### les _presets_ 

les presets sont des définitions de ~~couple~~ trouple fréquence, bande passante et facteur d’étalement

le choix de ce preset pour tout le réseau va permettre de tirer partie de l’algo de diffusion de **meshtastic**

sur Paris on utilise _Medium Fast_, au Chaos Communication Congress, avec des milliers de nœuds, le preset utilisé était _Short Turbo_

----

### les rôles

le firmware est identique pour tous

- `CLIENT` : terminal qui rediffuse
  - `CLIENT_BASE` : rediffuse en priorité à ses favoris
  - `CLIENT_MUTE` : reçoit mais ne rediffuse pas
  - `CLIENT_HIDDEN` : le plus discret possible
- `ROUTER` : nœud d’infrastructure, souvent non surveillé
  - `ROUTER_LATE` : rediffuse largement après les autres

----

<!-- class: invert -->

### les canaux

- on a jusqu’à 8 canaux de discussion
- le canal public est toujours présent, au niveau 0, sans nom et sans clé
- les canaux secondaires sont définis par un nom et une clé de chiffrement
- on peut aussi discuter en privé (c’est chiffré)
- un nœud qui n’a pas la clé ne rediffuse pas

----

### **meshcore**

c’est grosso modo la même chose que **meshtastic**, mais avec une approche différente

**meshcore** utilise le même matériel et les mêmes fréquences

la philosophie est différente, plus adaptée à une topologie fixe

----
<!-- class: invert small -->

**meshcore** a une organisation en trois rôles, chacun a son firmware spécifique :

- `companion` : comme `CLIENT_MUTE`, le terminal qui accède et écrit des messages et ne les retransmet pas
- `repeater` : comme `ROUTER`, rediffuse tous les messages avec un algo de routage
- `room_server` : serveur de discussion (qui garde les conversations récentes) pour _companions_ autorisés

----
<!-- class: invert -->

le fonctionnement de **meshcore** n’a pas la limite de 8 rebonds, donc les messages peuvent se répandre bien plus loin tant qu’il y a des _repeaters_

là où **meshtastic** inonde de paquets, **meshcore** établit une table de destinataires ciblés et organise ses envois en conséquence

----

### à quoi c’est utilisé ?

- communication off-grid (zone blanche)
- communication offline (blackout/brownout électrique)
- catastrophes naturelle
- contournement de censure
- mise à jour de position en temps réel

----

### à quoi est-ce que _je_ l’utilise ?

mes notes : 🌿 [fourbi.eu/billets/mesh](https://fourbi.eu/billets/mesh)

- pour m’amuser avec les camarades
- un premier pied dans le monde radio-amateur
- … une rando à vélo en groupe ? (en projet)
- c’est bidouillable

----
<!-- class: invert small galerie -->

### bidouillabilité

le fait que les éléments basiques des modules sont petits permet beaucoup de choses

- ![](https://professeurjoachim.com/2026-02-mesh/img-01.jpg) nœud modulaire imprimé en 3d
  <small>(via [r/meshtastic](https://www.reddit.com/gallery/1qs0jxo))</small>
- ![](https://professeurjoachim.com/2026-02-mesh/img-02.jpg) répéteur USB filtre cavité / antenne moxon
  <small>(via [Mesh IDF](https://wiki.mesh-idf.fr/fr/Album/Album))</small>
- ![](https://professeurjoachim.com/2026-02-mesh/node-martin.jpg) nœud en lego
  <small>(via martin)</small>

----

<!-- class: invert -->

les modules LoRa de base sont en ESP32 ou nRF52, des plateformes matérielles de développement plutôt accessibles

ça permet notamment de greffer un microcontrolleur en ESP32 sur un Raspberry Pi, ou de brancher des capteurs (GPS, météo…) sur les cartes, pour diffusion sur le mesh

----

### limites

ça reste des ondes radio, donc la limite principale est liée à la saturation de la fréquence

- “facile” à faire pour une entité qui en a les moyens
- environnement dense saturé d’IoT
- géographie/architecture urbaine
- mauvais paramétrage : collision de paquets

----

- un module a peu de mémoire, et ne garde qu’une trentaine de messages les plus récents
- si ton module n’est pas en ligne ou pas bien exposé, il ne recevra pas de message
- ➡️ pas de discussion asynchrone

----

mais il y a d’autres limites :

- pas de moyens de modération
  - si on veut bannir quelqu’un, on change le nom du canal ou on change la clé
  - on peut ignorer un nœud mais il reçoit ce qui est sur les ondes
- _honeypot repeater_ pour une attaque MITM ou surtout pour surveiller les metadonnées (gps, etc.)

----

### pour se lancer

pour avoir la bidouillabilité et une bonne portée dès le début pour une cinquantaine d’euros, je recommande :

- [Heltec Node T114](https://heltec.org/project/mesh-node-t114/)
- [Seeed Wio Tracker L1 Pro](https://www.seeedstudio.com/Wio-Tracker-L1-Pro-p-6454.html)

🔗 [recommandations d’achat](https://fourbi.eu/billet/2026-01-09-notes-d-exploration-lora-no3)

----

### documentations officielles

- [meshtastic.org/docs](https://meshtastic.org/docs/introduction/)
- [github:meshcore-dev/MeshCore/docs](https://github.com/meshcore-dev/MeshCore/blob/main/docs/index.md)

----

### projets communautaires

- [Mesh IDF](https://wiki.mesh-idf.fr/) (meshtastic)
- [Gaulix](https://gaulix.fr/) (meshtastic)
- [MeshCore France](https://www.meshcore.fr/) (meshcore)
- grosses communautés aux US, en Australie, aux Pays-Bas ou en Allemagne
- bonne activité sur reddit [meshcore+meshtastic](https://old.reddit.com/r/meshcore+meshtastic/)
- … avec toi ?

----

### NarvaLoRa

projet (en phase initiale) dans les communes de l’est parisien

- **meshcore** ou ~~meshtastic~~ ?
- est-ce qu’on installe des nœuds en boy-scout ou en pirate ?
- modules “grand public” dans les endroits sympa (la BOM, le Fuz, fablabs, maison populaire, hacker spaces…)

----

## questions, discussions, tests…

(là non plus on ne spamme pas le canal Public et on reste sur NarvaLoRa svp)

----

# Merci !

<p class="center">⁂ <a href="https://boitam.eu/@joachim">@joachim@boitam.eu</a></p>

<p class="center">•</p>

<p class="center"><small>partage <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr">Creative Commons BY-NC-SA</a><br>les illustrations appartiennent à leurs auteurs</small></p>