
Vous avez déjà très certainement été confronté à des pertes du flux vidéo ou un gel de l’image avec l’ESP32-CAM. Plusieurs solutions sont possibles pour améliorer les choses. Nous allons voir comment activer le connecteur IPEX des cartes génériques pour connecteur une antenne externe et optimiser le code Arduino.
La modification a été testée sur un module ESP32-CAM générique.
Activer l’antenne externe (IPEX) de ESP32-CAM (ESP32-S)
Les cartes génériques ESP32-CAM ou ESP-EYE utilisent en général un module ESP32-S (une version qui semble avoir été développée par Ai Thinker). Ce module dispose d’une antenne gravée sur le PCB ainsi qu’un connecteur IPEX qui permet d’utiliser un antenne externe amplifiée.
Il n’est pas possible d’utiliser simultanément les deux antennes. La sélection de l’antenne (PCB ou IPEX) se fait à l’aide d’une résistance.
Le problème, c’est qu’il faut manuellement modifier le circuit..et pour ça, il va falloir jouer du fer à souder, et ça c’est pas facile à faire !
Mieux vaut être bien équipé. L’idéal serait d’avoir un fer à souder à air chaud et une précelle mais on y arrive avec un simple fer à souder, une bonne loupe et un peu de patiente 😛
Voir plus d’équipements de soudure
Pour activer l’antenne externe (et désactiver l’antenne PCB), il “suffit” de dessouder la résistance et la déplacer sur le plot du connecteur IPEX. Inutile de se mentir, vu la taille de la résistance, elle risque de se coller à la panne du fer à souder…c’est ce qui m’est arrivé. J’ai simplement remplacer la résistance par un fil de cuivre récupéré sur un Jumper. C’est pas idéal mais ça marche.
(*) Sauf si le fabricant l’a explicitement signalé mais c’est très rare
Test de la force du signal WiFi et de la stabilité du flux vidéo
Voici un petit morceau de code qu’il suffit d’insérer dans votre projet ESP32-CAM pour tester la force du signal WiFi dès que la connexion WiFi est établie. La force du signal moyenne est calculée sur la base de 10 mesures réalisées à 200ms d’intervalle.
long logrssi = 0 ; for (size_t i = 0; i
Voici les résultats obtenus avec 3 antennes différentes.
La force du signal évolue en permanence en fonction de la charge du réseau (des autres appareils connectés). Pour les tests, il n’y avait que mon ordinateur portable connecté à un point d’accès WiFi Netgear.
Sur le papier, l’antenne souple 2dBi n’apporte clairement pas grand chose. Une antenne ayant un gain d’au moins 6dBi semble un minimum pour commencer à améliorer le signal.
Trouver d’autres antennes amplifiées plus puissantes
L’amélioration peut sembler faible, mais c’est suffisant pour améliorer la stabilité du flux vidéo et réduire le taux de compression. Pour être plus rigoureux, il faudrait continuer le test sur une plus grande période et voir
Par contre de façon empirique, avec l’antenne PCB, j’avais du mal à converser le flux sans réduire la résolution et augmenter le taux de compression (et donc réduire la qualité de l’image). Avec l’antenne externe, j’ai pu passer la résolution en UXGA (1600×1200) et réduire le taux de compression à 10 (sur 63).
Voici 3 petits clips de démonstration. La vitesse de la vidéo est réelle.
Antenne externe 6dBi
Pour info, voici ce qu’on peut espérer faire en fonction de la force du signal.
Acheter une carte avec connecteur SMA ou IPEX pour antenne externe prêt à l’emploi
Vous devriez réussir l’opération sans endommager l’ESP32-S qui est bien protégé par un capot de protection. Si vous n’avez pas le matériel, vous pouvez vous rabattre sur un modèle prêt à l’emploi. En voici quelques-uns.
M5Stack Timer Camera
La M5Stack Timer Camera est une carte de développement équipée du capteur optique OV3660 permettant d’atteindre une résolution de 3MP ainsi que d’une horloge RTC BM8563. La carte est équipée d’une antenne WiFi 3D.
La M5Stack Timer Camera est également permettant de connecter des accessoires I2C Grove 4 broches. Les broches IO04 et IO13 de l’ESP32 sont exposées. Le connecteur Grove permet de connecter les capteurs et actionneurs M5Stack ou SeeedStudio.
Inutile de mettre la caméra en mode “bootloader” à chaque fois que vous voulez téléverser un nouveau programme, la carte est équipée d’un connecteur USB-C ansi que d’un convertisseur UART / USB CP2104. La M5Stack Timer Camera est idéale pour débuter. La programmation peut se faire par assemblage de blocs (language blocky).
TTGO T-Camera, T-Camera Plus ou T-Journal de LilyGo
LilyGo, le fabricant des cartes de développement TTGO nous propose 3 cartes de développement ESP32-CAM.
Les cartes ESP32-CAM TTGO T-Camera et T-Camera Plus sont équipées d’une antenne WiFi 3D ainsi que d’un connecteur IPEX. A priori, il n’est pas nécessaire d’intervenir sur le circuit pour connecteur une antenne externe. L’antenne WiFi 3D devrait toutefois offrir un signal de qualité dans la plupart des situations, en intérieur du moins.
La T-Journal est équipée d’un double connecteur SMA + IPEX (soudé à la base du connecteur SMA). Aucune antenne n’est gravée sur le PCB, il faudra donc obligatoirement utiliser une antenne externe.
MSM261S4030H0❌Lecteur de carte SD❌✓❌BME280 (température + humidité + pression atmosphérique)❌Intégré❌I2CConnecteurConnecteur❌ÉcranOLED SSD1306
0,96″ (128×64)IPS ST7789
1.3″OLED SSD1306
0,96″ (128×64)CaméraOV2640OV2640OV2640PIR✓
AS312
❌
❌
Bouton utilisateur✓
❌
❌UART / USBCP2104CP2104CP2104Connecteurmicro-usbmicro-usbmicro-usbConnecteur JST pour batterie LiPo✓✓✓Antenne WiFi 3D✓✓ Connecteur IPEX uFL✓✓✓Connecteur SMA❌❌✓Dimension69.13*28.41*8.45mm64.57mm*23.98mmRessourcesConsulterConsulterConsulter
TTGO T-Camera avec détecter de mouvement PIR
TTGO T-Camera Plus avec micro, BME280, écran TFT couleur 1,3″ et lecteur de carte SD
Dommage le détecteur de mouvement a été remplacé par un bouton poussoir, probablement pour faire des selphis ! Elle aurait été parfaite pour une caméra de surveillance avec son lecteur de carte microSD.
TTGO T-Journal
La TTGO T-Journal est directement équipée d’un connecteur SMA. Un connecteur IPEX (uFL) est également présent à la base du connecteur SMA. Bonne idée !
Optimiser le code Arduino
Si malgré l’antenne externe vous avez toujours un gel de l’image, vous pouvez ajuster les paramètres d’acquisition. O peut agir sur 3 paramètres :
Activer le support de la PSRAM
La PSRAM est une puce mémoire accessible sur le bus SPI que l’ESP32 peut utiliser pour augmenter sa propre RAM. Cela permet de créer un buffer vidéo plus large. C’est la première chose à faire surtout si votre carte est équipée de PSRAM. Sinon, la PSRAM ne servira à rien !
Voici un exemple de configuration type à intégrer dans le setup()
if(psramFound()){ config.frame_size = FRAMESIZE_UXGA; // 1600×1200 config.jpeg_quality = 10; config.fb_count = 2; // Si > 1, active le bus I2S } else { config.frame_size = FRAMESIZE_SVGA; // 800×600 config.jpeg_quality = 12; config.fb_count = 1; }
La résolution de la caméra, paramètre config.resolution
Voici les résolutions disponibles (en pixels)
FRAMESIZE_QQVGA, 160x120FRAMESIZE_QQVGA2, 128x160FRAMESIZE_QCIF, 176x144FRAMESIZE_HQVGA, 240x176FRAMESIZE_QVGA, 320x240FRAMESIZE_CIF, 400×296———– Acceptable resolutions for video surveillance ————FRAMESIZE_VGA, 640x480FRAMESIZE_SVGA, 800×600———– Ideal resolutions for video surveillance ————FRAMESIZE_XGA, 1024x768FRAMESIZE_SXGA, 1280×1024———– Rather to take photos at regular intervals (timelaps) ————FRAMESIZE_UXGA, 1600x1200FRAMESIZE_QXGA, 2048x1536config.frame_size = FRAMESIZE_UXGA;
Augmenter le taux de compression de l’image
Le taux peut varier de 0 (aucune compression) à 63 (quasiment illisible).
10 taux de compression avec une perte de qualité presque acceptable20 à 40 si le signal WiFi est médiocreAu delà de 40 il faut vraiment améliorer votre réseau WiFi. La qualité de l’image est perfectible même pour faire de la vidéo-surveillanceconfig.jpeg_quality = 10;
Le module caméra est défectueux
La dernière cause potentielle de gel ou de flux vidéo saccadé, peut provenir tout simplement d’un capteur vidéo défectueux (problème que j’ai rencontré). Il est possible d’acheter séparément un module caméra de remplacement pour quelques euros.
Mises à jour
11/12/2020 Publication de l’article
Merci pour votre lecture.
ESP32-CAM. Broches et équipements ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…ESP32-CAM. Quel modèle choisir ? ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…ESP32-CAM. Souder l’antenne externe pour améliorer la portée et la stabilité du flux vidéo5 astuces pour ESP32-CAM. Adresse IP fixe. Mode AP. Rotation image 90°. Récupération automatique connexion WiFi. stockage du code HTMLESP32-CAM. Migrer le projet CameraWebServer pour l’IDE Arduino vers PlatformIO