Pilotage Chaudière Frisquet ECO Radio System Visio (Suite) (partie 2)

Hello !

Bon, pour la version ZigBee, je peux dire officiellement dire que la v0 est prête.

Après avoir lu tout le travail fait sur les deux précédents sujets du forum

J’ai d’abord voulu m’assurer de comprendre en détail tout le fonctionnement du protocole, j’avais donc commencé naturellement par la couche radio avec un dongle RTL-SDR :

J’avais utilisé inspectrum pour valider les paramètres de la modulation FSK et décoder les bits :

Je me suis fait d’ailleurs la réflexion que les sync word (ou Network ID) utilisés par Frisquet commencent toujours par des bits à zéro, certainement pour faciliter la reconnaissance de la fin du préambule.

Un autre outil, Universal Radio Hacker, était également d’une aide précieuse, car permettait d’éditer et d’aligner facilement le décodage du signal.

Cela m’a permis de valider par exemple que le préambule était bien 5 octets 0xAA (donc une suite de 10 et non pas 01).

L’onglet analyse permet également de définir le protocole de façon rudimentaire et de décoder automatiquement une suite d’échanges :

À ce stade, j’avais compris que les échanges étaient essentiellement des simples lectures / écritures des registres, j’avais donc proposé ici le fichier Google Sheet pour mettre en commun les connaissances sur la signification des registres.

Comme j’avais tout fait en Zigbee chez moi, je ne me voyais pas utiliser du Wi-Fi pour contrôler la chaudière. Je suis donc parti sur un kit de développement EFR32xG26 de Silicon Labs, qui sont leader sur le marché des puces ZigBee.

J’aurais peut-être pu utiliser une puce Espressif à la place, qui sont arrivés récemment sur ce marché, mais j’avais préféré profiter de la maturité de Silicon Labs pour m’éviter des surprises.

Finalement, j’étais tout de même pas mal déçu du manque de qualité des outils proposés par Silicon Labs. Le SDK ZigBee est certes très complet, mais les outils ne manquent pas de bugs obscurs, la documentation éparpillée entres des PDFs et 2 sites web différents, sans compter les différentes versions des outils et des SDKs qui se retrouvent tous en doublon…

D’ailleurs, il y a quelques semaines, Silicon Labs se sont fait racheter par Texas Instruments ! J’espère que cette fusion leur permettra d’améliorer leur “expérience développeur”.

Pour en revenir donc au projet. Le développement se fait via un outil propriétaire, qui s’appelle Simplicity Studio 6. L’outil permet de générer des fichiers en sélectionnant des composants du SDK et en les configurant dans l’interface dédiée.

Il y a également de nombreux sous-outils, notamment pour assigner les différentes pins du processeur :

Ou encore pour configurer les clusters & attributs ZigBee :

Pour permettre les mises à jour OTA, l’espace mémoire est divisé entre le bootloader (qui gère les mises à jour), le firmware flashé, et un espace permettant de stocker la nouvelle version du firmware. Sur les 1500 Ko de la flash disponible, je me trouve donc avec environ 700 Ko d’espace utilisable pour le code du firmware.

Pour communiquer avec la chaudière, j’ai acheté un module Wio-SX1262 déjà certifié CE. Je voulais également avoir un capteur de température et d’humidité embarqué fiable et précis, j’ai opté pour un SHT-31.

SHT-31 fonctionnant en I2C et SX1262 en SPI, j’ai du aussi brancher un analyseur logique pour m’assurer que tout est câble et configuré correctement :

J’ai utilisé le driver officiel de Semtech car l’utilisation de RadioLib avec ma puce Silicon Labs n’était pas supportée de base et écrire les fichiers HAL pour RadioLib s’est révélé bien plus laborieux que pour le petit driver sx126x.

Et puis les drivers sx126x s’est plus marrant, on peut faire un peu n’importe quoi, comme dessiner des sinusoïdes dans le spectre radio :

(ne pas reproduire à la maison… c’est illégal sans cage faraday & limitation de puissance émise)

J’ai failli faire un side-quest pour essayer d’implémenter une radio AM avec le SX1262 mais fort heureusement je suis rapidement revenu à la raison, j’avais tout le bus SPI à faire et des signaux IRQ du SX1262 à gérer avec des notifications FreeRTOS :

J’ai pu mettre à profit mes nouvelles compétences en SX1262 pour écouter les chaudières du village, sans avoir besoin de connaître le sync work (network ID), et ainsi prendre un peu l’air avec une petite balade en voiture sans attirer la moindre attention :

