Point ./ Limite

Wiki du blog Point ./ Limite

Outils pour utilisateurs

Outils du site


public:espion

ESPion : une caméra autonome pour nichoir

Page du projet sur le blog

Toutes les commandes doivent être exécutées en tant que superutilisateur. Le code indiqué entre chevrons < > est à remplacer par la valeur correspondante. Le code suivant un double slash / / est un commentaire.

N.B. : la plupart des informations proviennent du blog Electronique en amateur.

Matériel

  • ESP32-CAM avec module de caméra OV2640
  • Antenne wifi externe
  • Convertisseur USB-série TTL 3,3/5V
  • Relais radiocommandé 433 MHz
  • Boîtier ABS IP65 avec passes-fils
  • Nichoir
  • Batterie externe (powerbank) USB 5V/10000mAh
  • Résistance 220 ohms
  • LED infrarouge
  • Carte de circuit imprimé pour prototypage
  • Fil de câblage
  • Matériel à souder

Principe de fonctionnement

A la mise sous tension de l'ESP32-CAM, le programme compilé espion.ino s'exécute. Ce programme permet à l'ESP32-CAM de fonctionner comme un serveur de streaming : il génère un flux vidéo (capture et encodage des images) sur le port 81, ainsi qu'un serveur web, accessible sur le port 80, et une page web qui sert d'interface (minimaliste) pour afficher le flux vidéo. Il gère en outre la connexion au réseau wifi spécifié. Il est alors possible d'accéder au flux vidéo de l'ESP32-CAM depuis un navigateur (client) connecté au même réseau en tapant son adresse IP.

Préparation matérielle

Utilisation de l'antenne externe

Position de la résistance pour le choix de l'antenne

Instructions tirées de https://randomnerdtutorials.com/esp32-cam-connect-external-antenna

Afin d'utiliser l'antenne wifi externe, il convient de vérifier que la résistance située à proximité du connecteur de l'antenne est soudée dans la bonne position (voir schéma ci-contre). Si ce n'est pas le cas, il faut utiliser l'antenne interne ou dessouder puis ressouder la résistance dans la position souhaitée. N.B. : en général, la résistance est soudée en mode “antenne externe” sur les modules livrés avec une antenne externe.

Suppression du filtre infrarouge de la caméra

