ESP32-C3 Super Mini ↔ ESP32-S3 N16R8 : problème ESP-NOW résolu en réduisant la puissance TX
Bonjour à tous,
Je partage un problème qui m'a fait perdre pas mal de temps, ainsi qu'une solution qui fonctionne chez moi, car elle pourra peut-être servir à quelqu'un d'autre.
Le contexte
Je développe une petite station météo basée sur :
- un ESP32-S3 N16R8 qui fait tourner le hub météo ;
- un ESP32-C3 Super Mini qui sert de sonde extérieure ;
- communication entre les deux par ESP-NOW.
Le S3 fait également tourner une interface Web, un OLED, l'historique sur carte SD, etc.
Le C3 mesure température / humidité / pression et transmet périodiquement les données au S3.
Le problème
Avec le C3 Super Mini, ESP-NOW fonctionnait parfaitement dans un programme de test minimal :
ESP32-C3 Super Mini
↓ ESP-NOW
ESP32-S3
Le S3 recevait correctement les paquets.
Mais avec le firmware réel de ma station météo :
ESP32-C3 Super Mini
↓ ESP-NOW
ESP32-S3 N16R8
↓
MeteoHub
le S3 ne recevait plus les données du C3.
J'ai donc testé pas mal de choses :
- changement de GPIO I2C ;
- différents tests ESP-NOW minimaux ;
- vérification des MAC ;
- vérification du canal ;
- désactivation du sleep ;
- tests RF indépendants ;
- comparaison avec une autre carte ESP32-S3.
Le C3 était pourtant capable d'émettre et la communication C3 → S3 fonctionnait dans les tests minimaux.
Le test qui a finalement fait la différence
J'ai simplement réduit la puissance d'émission du C3.
À pleine puissance :
WiFi.setTxPower(WIFI_POWER_19_5dBm);
→ communication instable / inexistante avec le MeteoHub.
Puis :
WiFi.setTxPower(WIFI_POWER_8_5dBm);
→ ESP-NOW fonctionne parfaitement.
Depuis, la liaison est stable.
Par exemple, côté MeteoHub :
[INFO] ESP-NOW: ch=6 rx=102 ok=102 bad=0 last_len=51 src=F0:F5:BD:FB:5E:88
[INFO] History: Outdoor data saved to SD
[INFO] History: Outdoor data added (T=26.135063°C, H=59.283066%)
[INFO] ESP-NOW: packet node=1 seq=66 T=26.135063 H=59.283066 P=1023.920654
[INFO] ESP-NOW: ch=6 rx=103 ok=103 bad=0 last_len=51 src=F0:F5:BD:FB:5E:88
[INFO] History: Outdoor data saved to SD
[INFO] History: Outdoor data added (T=26.087570°C, H=58.064079%)
[INFO] ESP-NOW: packet node=1 seq=67 T=26.087570 H=58.064079 P=1023.914856
Donc actuellement :
103 paquets reçus
103 paquets valides
0 paquet invalide
Ce qui me laisse perplexe
Je ne sais pas exactement ce qui se passe physiquement.
Le comportement est contre-intuitif :
réduire la puissance TX du C3 améliore radicalement la fiabilité de la liaison ESP-NOW.
Je ne peux donc pas affirmer que « le C3 est trop puissant ».
Je soupçonne plutôt un problème particulier à certaines cartes C3 Super Mini :
- adaptation d'antenne ;
- layout RF ;
- alimentation ;
- perturbations ;
- proximité de certains composants ;
- ou comportement radio particulier à forte puissance.
La même chose peut-elle arriver avec certaines versions/clones de C3 Super Mini ?
En résumé
Matériel :
ESP32-C3 Super Mini
↕
ESP-NOW
↕
ESP32-S3 N16R8
Canal :
6
MAC C3 :
F0:F5:BD:FB:5E:88
Réglage qui fonctionne :
WiFi.setTxPower(WIFI_POWER_8_5dBm);
À puissance TX élevée : problème.
À 8,5 dBm : liaison stable.
Je partage donc surtout ce retour pour savoir si d'autres personnes ont déjà rencontré ce comportement avec un C3 Super Mini face à un ESP32-S3.
Si quelqu'un a une explication RF plus précise ou un moyen de caractériser le problème, je suis preneur.
Et si quelqu'un rencontre un C3 Super Mini qui refuse mystérieusement de communiquer correctement en ESP-NOW, ça vaut peut-être le coup d'essayer de réduire temporairement la puissance TX avant de passer trois jours à suspecter tout le reste. ![]()