Je me suis dit que si je pouvais me cloner, il aurait été intéressant de faire un réseau d’antennes pour pouvoir localiser les signaux des chaudières Frisquet, et ainsi savoir exactement dans quelles maisons elles étaient installées.

Je n’aurais ainsi nul besoin de payer Google Adsense, j’aurais une solution de prospection souveraine et made in France. Et puis je n’aurais plus qu’à mettre les prospectus au bon endroit pour battre sowee à leur propre jeu.

J’ai du une fois de plus me reconcentrer sur le firmware pour structurer le projet, définir une liste des registres connus, des codecs pour encoder et décoder les différents types de valeurs, les plages de registres définissant des fonctionnalités entières, les différentes commandes découvertes pour manipuler les registres, associer la chaudière ou lui envoyer des messages, ainsi que tout le protocole réseau, puis le protocole radio, en séparant toutes les couches, un peu comme à l’école quand on apprend le modèle OSI.

À mi-janvier, j’avais donc un firmware qui parlait à Home Assistant à travers Zigbee2MQTT et mon tas de fils sur un bout de table qui validaient ensemble le “prototype”.

Vint la délicate étape de fabrication du PCB, qui a consisté essentiellement à lire des pages interminables de datasheets pour sélectionner les composants les plus adaptés. Je voulais quelque chose de simple et robuste à la fois pour minimiser le risque d’erreur.

En plus du capteur, MCU et du module RF, j’avais juste besoin de quelques boutons de contrôle et LEDs en guise d’interface utilisateur :

Pour l’alimentation, je me suis payé le luxe d’avoir une batterie lithium intégrée avec un chargeur USB :

Pour le PCB, j’aurais pu faire quelque chose de plus petit, mais le format 9x6 cm me permettait de me projeter sur une version avec écran à venir peut-être plus tard :

Le module RF ZigBee avait une antenne embarquée, mais pour le SX1262, j’ai du laisser de l’espace sans cuivre sur un côté du PCB pour loger une antenne dédiée.

Pendant que les PCB était en cours de fabrication en Europe de l’est et en Chine (pour avoir une idée des prix et des délais), je me suis attaqué au boitier.

Je me suis donc procuré de deux imprimantes SLA (avec une seule je n’avançais pas assez vite) pour faire des impressions en résine. J’ai du condamner une pièce entière et installer une VMC dédiée pour éviter que les vapeurs toxiques ne se propagent dans la maison.

Les premiers résultats étaient pour le moins décevants… En grande partie parce que j’ai mis pas mal de temps à comprendre que le fonctionnement des supports était fondamentalement différent des imprimantes à filament.

Je vous passe tous les détails des problèmes sans fin d’impression que j’ai eu, voici par exemple un échantillon de différents essais :

Entre temps, est arrivé le PCB… le premier allumage était sans doute le moment le plus stressant du projet :

Quel bonheur de tester un à un les composants pour se rendre compte que tout fonctionne parfaitement, après tant d’heures à travailler dessus !

Avec le PCB, j’ai pu tester les différentes options pour les LEDs et les boutons. Les LEDs se voient très bien avec un simple trou et un tunnel pour canaliser la lumière.

Pour les boutons, je voulais initialement que la déformation du plastique suffise à appuyer sur le switch qui est en dessous, mais cette méthode ne permettait pas d’avoir un clic suffisamment net pour comprendre si on avait bien appuyé sur le bouton ou non. J’ai donc fini par dessiner des vrais boutons :

J’arrive aujourd’hui à faire des boîtiers corrects, ce n’est peut-être pas encore parfait comme je l’aurais voulu, mais le résultat me paraît acceptable.

L’impression après une modification du fichier 3D reste un peu trop longue, car pour vraiment réussir une impression, je suis obligé de créer les supports manuellement pour avoir des points d’attache au bon endroit pour éviter les déformations, et pour éviter le ponçage aux endroits visibles :

Mais à la fin, je suis assez content du résultat :

Si le projet vous intéresse et/ou vous souhaitez me soutenir, vous pouvez l’acheter (utiliser le code HACF permet d’avoir une réduction). La notice est disponible en ligne. Il ne me reste que quelques pièces mais je prépare bientôt un nouveau lot.

Et si vous avez des suggestions ou des idées pour la suite, je suis preneur !