Pèse-Ruche pilotés par ESP8266 ou ESP32-TTGO

Bonjour,

voilà un retour d'expérience de plusieurs années de mise au point de plusieurs pèse-ruche connectés (4 en tout). Ça fera l'objet d'un blog dans quelques temps.

Avant de se lancer dans l'aventure, il faut savoir où seront les ruches c'est-à-dire à quelle distance du dispositif de réception. Cette exigence conditionnera le choix du MCU retenu.

Trois dispositifs ont été étudiés :

  • un ESP8266 exploitant le protocole WiFi pour une ruche située dans la maison, donc à faible distance de la box.
  • un couple de NRF24L01+ avec antenne bâton (SMA) travaillant à 2.4GHz pour connecter des ruches situées à 50 mètres de la maison en zone encombrée
  • un couple de ESP32-TTGO-LoRA exploitant le protocole LoRa pour la transmission de la ruche au domicile et le protocole WiFi pour rediriger vers la box et un serveur Raspberry 3 local.
    Comme dans le cas précédent, les ruches sont situées à une cinquantaine de mètres de la maison.

I - Cas ESP8266

I - A Partie électronique et logicielle

Le dispositif est simple : un module ESP8266 alimenté directement par l'entrée USB. La source d'alimentation est le secteur. Le convertisseur analogique-digital est un classique HX711 fonctionnant sous 3.3v. Quasiment aucun problème (voir ci-dessous). Le dispositif fonctionne et est opérationnel depuis environ 3 ans.
A noter l'abandon du module RTC DS3231 dans la dernière version au profit d’une détection RTC internet au moyen de la bibliothèque "NTPClient.h".

Le programme est basique et certainement pas optimisé.