Instructions tirées de https://marksbench.com/electronics/removing-ir-filter-from-esp32-cam

  • Déconnecter le module de caméra de l'ESP32-CAM.
  • A l'aide d'un cutter ou d'un scalpel, gratter doucement la colle entre le barillet de l'objectif (disque cranté central) et le boîtier de la caméra (cerclage). Une fois la colle retirée, le barillet doit être mobile.
  • Dévisser délicatement le barillet de l'objectif (sens inverse des aiguilles d'une montre) avec deux doigts. L'objectif est entièrement dévissé, il se désolidarise du boîtier. Le filtre infrarouge est fixée à l'arrière du barillet (surface rosée et brillante) par un petit anneau en plastique et collé à la lentille de l'objectif. N.B. : la surface irisée au fond du boîtier est le capteur de la caméra et doit être protégé de la poussière et des projections le temps de l'opération.
  • Toujours à l'aide d'une lame fine, couper délicatement l'anneau en plastique qui maintien le filtre IR, puis décoller délicatement le filtre IR de la lentille, en prenant soin de ne pas abîmer la lentille.
  • Une fois le filtre retiré, s'assurer qu'il n'y a pas de poussière ni sur le capteur ni sur la lentille, puis revisser soigneusement le barillet dans le boîtier. N.B. : le barillet peut facilement se visser de travers, il faut faire particulièrement attention à cette étape.
  • Il est désormais possible de régler la netteté en vissant ou dévissant le barillet (attention, le barillet se sépare du boîtier s'il est trop dévissé).

Connexion en mode programmation

Mode programmation de l'ESP32-CAM

L'ESP32-CAM est d'abord connecté en mode programmation avant d'être connecté en mode autonome dans le montage final. Connecter l'ESP32-CAM et le convertisseur USB-série comme sur le schéma ci-contre. Le port I/O 0 est relié à la masse pendant la phase de programmation du module (mode flash de la mémoire du microcontrôleur). Cette liaison est retirée ensuite. Connecter le convertisseur à l'ordinateur via le port USB puis appuyer sur le bouton Reset de l'ESP32-CAM. Après chaque téléversement d'un programme sur le module, appuyer sur le bouton Reset pour prendre en compte les changements. Le convertisseur USB-TTL n'est utilisé que pour la programmation, il est retiré dans le montage final.

Préparation logicielle

Solution 1 : utiliser le programme d'exemple

Le programme d'exemple CameraWebServer est particulièrement volumineux et complexe dans sa construction. Il est conseillé d'adopter la solution 2 (voir plus bas).

Pour fonctionner, le script CameraWebServer fait appel au langage Python et à certaines de ses bibliothèques, notamment pyserial. Au cas où ils ne seraient pas installés sur l'ordinateur, ouvrir un terminal et taper :

// Solution 1 :
apt update
apt install python3
apt install python-pip
pip install pyserial

// Solution 2 (non testée) :
apt update
apt install python3
apt install python-serial
  • Lancer l'environnement de programmation Arduino IDE. Dans Fichier > Préférences > URL de gestionnaire de cartes supplémentaires, ajouter l'adresse https://dl.espressif.com/dl/package_esp32_index.json puis confirmer avec OK.
  • Dans Outils > Type de carte > Gestionnaire de cartes, chercher “esp32 by Espressif Systems” dans la liste et cliquer sur Installer.
  • Sélectionner la carte : Outils > Type de carte > AI Thinker ESP32-CAM.
  • Ouvrir le menu Fichier > Exemples > ESP32 > Camera > CameraWebServer.
  • Ouvrir la console série : Outils > Moniteur série et sélectionner la vitesse 115200 bauds.
  • Brancher la carte (c'est-à-dire l'adaptateur USB/TTL) à l'ordinateur et appuyer sur le bouton Reset de la carte. Cliquer sur Téléverser. Si tout se passe bien, aucune erreur ne devrait apparaître.
  • L'adresse IP de la carte devrait apparaître dans la console série. Dans un navigateur, taper : http://<adresse_ip_esp32>. Le flux vidéo de l'ESP32-Cam devrait apparaître.

Solution 2 : utiliser le programme simplifié

Afin de clarifier le code, simplifier l'interface web et éliminer les fonctions inutiles pour le projet (reconnaissance faciale, ajustement des paramètres d'image, paramètres pour d'autres cartes), le programme de l'ESPion ne se base pas sur le programme d'exemple mais sur le code proposé par Yves Pelletier (https://electroniqueamateur.blogspot.com/2020/01/esp32-cam-un-web-server-minimaliste.html). Grâce à ses modifications, on passe de “1400 lignes de code réparties en 4 fichiers” à un seul fichier de 225 lignes.

  • Télécharger le script espion.ino et l'ouvrir dans Arduino IDE.
  • Modifier les lignes 15 et 16 en remplaçant les étoiles par les identifiants du réseau Wifi :
const char* ssid = "nom_reseau_wifi" // ligne 15
const char* password = "mot_de_passe_wifi" // ligne 16
  • Enregistrer le script dans le répertoire voulu. Ouvrir la console série : Outils > Moniteur série et sélectionner la vitesse 115200 bauds.
  • Brancher la carte (c'est-à-dire l'adaptateur USB/TTL) à l'ordinateur et appuyer sur le bouton Reset de la carte. Cliquer sur Téléverser. Si tout se passe bien, aucune erreur ne devrait apparaître.
  • L'adresse IP de la carte devrait apparaître dans la console série. Dans un navigateur, taper : http://<adresse_ip_esp32>. Le flux vidéo de l'ESP32-Cam devrait apparaître.

N.B. : la plupart des navigateurs se connectent automatiquement via https. Si c'est le cas, il faut retirer le “s” pour forcer la connexion non sécurisée à un appareil du réseau local, ou paramétrer une exception de sécurité (selon le navigateur).

Paramètres de la caméra

Suite à la simplification du programme, l'interface graphique qui permettait l'ajustement des paramètres d'image (contraste, luminosité, exposition…) a été supprimée. Sans son filtre infrarouge, le rendu visuel de la caméra n'est pas satisfaisant en l'état. Les lignes suivantes, tirées du programme d'exemple, ont été ajoutées (ligne 193) pour permettre de corriger l'image si nécessaire :

  // Paramètres de correction de l'image
  sensor_t * s = esp_camera_sensor_get();
  s->set_brightness(s, -2); // -2 > x < 2
  s->set_contrast(s, 2); // -2 > x < 2
  s->set_saturation(s, -2); // -2 > x < 2
  s->set_denoise(s, 0); // // Débruitage. Valeur : 0 ou 1
  s->set_special_effect(s, 2); // Effet "Greyscale"
  s->set_ae_level(s, 0); // Correction de l'exposition. Valeur : -2 > x < 2
  s->set_bpc(s, 0); // ? Valeur : 0 ou 1
  s->set_wpc(s, 1); // Correction des tâches ? Valeur : 0 ou 1
  s->set_raw_gma(s, 1); // Correction gamma. Valeur : 0 ou 1
  s->set_lenc(s, 1); // Correction optique. Valeur : 0 ou 1
  s->set_hmirror(s, 0); // Miroir horizontal. Valeur : 0 ou 1
  s->set_vflip(s, 0); /// Miroir horizontal. Valeur : 0 ou 1

D'autre part, l'allumage de la LED infrarouge (port GPIO 16) est contrôlé par le programme espion.ino (ligne 229). La LED blanche intégrée au microcontrôleur est également désactivée dans le code (ligne 234).

Paramétrage du Récepteur RF

N.B. : la procédure d'appairage des émetteur/récepteur fonctionne pour le module référencé sur la page du projet sur le blog. Il devrait fonctionner pour tous les modules de même conception, mais ce n'est pas garanti. Dans le doute, il est préférable de suivre la procédure du constructeur ou du revendeur.

L'émetteur et le récepteur radio qui commandent le relais doivent être appairés selon la procédure suivante (seul le mode verrouillage a été testé) :

  • Mode momentané (le même bouton commute le relais lorsqu'il est appuyé et dé-commuter le relais lorsqu'il est relâché) : appuyer une fois sur le bouton d'apprentissage du module (la LED du module s'allume), puis une fois sur le bouton ON ou OFF de l'émetteur (la LED du module s'allume trois fois).
  • Mode bascule (le même bouton commute le relais à la première pression et dé-commute le relais à la deuxième pression) : appuyer deux fois sur le bouton d'apprentissage du module (la LED du module s'allume), puis une fois sur le bouton ON ou OFF de l'émetteur (la LED du module s'allume trois fois).
  • Mode verrouillage (un bouton pour commuter le relais, un bouton pour dé-commuter) : appuyer trois fois sur le bouton d'apprentissage du module (la LED du module s'allume), puis une fois sur le bouton ON de l'émetteur (la LED du module s'allume trois fois), puis une fois sur le bouton OFF de l'émetteur (la LED du module s'allume trois fois).

Montage final et intégration

Cf. schéma final. Une LED infrarouge et sa résistance sont branchés sur le port GPIO 16 de l'ESP32-CAM. Le relais est placé entre l'ESP32-CAM et l'alimentation (bien étudier le schéma). Le reste du montage ne présente pas de problème particulier.

public/espion.txt · Dernière modification : 2022/10/23 16:00 de roi_matou