Récepteur et décodeur de Télé-Information Client (TIC) Linky pour ESP32, avec interface web d'affichage en temps réel. Actuellement supporté : mode TIC Historique (1200 baud). La TIC Standard (9600 baud) avec détection automatique du baudrate est prévue dans une version ultérieure.
- Réception TIC Historique — 1200 baud, 7E1, format ERDF-NOI-CPT_02E
- Parser de trames — machine à états STX/ETX, découpage label/valeur/checksum
- Vérification checksum ligne par ligne, avec affichage du caractère attendu en cas d'erreur
- Interface web rafraîchie automatiquement toutes les 1,5s
- Tableau de tous les champs reçus avec indicateur ✓/✗ par ligne
- Compteur de trames reçues et d'erreurs checksum
- Affichage de la trame brute décodée (STX, LF, CR, ETX lisibles)
- IP fixe configurable
| Composant | Référence |
|---|---|
| Microcontrôleur | ESP32 (testé sur ESP32 Mini1) |
| Port TIC | HardwareSerial(1) — RX=GPIO19, TX=GPIO18 |
Simulateur / Compteur Linky ESP32 Récepteur
────────────────────────── ────────────────
GPIO19 TX ────────────────────► GPIO19 (RX1)
GND ────────────────────► GND
Note : Un vrai compteur Linky sort la TIC via un optocoupleur. Selon le circuit récepteur utilisé, il peut être nécessaire d'activer l'inversion du signal série :
TICSerial.begin(1200, SERIAL_7E1, RX1, TX1, true); // true = inversion
Modifier dans src/tic_receiver.ino :
const char* ssid = "votre_ssid";
const char* password = "votre_password";
IPAddress local_IP(192, 168, 1, 151); // IP fixe du récepteur
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(8, 8, 8, 8);- Installer le support ESP32 via le Gestionnaire de cartes
- Sélectionner la carte : ESP32 Dev Module (ou équivalent)
- Ouvrir
src/tic_receiver.ino - Modifier les paramètres WiFi
- Compiler et téléverser
| Paramètre | Valeur |
|---|---|
| Board | ESP32 Dev Module |
| Upload Speed | 921600 |
| Flash Size | 4MB |
- Alimenter l'ESP32
- Connecter le TX du simulateur (ou compteur Linky) au GPIO19
- Accéder à l'interface web :
http://192.168.1.151 - Le tableau se rafraîchit automatiquement toutes les 1,5s
┌─────────────────────────────────────────────┐
│ TIC Receiver — TIC_RECEIVER 03/06/2026 │
│ Trames: 42 | Erreurs CS: 1 | Dernière: 63s │
├──────────────┬──────────────┬───────────────┤
│ Label │ Valeur │ CS │
├──────────────┼──────────────┼───────────────┤
│ ADCO │ 123456789012 │ ✓ │
│ OPTARIF │ HC.. │ ✓ │
│ ISOUSC │ 30 │ ✓ │
│ ... │ ... │ ... │
│ MOTDETAT │ 000000 │ ✓ │
├──────────────┴──────────────┴───────────────┤
│ Trame brute : │
│ <STX><LF>ADCO 123456789012 '<CR>... │
└─────────────────────────────────────────────┘
WAIT_STX ──── 0x02 (STX) ────► IN_FRAME
│
0x0A (LF) │ début de ligne
0x0D (CR) │ fin de ligne → parseTICLine()
0x03 (ETX)│ fin de trame → publication
│
WAIT_STX ◄───────────────┘
LF <étiquette> SP <valeur> SP <checksum> CR
0x0A 0x20 0x20 0x0D
// Somme des octets de "étiquette valeur " (espace inclus)
uint8_t sum = 0;
for chaque octet: sum += octet;
checksum = (sum & 0x3F) + 0x20; // résultat : caractère ASCII imprimable 0x20-0x5F- Support du mode TIC Standard (9600 baud, séparateur HT 0x09, horodate)
- Détection automatique du baudrate : le récepteur teste 1200 puis 9600 baud et se synchronise sur le flux détecté
- Affichage du mode détecté sur la page web
- Parser étendu pour les champs Standard (ADSC, VTIC, IRMS1, URMS1, SINSTS, STGE...)
- Historique des dernières trames
- Export CSV des données reçues
- Alertes sur checksum invalide
Testé avec :
- esp32-linky-simulator — simulateur TIC ESP32-C3
- Compteur Linky réel (TIC Historique via optocoupleur)
esp32-tic-receiver/
├── src/
│ └── tic_receiver.ino # Code source principal
├── hardware/
│ └── pinout.md # Mapping des GPIO
├── docs/
│ └── ERDF-NOI-CPT_02E.pdf # Spec TIC Historique (ERDF 2010)
├── README.md
├── CHANGELOG.md
└── LICENSE
- ERDF-NOI-CPT_02E v4 — Sorties TIC compteurs électroniques (2010)
- Enedis-NOI-CPT_54E v3 — Sorties TIC compteurs Linky (2018)
- esp32-linky-simulator — Simulateur associé
MIT — voir LICENSE
Projet Papymakers — support@papymakers.com