Il reste un problème non résolu, au bout de quelques jours, j'ai des données aberrantes dont le taux augmente au fil du temps. N'en ayant trouvé la cause (peut-être l'utilisation de la fonction String dans la gestion du transfert UDP et ThingSpeak), j'ai résolu le problème en coupant l'alimentation chaque nuit durant un quart d'heure. Dans ce cas, plus de problème même si la méthode est non satisfaisante.
J'ajoute que j'utilise la commande restart en présence de données aberrantes sans apparemment d'effet concluant.

Le sketch est fortement inspiré du travail de Hans Scharler (http://nothans.com).

I - B Partie transmission

Les données sont transmises par WiFi. La maison étant grande, un répéteur WiFI a dû être utilisé. Les données sont transmises via la box au cloud ThingSpeak et en parallèle à un raspberry 3 sur la carte duquel a été installé le gestionnaire de base influxdb et grafana. A noter que le serveur PI3 utilise la box et donc n'est pas autonome. Des essais concluants ont été effectués en convertissant le Raspberry en serveur autonome. Des soucis de difficulté de reconnexion à la box sous ubuntu m'ont fait choisir (pour l'instant) la solution précédente (serveur non autonome). Le PI est sur onduleur.

I - C Partie mécanique

Je suis parti d'un pèse-personne de type Teraillon équipé d'une seule jauge de contrainte. Les pressions sont réparties sur les 4 pieds au moyen de leviers de contrainte.
Il est en photo sur le forum. Il suffit de faire une recherche sous mon pseudo.

Parmi les remarques, le dispositif doit être complètement protégé des déjections des abeilles (nettoyage de la ruche et déjections proprement dites surtout au printemps). Le pèse-ruche est donc enfermé dans un sac plastique hermétique. Le HX711 est situé au centre du pèse-ruche au plus près de la jauge de contrainte.

Donc globalement très satisfait des modules ESP8266 qui font le job sans problème. Depuis l'installation du pèse-ruche, c'est un nouveau monde qui s'est ouvert sur le fonctionnement des ruches. Étant en agglo, il n'est pas question d'ouvrir toutes les semaines les ruches pour y jeter un œil. La connaissance du poids relevé dans mon cas tous les quart d'heure, est pleine d'information (sortie et rentrée des abeilles, essaimage, maladies et décès de masse, etc...) Le tout avec une précision de quelques dizaines de grammes.

La suite dans un autre post...

La suite...

II - Cas NRF24L01+ avec antenne SMA

Il s'agissait d'installer plusieurs pèse-ruche au fond du jardin et connaissant assez bien les NRF24L01+ (PA + LNA) que j'utilisais pour d'autres applications, exploitant la capacité des canaux soft (pipes), j'ai réalisé à partir d'un autre pèse-personne un nouveau pèse-ruche composé de l'association suivante : nano arduino, pour la partie MCU, d'un HX711 pour le dialogue avec les quatre jauges de pression, d'un DS3231 pour le timing et nrf24L01+ pour la communication.
Comme le nrf24 fonctionne sous 3.3v, j'ai utilisé pour l'alimenter un adaptateur qui s'enfiche simplement sur les broches du module. Au préalable, j'avais eu pas mal de déboires en alimentant le nrf24 en 5v malgré ce que dit la littérature (tolérance annoncée et discutée sur ce forum).

La détection s'effectuant avec un esp826 et un nrf24L01+ alimenté avec son adaptateur. Le choix du esp8266 a été dicté par la disponibilité du WiFi.

Le système a parfaitement fonctionné MAIS avec une portée insuffisante malgré les tentatives multiples d'augmenter la portée en utilisant une antenne plus performante, en jouant sur les modifications de puissance disponibles dans la bibliothèque nrf24. Bref, pour moi, les performances annoncées (1000 mètres) sont sans doute valables en terrain strictement découvert, en mer peut-être... mais en présence d'obstacles (murs de pierre épais, arbres, ça ne passe pas ou plutôt ça passe sporadiquement.

Après pas mal d'énervement, j'ai abandonné cette solution qui fonctionne pourtant en routine depuis plusieurs années dans d'autres applications (distance une trentaine de mètres et quasiment à vue).

D'où la recherche d'un autre dispositif le module ESP32-TTGO-sx1276-LoRa.

Post suivant...

La suite...

III - Cas ESP32-TTGO-SX1276-LoRa

III - A Partie électronique

Le principe reste le même que dans le cas II mais l'ensemble nano + nrf21L01+ est remplacé par un module ESP32-TTGO-LoRa. Le SoC ESP32 est associé à un transceiver SX1276 qui permet d'ajouter au WiFi, une émission ou réception radio à 868 MHz (pour l'Europe) suivant le protocole LoRa. Un super esp8266 en quelque sorte.
A noter que comme le ESP8266, le ESP32 fonctionne sous 3.3v donc bien vérifier que le module HX711 peut-être alimenté entre 2.7v et 5.5v. J'ai eu des soucis avec quelques HX711 qui bafouillaient quand alimentés sous 3.3v.

Pour la réception, un simple module ESP32-TTGO-LoRa, reçoit les données via le protocole LoRa et les redirige via le protocole WiFI vers un cloud (ThingSpeak) et un raspberry 3B+ local

III - B Partie logicielle

J'ai adapté les softs précédents au nouveau MCU (ajout de la bibliothèque LoRa.h).
Comme l'ESP32 possède sa propre horloge, j'ai utilisé cette dernière pour programmer la mise en sommeil profond du module entre deux envois de données.

Souhaitant contrôler plusieurs ruches situées dans un environnement immédiat, j'ai utilisé la méthode de discrimination (des données) suivante :

  • 1 Chaque pèse-ruche émet tous les quarts d'heure sur la même bande de fréquence (ici 8695E5, en principe moins encombrée que la bande 868E6) selon le protocole LoRa. Les données sont composée d'un tableau de deux variables, le poids de la ruche et un numéro spécifique à la ruche concernée.

  • 2 Un transceiver unique ESP32-TTGO-LoRa écoute la bande 8695E5 et redirige les données :

  • a vers un champ donné d'un canal ThingSpeak choisi dans le sketch. A noter que 8 champs sont possibles par canal. Comme on dispose gratuitement de 4 canaux cela fait 32 possibilités offertes.

  • b vers le raspberry via la box. Le protocole utilisé dans ce cas est le protocole UDP (User Datagram Protocol).
    C'est un protocole plus simple que TCP mais il n'y a pas d'établissement de liaison ("Handshaking") donc, l'émetteur envoie les données, point barre... D'où s'il y a des pertes de données, elles ne sont pas détectées.
    Ce protocole est largement suffisant pour contrôler le poids des ruches, la perte de quelques données de temps en temps n'est en aucun cas critique.

Au niveau de la réception, l'ESP32 écoute, reçoit les données, vérifie le numéro de la ruche, suivant le numéro de celle-ci, il redirige la donnée "poids" vers le bon champ ThingSpeak et vers le bon port UDP configuré dans la base de données installée dans la mémoire du raspberry.

Cette base de donnée est influxdb, un super-outil assez facile à maîtriser en ligne de commande. Un de ses atouts est qu'elle est interfacée avec le visualisateur grafana, lui aussi un magnifique dispositif de visualisation et de traitement des données.

La suite mécanique bientôt...

La suite...

IV - Partie mécanique

Les pèse-personnes sont abandonnés (faute de combattant). Je me suis tourné vers les jauges de pression chinoises. On les trouve un peu partout. Elles sont données pour un poids maximum de 50 kg. Équipées de trois fils, rouge, noir blanc, elles sont composées d'une plaquette d'acier avec un évidement en forme de C. La partie centrale étant déformable.
Le capteur de force est formé de deux résistances, une résistance entre fil rouge et fil blanc, une entre fil rouge et fil noir. L'une augmente sous la pression tandis que l'autre diminue.

Les quatre jauges sont montées en pont comme le montrent les nombreux schémas sur la toile. Très simplement, les fils noirs sont reliés entre eux idem pour les fils blancs. Les quatre fils rouges sont deux à deux, l'excitation et le signal.

Un mot sur les supports : j'ai opté pour des chutes de plan de travail. On en trouve pour quasiment rien dans les magasins de bricolage, souvent en 38 mm d'épaisseur ou en 28. Dans ma dernière version, la partie supérieure du pèse-ruche est en 28mm, la partie inférieure en 38. Les dimensions sont celles de la ruche moins 1 centimètre.

Pourquoi des plans de travail ? Parce que l'épaisseur est garante de la planéité. Ce point est crucial : il faut que les quatre jauges soient soumises à la même pression sinon, seulement trois seront soumises à une pression identique (trois points forment toujours un plan). Si la quatrième est peu sollicitée, la pesée risque d'être erronée et le plateau oscillera (système bistable).

Le HX711 est installé au centre de la structure dans une petite boîte étanche. Le plateau supérieur est renforcé avec des entretoises (toujours des chutes de plan de travail). Les entretoises sont collées vissées. C'est du sérieux, une ruche avec trois hausses c'est 70 à 80 kg de charge (ou plus si on vit à Cuba où le varroa n'existe pas et les pesticides bannis).

Un seul point un peu technique, la partie centrale de la jauge est la partie déformable, il faut donc qu'elle soit libre de déplacement, pour cela, chaque emplacement accueillant la jauge est évidé, soit à la main au ciseau (sale boulot) soit avec une mèche à évider, soit avec une défonceuse (mon choix), un évidement d'un ou deux millimètre est largement suffisant. Les quatre jauges sont alors collées soigneusement à la colle époxy.

Pour s'assure que les quatre jauges appuient de manière uniforme, dès que la colle commence à prendre, on pose le panneau supérieur sur la base. La pression exercée va jouer sur l'épaisseur de la colle qui uniformisera les pressions.

Éventuellement, pour compenser les faibles erreurs de planéité résiduelles, on colle sous le plateau supérieur quatre rondelles en caoutchouc très dur (pour éviter un trop fort poinçonnage). Ces amortisseurs, d'une part limiteront les vibrations, les risque de glissement et répartiront les forces sur les quatre jauges.

Ce peut être des rondelles de joints de robinet ou comme dans mon cas, des rondelles tirées au moyen d'un emporte-pièce dans une bavette de protection de bas de caisse de voiture. Les vieux savent de quoi je parle...

Au plan protection, toujours dans une approche écolo-recyclo-économique, j'ai protégé les tranches des plateaux avec de l'huile de lin chauffée à plus de 100 degrés. Dans ce cas, l'huile devient très fluide, elle entre dans la structure comme dans du buvard. Inconvénient, elles polymérise en plusieurs semaines. Mais c'est une excellente protection qui vaut toutes les peintures modernes.

Pour assurer une protection totale, l'ensemble est recouvert avec un couvercle de ruche en plastique Nicot. Produit suffisamment solide et de grande qualité, c'est normal, c'est franc-comtois...

On verra tout ça sur les photos dans le prochain post.

Voici quelques photos.

Pas de commentaires, elles parlent d'elles-mêmes.

Sauf pour la décoration... Les toits Nicot sont en polyéthylène si je ne me trompe pas. Ils sont donc impeignables, mais on peut s'amuser...

edit : j'ai eu des soucis pour charger les images jpeg. En fait il faut, sous gimp, décocher la case "enregistrer les données EXIF_

Pour conclure,

voici les 3 .ino qui ne sont pas optimisés, pas nettoyés, mais ont l'intérêt d'être fonctionnels.

  • fichier esp8266.ino donne le poids et la température dans la ruche intérieure
  • fichier esp32_E.ino module émetteur pour la ruche 2 extérieure
  • fichier esp32_R.ino module récepteur pour 3 ruches (2,3,4).

esp8266.ino (8.15 KB)

esp32_R.ino (8.65 KB)

esp32_E.ino (5.41 KB)

1 Like

Dernière mise à jour concernant le système d'alimentation.

Le système autonome basé sur un panneau photovoltaïque monocristallin de 10 W semble bien suffisant pour une seule ruche mais clairement insuffisant pour alimenter deux pèse-ruche. Un troisième étant en test il fallait trouver une solution...

J'ai donc acheté un panneau mono de 100 W et là tout baigne, ma batterie reste chargée à bloc.

J'ajoute que mes quelques données aberrantes ont disparu (à confirmer toutefois sur un laps de temps plus grand). J'en déduis (provisoirement) que l'alimentation ne suivait pas avec une batterie peu chargée.

C'est vrai que même en utilisant deepsleep, les esp32-TTGo ne sont pas optimisés pour l'usage en cas de faible énergie disponible.

1 Like