Table des matières
- 1 Le principe de l’ESP32-CAM
- 2 La réalisation du capteur
- 2.1 Le placement physique
- 2.2 Le software sur l’ESP32-CAM
- 2.3 Configuration via WIFI
- 2.4 Le placement de l’ESP32-CAM sur le compteur d’eau
- 2.5 Un WIFI performant est requis
- 2.6 Configuration initiale
- 2.6.1 1. Création de l’image de référence
- 2.6.2 2. Définition des marqueurs
- 2.6.3 3. Récupération des informations digitales
- 2.6.4 4. Récupération des informations analogiques
- 2.6.5 5. Derniers réglages
- 2.6.6 6. La remontée des données via le protocole MQTT pour Heedom
- 2.6.7 7. La remontée des données via le protocole MQTT pour Home Assistant
- 3 Les informations dans Jeedom
- 4 Les informations dans Home Assistant
- 5 Gestion des erreurs
- 6 Une journée de pratique
- 7 Conclusions
En 2020, j’avais écrit un article sur une solution domotique pour suivre sa consommation d’eau. Cette solution était destinée à une certaine catégorie de compteur à savoir celle disposant d’un demi-disque métallique qui tournait lors de la consommation d’eau : https://www.objetsconnectes.be/2020/07/15/capteur-lj18a3-nodemcu-esp8266-compteur-eau-swde/
La solution fonctionne mais n’est pas parfaite. Tout d’abord, il y a quelques litres “parasites”. Il est difficile d’être parfaitement aligné entre la réalité et ce qui est mesuré principalement parce que le placement du capteur est très sensible. Le mien avait bougé un peu et, alors que j’étais loin de chez moi, il s’est mis à détecter une consommation d’eau permanente. Revenus en urgence, ce n’était qu’un bug et cela m’a rassuré mais cela m’a fait perdre du temps.
Au même moment que ce bug se produisait (à répétition), un charmant lecteur (Vincent) m’orientait vers une autre solution à base d’un capteur original.
Le principe de l’ESP32-CAM
Le principe du capteur est simple et repose sur le module ESP32-CAM c’est-à-dire un micro-contrôleur intégrant une caméra vidéo et une carte microSD. L’ESP32-CAM photographie régulièrement le compteur d’eau et effectue une reconnaissance de caractères pour déterminer les index de consommation. Ce faisant, selon la fréquence choisie pour la photo, on peut en déduire une consommation sur la période écoulée.
Pour réaliser ce capteur de la façon la plus simple, le matériel nécessaire est :
– un ESP32-CAM :
https://www.amazon.fr/XTVTX-ESP32-CAM-Bluetooth-ESP32-CAM-MB-compatible/dp/B093GSCBWJ/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1S7U9HQ7087K4&keywords=B093GSCBWJ&qid=1705480081&sprefix=b093gscbwj%2Caps%2C424&sr=8-1
– une carte microSD :
https://www.amazon.fr/Intenso-3433470-M%C3%A9moire-microSDHC-Adaptateur/dp/B00YMZC944/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1TGQAI7B6OXD9&keywords=B00YMZC944&qid=1705480124&sprefix=b00ymzc944%2Caps%2C75&sr=8-1
– un support à imprimer avec une imprimante 3D (il convient de trouver le bon support, adapté à son compteur. Un exemple se trouve ici : https://www.thingiverse.com/thing:4845508).
Il existe plusieurs sortes d’ESP32-CAM et plusieurs sortes de cartes microSD. En général la compatibilité est bonne et presque toutes les cartes fonctionneront avec presque tous les ESP32-CAM. Pour ceux qui préfèrent éviter le moindre risque, les deux ci-dessus fonctionnent parfaitement ensemble.
La remontée des données se fait in fine via le protocole MQTT, un protocole bien implanté dans les box domotique (dont Jeedom et Home Assistant).
Au final, la solution coûte pour environ 35 euros.
La réalisation du capteur
Le placement physique
On commence par insérer la carte microSD sur l’ESP32-CAM (en suivant le sens de la flèche et avec l’inscription vers le haut).
La seconde étape est un peu plus complexe. La caméra doit être installée sur l’ESP32-CAM mais, auparavant, il faut enlever un petit point de colle. Car, pour une raison que j’ignore, ce petit point de colle a été ajouté pour empêcher de régler le focus. Or, comme il s’agit de faire une photo à 10 cm, un réglage du focus est nécessaire.
Une fois le point de colle enlevé, il faut tourner la caméra d’un quart de tour dans le sens contraire des aiguilles d’une montre. Attention toutefois que cette opération est un peu délicate et rend le produit hors garantie.
On connecte ensuite la caméra OV2640 sur l’ESP32-CAM en enfichant le ruban connecteur :
Et on n’oublie pas d’enlever le film protecteur de l’objectif.
Ce capteur se place sur un support que l’on peut imprimer en 3D. Je n’avais pas d’imprimante 3D et donc merci à Vincent de me l’avoir imprimé.
Mais hélas, ce support était trop petit : j’ai du le cisailler pour élargir la base et l’emplacement prévu pour l’ESP32-CAM était trop réduit en hauteur.
In fine, avec du tape, cela tient mais je conseille la plus grande vigilance au moment de mesurer son compteur et de choisir les dimensions pour l’impression 3D.
Le software sur l’ESP32-CAM
Les différentes manières d’installer un firmware sont très bien décrites sur cette page: https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#2-firmware
Autant choisir, si possible, la facilité et c’est donc la solution “Web Installer” qui a retenu ma préférence.
On commence par alimenter l’ESP32-CAM à l’aide d’un câble USB côté PC et micro USB côté ESP32-CAM.
Via le navigateur internet Chrome, on se connecte au site Web Installer et on clique sur le bouton “CONNECT”.
Pour que cela fonctionne, il faut que le PC dispose d’un port série ou qu’un driver permette de transformer un port USB en port série. Il faudra donc être sûr de trouver quelque chose comme ceci dans “Device Manager”.
Si le port série n’est pas bien installé, alors c’est un message d’erreur qui sera au rendez-vous:
Par contre, si le port série fonctionne, Chrome permet de choisir celui à utiliser (USB Serial (COM4) ici). Un clic sur le bouton “Connexion” démarre la procédure d’installation du firmware.
Le site demande la confirmation pour l’installation de AI-on-the-edge (version v15.1.0) sur l’ESP32-CAM:
A la fin, si tout s’est bien passé, un message de confirmation de bonne fin apparaît. On peut redémarrer l’ESP32-CAM.
Configuration via WIFI
Maintenant que le firmware “AI on the edge” est installé, il s’agit de le configurer.
1. Depuis son PC/MacBook, on télécharge la dernière version du fichier AI-on-the-edge-device__remote-setup__*.zip sur la page https://github.com/jomjol/AI-on-the-edge-device/releases
2. Toujours sur son PC/MacBook, on se connecte au WIFI de l’ESP32-CAM (le WIFI nommé AI-on-the-Edge):
3. Dans le navigateur internet Chrome, on indique l’URL http://192.168.4.1 afin de se connecter à l’ESP32-CAM.
4. On charge la configuration initiale sur la carte microSD. Via le bouton “Choose file”, on choisit le fichier zip téléchargé à la première étape (pour moi : AI-on-the-edge-device__remote-setup__v15.1.0.zip). On clique ensuite sur le bouton “Upload File”. Ici, c’est un peu bizarre car on a l’impression que rien ne se passe et on pourrait être tenté de cliquer plusieurs fois sur le bouton “Upload File”. Mais ce serait une erreur : il ne faut cliquer qu’une seule fois et il faut attendre une bonne minute.
5. Après une minute, une nouvelle page apparaît. On configure les informations WIFI pour que l’ESP32-CAM puisse se connecter au WIFI local. Une fois ces informations fournies, on clique sur le bouton “Write wlan.ini”.
6. On clique sur “Reboot to first setup.” et on attend.
7. On sait que le processus est fini quand, après une ou deux minutes, on voit que l’ESP32-CAM redémarre et que sa lampe LED s’allume quelques secondes. Si, durant le démarrage, la lampe clignote trois fois en rouge, cela signifie que l’installation s’est bien passée.
8. En se connectant à son routeur, on doit voir apparaître un appareil appelé “watermeter”. On note bien son adresse IP afin de s’y connecter lors de l’étape suivante.
Le placement de l’ESP32-CAM sur le compteur d’eau
Cela semble facile et rapide : on a un support imprimé en 3D (un qui est adapté ou un qui est arrangé comme pour moi) et on le dépose par-dessus le compteur avec l’ESP32-CAM à l’intérieur. Pour l’alimentation et pour ceux qui ont une prise de courant à proximité, un petit chargeur GSM et un câble micro USB font l’affaire.
https://www.amazon.fr/PremiumCord-C%C3%A2ble-Micro-USB-Blanc/dp/B07NSMVG13/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3T8TYX7YU49NW&keywords=asin%3AB07NSMVG13&qid=1705480220&sprefix=asin+b07nsmvg13%2Caps%2C111&sr=8-1
Sauf que, hélas, cela demande quelques réglages. Avec certains compteurs, dont le mien, le flash de la caméra engendre des reflets. La documentation, https://jomjol.github.io/AI-on-the-edge-device-docs, traite d’ailleurs du sujet.
Il y a plusieurs solutions possibles aux reflets. Je n’avais pas envie de partir sur une LED externe, trop compliquée à mettre en oeuvre à mon sens. J’ai alors choisi de positionner le flash le plus loin possible des chiffres et j’ai ensuite collé un petit bout de papier sur la led afin d’avoir une lumière plus diffuse. C’était mieux et il faut le faire mais, hélas, ce n’était pas suffisant.
En second essai, j’ai choisi de désaxer le support de l’ESP32-CAM afin que la lumière ne soit pas réfléchie trop directement vers la caméra. Cela a supprimé les reflets mais cela a amené une image un peu déformée
Et, plus loin dans les étapes, les erreurs de reconnaissance de caractère étaient trop nombreuses car le dessus des chiffres n’étaient pas bien reconnus (par exemple, le 7 étaient vu comme un 1 car la barre horizontale supérieure du chiffre 7 n’était pas vue).
Au final, j’ai placé le compteur pour chercher un compromis : le moins de reflets possible et pas trop désaxé pour avoir une bonne vue sur les chiffres. Je me suis donc approché de 100% avec ce placement, combinant une lumière plus diffuse et un léger désaxement pour éviter les reflets:
Un WIFI performant est requis
Un souci que j’ai de suite rencontré a été lié à la force du signal WIFI (-63db). L’ESP32-CAM est hélas moins performant en termes de WIFI qu’un ESP32 normal et j’ai l’impression qu’il en faut peu pour atténuer drastiquement le signal. J’avais beau essayer de me connecter via l’adresse IP de l’ESP32-CAM, http://X.Y.Z.W, c’était excessivement lent pour voir les pages quand je n’avais pas, tout bonnement, un timeout.
Après avoir essayé, pendant des heures, de me connecter à l’ESP32-CAM, j’ai songé à placer un point d’accès WIFI tout près, pour faire la configuration et le problème s’est résolu. Une fois la configuration finalisée, j’ai pu retirer ce point d’accès WIFI. Un bon signal WIFI est nécessaire pour la configuration (en particulier pour la transmission des images de l’ESP32-CAM) mais, ensuite, un signal WIFI moins bon sera suffisant pour transmettre les données en MQTT.
Configuration initiale
Dans la naviguateur internet Chrome, on se connecte à l’ESP32-CAM via son adresse IP récupérée sur le routeur WIFI. Cela donne quelque chose comme http://X.Y.Z.W (ce n’est donc plus http://192.168.4.1 puisque maintenant l’ESP32-CAM est connecté au réseau local).
Une page de configuration initiale est affichée par défaut lors de la première connexion. Cette configuration initiale se fait en cinq étapes. Passer d’une étape à la suivante peut prendre du temps et nécessite parfois un reboot. Il convient donc d’être un peu patient et d’attendre un peu avant de s’inquiéter de l’absence de réaction.
1. Création de l’image de référence
La première étape consiste à prendre une photo du compteur. Cette photo va servir de base pour la suite de la configuration.
La procédure est simple:
- On clique sur “Create New Reference
- On règle les paramètres “Pre-rotate Angle” et “Fine Alignment” pour trouver l’alignement parfait. Il convient d’être soigneux à cette étape. Par exemple, sur la photo ci-dessous, le réglage n’était pas assez précis et les détections en souffraient. Il faut vraiment s’assurer de la meilleure horizontalité et verticalité possible au niveau des chiffres en s’aidant des bandes vertes.
- On clique sur “Save”
- On passe à l’étape suivante en cliquant sur le bouton “Next” en haut de l’écran.
Un des paramètres de cet écran est le réglage de l’intensité de la LED (LEDIntensity). Mais ce paramètre n’a jamais fonctionné : que j’indique 1 ou 99, le flash était toujours aussi intense (et provoquait toujours autant de reflets, ce qui était dommage).
2. Définition des marqueurs
A cette étape, on identifie des marqueurs, c’est-à-dire des morceaux d’images qui serviront de repère. A chaque relevé, l’image photographiée sera alignée sur base des marqueurs définis afin d’assurer une reconnaissance pointue des chiffres des index.
Il est conseillé de définir deux marqueurs, sur des zones de texte bien identifiables et bien distinctes. Parfois, il est conseillé de renforcer le contraste (via le paramètre “Enhance Constrast”) pour optimiser les marqueurs.
On commence par choisir le marqueur, via “Select Reference :”
- On règle x, y, dx (distance sur l’axe des x) et dy (distance sur l’axe de y) pour faire en sorte que le rectangle rouge couvre exactement le marqueur que l’on souhaite identifier
- On clique sur “Update Reference”. On voit alors l’image extraite qui s’affiche en dessous de “Original Image:” et “Reference Image:”
- On clique sur le bouton “Save”
La procédure d’installation impose de redémarrer l’appareil après cette étape, ce qui peut se faire en cliquant sur “reboot” en bas de la page.
Une fois l’ESP32-CAM redémarré, il se peut que l’on soit revenu à l’étape 1. On peut alors se rendre directement à l’étape 3 en cliquant deux fois sur le bouton “Next” en haut de la page.
3. Récupération des informations digitales
C’est l’étape clé et celle qui est un peu fastidieuse. Il faut définir l’emplacement de chaque chiffre du compteur, soit 8 dans mon cas pour la partie digitale. Et il faut le faire dans le bon ordre afin que le système reconstitue ensuite l’index correctement.
On choisit un ROI (Région of Interest) dans la liste déroulante (digit1 par exemple) ou on en crée un nouveau avec le bouton “New ROI (after current)” si on a utilisé tout ceux existants. On règle ensuite les paramètres (principalement x, y, dx et dy) pour faire en sorte que les chiffres soient bien centrés.
Il n’est pas très facile de comprendre comment définir au mieux les Region Of Interest (ROI). Cela dépend du modèle choisi (que j’explique brièvement plus loin dans cet article) et du compteur. La documentation officielle fournit de l’aide : https://jomjol.github.io/AI-on-the-edge-device-docs/ROI-Configuration/.
Sur l’image ci-dessus, on voit que le carré intérieur est bien trop grand. Il ne faut en effet pas trop d’espace entre les chiffres et ce carré rouge intérieur. Voici, par exemple, une meilleure configuration (c’est celle de Vincent) où le cadre rouge intérieur colle au maximum à la taille du chiffre:
Cette étape est importante et il faut vraiment y apporter un très grand soin afin que le résultat se rapproche de 100%. Il faudra sans doute procéder de manière empirique avec des essais et des corrections afin d’obtenir la meilleure reconnaissance possible. De temps en temps, une mesure erronée sera remontée comme, par exemple, lorsqu’on se situe entre deux chiffres.
4. Récupération des informations analogiques
L’étape 4 concerne la récupération des informations analogiques. Mon compteur ne comptant qu’une partie analogique et n’étant pas beaucoup intéressé par mesurer des dixièmes de litres de consommation, cette étape a été passée en décochant “Enable Analog ROI’s”.
5. Derniers réglages
La cinquième et dernière étape est celle des réglages avancés et des optimisations.
Un des premiers réglages avancés est le choix du modèle de reconnaissance des chiffres:
Les différents modèles, décrit dans la documentation Model Selection, permettent de choisir la façon dont on souhaite que les images soient analysées. On compte principalement deux types de modèles qu’il convient d’expérimenter afin de choisir celui qui fonctionne le mieux:
- Modèle dig-class11-* : ce modèle reconnaît uniquement des chiffres entiers. Quand la roue chiffrée du compteur évolue, le modèle ne détecte pas de chiffre quand on est situé entre deux valeurs. Ce modèle est plus efficace mais fort limité car on tombe rarement sur tous les chiffres bien centrés en même temps
- Modèle dig-cont-* : ce modèle essaie de reconnaître où il en est en essayant de détecter des chiffres partiels. Ce modèle est sympa en théorie mais, en pratique, il amène souvent beaucoup plus d’estimations erronées.
Personnellement, après avoir essayé quelques modèles, c’est le dig-cont_0611_s3_q (de reconnaissance des chiffres partiels) qui a le mieux fonctionné. Le modèle dig-class11-* de reconnaissance des chiffres complets ne fonctionnait vraiment pas bien car le nombre d’erreurs étaient beaucoup plus nombreux.
Un autre paramètre important est le “AutoTimer”. Ce paramètre permet d’indiquer la fréquence à laquelle le relevé des index sera fait:
6. La remontée des données via le protocole MQTT pour Heedom
Comme autre paramètre avancé, on peut citer la configuration du protocole MQTT qui permet de remonter les informations vers des box domotiques.
Pour Jeedom et son plugin MQTT, peu de paramètres ont été nécessaires. J’ai simplement mentionné l’URI en spécifiant l’adresse IP du serveur sur lequel Jeedom est installé et en conservant le port par défaut (1883) et le protocole par défaut (MQTT). J’ai gardé les valeurs par défaut pour les paramètres “Main Topic” et “Client ID” et je n’ai pas eu à préciser les “Username” et “Password”.
Dans les ESPEasy, on peut en général configurer plusieurs contrôleurs, ce qui permet de remonter les données en MQTT dans plusieurs box domotiques en parallèle. Ce n’est pas le cas ici puisqu’on ne peut mentionner qu’une seule URI au niveau du protocole MQTT. Il faut donc choisir vers quelle box on remonte les informations. A noter que les box domotiques tournent en général avec leur propre “Mosquitto Broker” et on peut faire en sorte qu’une box domotique récupère les données et que les autres box domotiques se connectent à cette première box domotique pour venir y chercher, à leur tour, les données.
7. La remontée des données via le protocole MQTT pour Home Assistant
Pour ceux qui souhaitent remonter les informations dans Home Assistant, c’est le même principe de configuration sauf qu’il faudra, sans doute, mentionner un nom d’utilisateur et un mot de passe (si vous n’avez plus ces informations, vous pouvez les récupérer en ouvrant le fichier /config/.storage/core.config_entries avec File Editor. Les informations se trouvent au niveau de la ligne “broker”:”core-mosquitto”).
Comme autre spécificité pour Home Assistant, on notera le Homeassistant Discovery (que l’on peut lancer via une URL, comme expliqué à l’écran) et la possibilité d’indiquer le type de compteur (value:l et Rate: l/h dans mon cas)
Les informations dans Jeedom
Dans Jeedom et au niveau du plugin MQTT, on voit apparaître trois équipements :
A noter que, pour utiliser la valeur mesurée (c’est-à-dire l’index de consommation) dans des calculs de consommation, il faut choisir le type “Numérique” au niveau de la commande “value” dans l’object watermetermain ou watermetermainjson (celui que l’on préfère utiliser):
Une fois les trois objets MQTT rendus “Active” et “Visible”, ils apparaissent sur le Dashboard de Jeedom:
Dans un virtuel, on peut faire le calcul de la consommation, jour par jour, avec une formule comme celle-ci:
MaxBetween(#[Cave Garage][watermetermain][value]#,Today -30days, Now) – MaxBetween(#[Cave Garage][watermetermain][value]#,Today -30days, Today -0days)
Les informations dans Home Assistant
La première chose à faire, c’est de vérifier que les mesures remontent bien en MQTT dans Home Assistant. On se connecte donc à MQTT Explorer dans Home Assistant afin de vérifier que les trames de l’équipement «watermeter» (dans ma configuration) apparaissent bien, ce qui était le cas:
Lors de la configuration des paramètres MQTT, on se souvient de cette information affichée à l’écran:
The discovery topics and the static topics (IP, MAC, Hostname, Interval, …) only get sent on startup. To send them again, you can call the following URL: http://<IP>/mqtt_publish_discovery
J’ai donc remplacé <IP> par l’adresse IP de l’ESP32-CAM et j’ai collé cette URL dans un navigateur internet, par sécurité. De retour dans Home Assistant, de nombreuses entités avait été créées:
En particulier, une des entités créées peut-être utilisée dans le tableau de bord Energie de Home Assistant : c’est l’entitié “watermeter Value”
Le tableau de bord Energie affiche alors une section avec la consommation d’eau par heure:
Gestion des erreurs
Le mécanisme de relevé de l’index est intelligent et il essaie de corriger, tant que faire se peut, les valeurs qu’il lit. Une belle description de toute cette intelligence a été faite sur la documentation en ligne: https://jomjol.github.io/AI-on-the-edge-device-docs/Correction%20Algorithm/
A tout le moins, je conseille d’essayer différents paramètres de gestion des erreurs pour permettre au système de faire la meilleure analyse possible:
- Allow Negative Rates : false. Pour un compteur d’eau, il est en effet impossible que le compteur tourne à l’envers.
- Maximum Rate Value : C’est la différence d’index qui, selon toute logique, serait bien trop élevée pour être correcte. Tout dépend ici de la fréquence à laquelle les index sont lus et de la consommation moyenne de chacun. Chez moi, pour une lecture tous les quart d’heure, une consommation supérieure à 105 litres est sans doute une erreur. Si une telle consommation est détectée, le système remontera alors l’erreur “Rate too high” (voir capture d’écran ci-dessus) et la valeur sera tout simplement ignorée
Une journée de pratique
C’est sûr que, pour éviter les reflets, je n’ai pas pu disposer l’ESP32-CAM au mieux (c’est-a-dire parfaitement horizontal et au centre du capteur. Par conséquent, plusieurs erreurs se sont produites durant les tests, surtout quand la caméra était très désaxée et quand j’avais le modèle de reconnaissance des chiffres entiers (et pas partiels).
Il y a tout d’abord eu les cas “NaN”, c’est-à-dire les cas où le système ne parvient pas à reconnaître les chiffres. Par exemple, ci-dessous, les chiffres 9 et 0 n’étaient pas reconnus.
Ce cas de figure n’est pas trop grave : le système a retenu la valeur précédente et c’est celle-là qu’il utilisera pour calculer l’index. Sur des chiffres qui changent peu (les premiers en noir), cela n’a pas d’incidence du tout. Pour les autres chiffres, c’est plus ennuyant mais on parle d’un plus petit nombre de litre.
Une autre sorte d’erreur se produit quand le système confond les chiffres. Par exemple, sur mon compteur, il confond régulièrement 1 et le 7 sur les index rouges:
Dans ce cas de figure, on a une surestimation de la valeur lue.
C’est sans doute pour ces raisons que je conseillerais de configurer le système pour tourner régulièrement. En ce qui me concerne, j’ai choisi une fréquence de relevé d’index toutes les 5 minutes. Ce faisant, on finit par accrocher très régulièrement toutes les bonnes valeurs et on a alors une parfaite lecture:
C’est aussi pour corriger les erreurs que j’ai finalement mis l’option “Allow Negative Rates” (voir ci-dessus) à true. C’est vrai qu’un compteur d’eau ne peut pas tourner à l’envers et que ce n’est pas logique à priori. Mais, ce faisant, le système se corrige quand il a surestimé une valeur et, dans le suivi, on peut voir s’il y a eu une erreur ou pas (et investiguer pour essayer d’améliorer le système).
Finalement, si on regarde l’évolution de la consommation, en litre, sur une journée on voit des montées (ce qui est logique puisqu’il y a consommation) suivies parfois de descentes. Ces descentes constituent en fait la correction de valeurs incorrectement lues précédemment.
Au final, ce n’était pas parfait comme lecture mais c’était quand même suffisamment bon. On avait, en fin de journée, une bonne approximation des consommations du jour et des moments de consommation. Et, sur une longue période (un an par exemple), la marge d’erreur est quasiment nulle. Mais je restais sur ma fin et j’étais prêt à abandonner quand Vincent m’a poussé à continuer car il était parvenu, de son côté, à approcher les 100%. Et c’est vrai que, après plusieurs essais de placement de caméra et de définition des zones ROI, je suis parvenu moi aussi à des mesures quasiment justes à chaque fois:
C’est donc possible mais il faut y passer du temps.
Conclusions
Ce capteur à base d’ESP32-CAM ne coûte pas cher. C’est aussi amusant à installer mais ce n’est pas facile du tout à bien configurer. J’ai failli abandonner et j’ai donc failli revenir à l’ancienne solution : https://www.objetsconnectes.be/2020/07/15/capteur-lj18a3-nodemcu-esp8266-compteur-eau-swde/. Mais je suis content d’avoir finalement pu obtenir un résultat excellent et je suis donc content de cette nouvelle solution.
– un ESP32-CAM :
https://www.amazon.fr/XTVTX-ESP32-CAM-Bluetooth-ESP32-CAM-MB-compatible/dp/B093GSCBWJ/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1S7U9HQ7087K4&keywords=B093GSCBWJ&qid=1705480081&sprefix=b093gscbwj%2Caps%2C424&sr=8-1
– une carte microSD :
https://www.amazon.fr/Intenso-3433470-M%C3%A9moire-microSDHC-Adaptateur/dp/B00YMZC944/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1TGQAI7B6OXD9&keywords=B00YMZC944&qid=1705480124&sprefix=b00ymzc944%2Caps%2C75&sr=8-1
Phil
Bonjour,
Bravo pour ce projet et le remarquable travail exécuté !!!
Mais en général, le compteur d’eau se trouve dans la garage ou la cave, et parfois dans le noir total.
As-tu une solution pour alimenter ce brave ESP pour plusieurs années ?
Et comment faire dans le noir total ?
Merci de ton retour
ObjetsConnectesAdmin
Bonjour. Merci pour ce gentil retour. En ce qui me concerne, j’avais un prise de courant près du compteur et, par conséquent, un simple câble microUSB et un petit chargeur ont fait l’affaire. Pour le noir, ce n’est pas un soucis car l’ESP32-CAM est équipé d’une led qui fait office de flash. C’est le point fort mais aussi le petit soucis car, chez moi, les reflets sur la vitre perturbent la lecture des index.
KevinD
C’est très bon à savoir à l’époque où la moindre économie est bonne à prendre. Merci pour cet article!
ObjetsConnectesAdmin
Merci pour ce gentil commentaire
alberto
Super idée ! J’avais déjà investigué et je n’avais pas trouvé de tuto pour faire ça, je vais attaquer ça asap!
Concernant ton problème de flash avec la led, je me demande si une led infrarouge ne resoudrait pas le souci ? A voir 🙂
Merci encore, je vais attaquer ça !
ObjetsConnectesAdmin
Merci. Pour la LED, je pense qu’une LED externe aiderait mais la mettre en place ne me semblait pas très facile hélas. Si vous trouvez une solution, je suis hyper intéressé ! Bonne journée.
alberto
Il faudrait simplement souder une led IR sur le 3.3volt avec une resistance de 330Ohms et ça devrait le faire, c’est un petit montage assez simple, il faudrait simplement tester que la led IR ne fait pas non plus de reflet sur le cadran et que la caméra fonctionne en IR.
https://fr.aliexpress.com/item/1005003946239993.html?spm=a2g0o.productlist.main.1.9d6014854fhKzS&algo_pvid=be4d548a-0e0a-4d08-8547-806fe871d79c&algo_exp_id=be4d548a-0e0a-4d08-8547-806fe871d79c-0&pdp_npi=3%40dis%21EUR%210.53%210.46%21%21%21%21%21%402102111816867303689624446d07ee%2112000027534065455%21sea%21BE%210&curPageLogUid=R9VExsg25cdB
Emmanuel
Hello
Après installation du firmware et redemarrage il n’y pas de WIFI de l’ESP 32 “AI on the edge”
Module défectueux ou j’ai loupé un truc ?
doudy
Bonjour,
J’ai testé mais gros soucis !
Je ne suis pas un spécialiste …
Pourtant numpy est installé !
pi@raspberrypi-183:~ $ pip install numpy
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: numpy in ./.local/lib/python3.9/site-packages (1.26.4)
Voici le shell dans Thonny :
>>> %Run camera-1.py
OpenCV bindings requires “numpy” package.
Install it via command:
pip install numpy
Traceback (most recent call last):
File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/__init__.py”, line 24, in
from . import multiarray
File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/multiarray.py”, line 10, in
from . import overrides
File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/overrides.py”, line 8, in
from numpy.core._multiarray_umath import (
ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/home/pi/.local/lib/python3.9/site-packages/numpy/__init__.py”, line 130, in
from numpy.__config__ import show as show_config
File “/home/pi/.local/lib/python3.9/site-packages/numpy/__config__.py”, line 4, in
from numpy.core._multiarray_umath import (
File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/__init__.py”, line 50, in
raise ImportError(msg)
ImportError:
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.
We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html
Please note and check the following:
* The Python version is: Python3.9 from “/usr/bin/python3”
* The NumPy version is: “1.26.4”
and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.
Original error was: libopenblas.so.0: cannot open shared object file: No such file or directory
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File “/home/pi/scripts/camera-1.py”, line 1, in
import cv2
File “/home/pi/.local/lib/python3.9/site-packages/cv2/__init__.py”, line 11, in
import numpy
File “/home/pi/.local/lib/python3.9/site-packages/numpy/__init__.py”, line 135, in
raise ImportError(msg) from e
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python interpreter from there.
>>>
Une idée ?