Module esp wemos mini D1 pro avec antenne
Par Estardyn
Module de développement esp8266 réputé wemos D1 mini pro avec antenne afin de capter au mieux les ondes wifi
Cet Article a été vu ... fois
Depuis peu la version 2022.11 de Homeassistant prend en charge le compteur d’énergie eau, il est possible de récupérer les données facilement à l’aide d’esp et ça pour 10€ environs. Dans mon cas le compteur est équipé d’un émetteur 433Mhz Itron Everblu Cyble 2.1. Ce qui permet de récupérer les données à l’aide d’un récepteur CC1101 accouplé à un esp8266/esp32 facilement. J’ai repris et modifié un référentiel complet sur github qui a été édité par psykokwak, et je félicite son travail. Ce référentiel permet de réceptionner les données et de les transférer par mqtt à homeassistant.
Commençons par installer la librairie de gestion des cartes esp8266 et esp32:
librairie carte esp8266 Librairie carte esp32
sudo usermod -a -G dialout #USER
sudo chmod a+rw /dev/ttyUSB0
Methode 1: Téléchargez le git, l’extraire et le glisser dans le dossier du sketch sur l’interface Arduino, sinon déposez le dossier directement à la racine du dossier Arduino.
Methode2: En ligne de commande
cd /home/nicolas/Arduino // placez-vous dans votre dossier arduino
git clone https://github.com/haade-administrator/watermeter2mqtt.git watermeter2mqtt
Veuillez à transférer le dossier portant le nom: watermeter2mqtt
CC1101 | Wemos D1 mini | NodeMCU | ESP32 |
---|---|---|---|
VCC | 3v3 | 3v3 | 3v3 |
GOD0 (GDO0) | D1, GPIO 5 | GPIO 5 | GPIO 22 |
CSN (SPI chip select CS or SS) | D8, GPIO 15 | GPIO 15 | GPIO 5 ou GPIO 15 |
SCK (SPI clock) | D5, GPIO 14 | GPIO 14 | GPIO 18 ou GPIO 14 |
MOSI (SPI MOSI) | D7, GPIO 13 | GPIO 13 | GPIO 23 ou GPIO 13 |
GOD1 (SPI MISO) | D6, GPIO 12 | GPIO 12 | GPIO 19 ou GPIO 12 |
GOD2 (GDO2) | D2, GPIO 4 | GPIO 4 | GPIO 21 |
GND (ground) | G | GND | GND |
1 Paramétrage wifi et mqtt
EspMQTTClient mqtt(
"MyESSID", // Your Wifi SSID
"MyWiFiKey", // Your WiFi key
"mqtt.server.com", // MQTT Broker server ip
"MQTTUsername", // Can be omitted if not needed
"MQTTPassword", // Can be omitted if not needed
"watermetter2mqtt", // Client name that uniquely identify your device
1883 // MQTT Broker server port
);
2 ligne 88-90 réglage du relevé programmé
Pour rappel ce code relève une fois par jour dans les heures ouvrés du releveur les données de consos. ci dessous j’ai réglé sur 14h UTC ce qui correspond à 15h France
// At 14:00 UTC
if (ptm->tm_hour == 14 && ptm->tm_min == 0 && ptm->tm_sec == 0)
3 choix du relevé programmé ou à chaque mise à jour des données
Par défaut le script met à jour dès le changement de données modifier il suffit de décommenter onScheduled ligne 257 à 259 et de commenter onUpdateData
// Note: on scheduled allows you to read the information once a day, onUpdateData allows you to read each time information changes
// onScheduled();
onUpdateData();
4 trouver la bonne fréquence de votre emetteur CC1101
Il suffit de décommenter le code ligne 272-291
// Use this piece of code to find the right frequency.
/*
for (float i = 433.76f; i < 433.890f; i += 0.0005f) {
Serial.printf("Test frequency : %f\n", i);
cc1101_init(i);
struct tmeter_data meter_data;
meter_data = get_meter_data();
if (meter_data.reads_counter != 0 || meter_data.liters != 0) {
Serial.printf("\n------------------------------\nGot frequency : %f\n------------------------------\n", i);
Serial.printf("Liters : %d\nBattery (in months) : %d\nCounter : %d\n\n", meter_data.liters, meter_data.battery_left, meter_data.reads_counter);
digitalWrite(LED_BUILTIN, LOW); // turned on
while (42);
}
}
*/
cc1101_init(FREQUENCY);
/*
// Use this piece of code to test
struct tmeter_data meter_data;
meter_data = get_meter_data();
Serial.printf("\nLiters : %d\nBattery (in months) : %d\nCounter : %d\nTime start : %d\nTime end : %d\n\n", meter_data.liters, meter_data.battery_left, meter_data.reads_counter, meter_data.time_start, meter_data.time_end);
while (42);
*/
}
Poussez le code sur votre module ensuite sélectionne Monitor série:
le résultat doit être comme sur l’image ci-dessous:
Une fois le code récupéré pense à commenter ces codes sinon tu ne pourras faire remonter les données ultérieurement.
5 Paramétrer l’horloge sur sa région (Optionnel)
Aller à la ligne 188-190 si nécessaire
configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", "pool.ntp.org");
L’horloge est réglé sur paris, pour modifier en fonction de votre région copiez/collez le code dispo sur ce site
Étape importante, faire correspondre les branchements du CC1001 au GPIO du module esp:
Commençons par reprendre le schéma dispo plus haut, tu pourras te rendre compte que sur un Wemos D1 par exemple que SCK correspond au GPIO14, Miso 12 etc… sachant que ça modifie les lignes 94 à 100 du code dispo dans ce fichier. Voir le Gif animé ci-dessous:
Code dispo sur votre module itron pensez à ne pas reprendre le premier 0.
tout en bas du fichier ligne 53-60
// Change these define according to your hardware
#define FREQUENCY 433.8683f // fréquence trouvée plus haut garde 4 chiffres après le point et rajoute f
#define GDO0 5 // gpio 5 sur GDO0
#define METER_YEAR 15 // année compteur
#define METER_SERIAL 886451 // Code série sans le 0
Il ne reste plus qu’à valider le projet croquis > vérifier/compiler ou Ctrl+R, et si tout c’est bien passé vous devrier avoir en résultat
Executable segment sizes:
ICACHE : 32768 - flash instruction cache
IROM : 331192 - code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 28877 / 32768 - code in IRAM (IRAM_ATTR, ISRs...)
DATA : 1620 ) - initialized variables (global, static) in RAM/HEAP
RODATA : 6680 ) / 81920 - constants (global, static) in RAM/HEAP
BSS : 26968 ) - zeroed variables (global, static) in RAM/HEAP
Le croquis utilise 368369 octets (35%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
Les variables globales utilisent 35268 octets (43%) de mémoire dynamique, ce qui laisse 46652 octets pour les variables locales. Le maximum est de 81920 octets.
Ensuite cliquez sur téléverser: croquis > téléverser ou Ctrl+U
résultat:
Wrote 372528 bytes (266139 compressed) at 0x00000000 in 23.5 seconds (effective 126.9 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Vérifie le monitor série
ce référentiel permet de récupérer:
L’appareil interroge le compteur une fois par jour, toutes les 24 heures et réessaye toutes les heures si la requête a échoué. Votre compteur peut être configuré de telle sorte qu’il n’écoute les demandes que pendant les heures où les agents releveurs travaillent.Ceci fin d’économiser les batteries des modules. Si vous ne parvenez pas à communiquer avec le compteur, veuillez réessayer pendant les heures ouvrables (de 8h00 à 16h00), du lundi au vendredi. En règle générale, essayez de configurer votre appareil uniquement pendant les heures ouvrables, vous éviterez ainsi toute confusion.
Votre module émetteur-récepteur n’est peut-être pas calibré correctement, veuillez modifier la fréquence un peu plus bas ou plus haut et réessayez. Vous pouvez utiliser RTL-SDR pour mesurer le décalage nécessaire. Vous pouvez décommenter la partie du code dans le watermeter2mqtt.ino ( voir plus haut ), fichier qui analyse toutes les fréquences autour de la fréquence du compteur pour trouver la bonne.
Voilà une méthode simple à mettre en place, pour ceux qui ne seont pas équipés d’un émetteur Itron Everblu Enhanced, il existe une autre méthode qui consiste à mettre un capteur inductif directement sur le compteur et de le relier à un esp8266, cette méthode est un peut plus contraignant car il faudra avoir une source d’énergie à proxilmité de ce compteur afin de pouvoir aliment en 5V l’esp et le capteur, le tarif de l’ensemble oscille autour de 10€, un excellent article est disponible ici pieterbrinkman.com
Copyright © 2025 Haade 🎉 by Nicoxygen
commentaires