Publié le 13 août 2024 - par

Transmission de données série en 433MHz avec les modules EBYTE E49-400T20D

Il existe de nombreuses solutions pour transmettre des données, depuis le câble série, en passant par le câble réseau, le WiFi, LoRa… Ebyte couvre plusieurs de ces domaines en particulier le a transmission série avec des modules peu chers. J’ai approvisionné plusieurs de ces modules pour entreprendre de faire communiquer en 433MHz des Raspberry Pi PICO, mais ça pourrait être des Arduinos ou des Raspberry Pi classiques. Le programme est en microPython.

Au sommaire :

Transmission de données série en 433MHz avec les modules EBYTE E49400T20D

Pourquoi ce choix

C’est à la suite d’une discussion avec Franck, qui a besoin de transmettre des données sur 200 mètres et dispose d’une puissance réduite que je me suis intéressé à ce problème. Dans le cahier des charges il y avait la transmission de data (pas très nombreuses), l’impossibilité d’installer du WiFI, pas d’utilisation de LoRa pour rester simple… L’alternative c’est de creuser une tranchée pour amener un câble réseau et de l’alimentation jusqu’aux capteurs.

L’autre choix c’était entre les fréquences 433MHz et 868MHz. Dans un premier temps je suis parti sur le 433MHz car le lieu d’utilisation est plutôt loin de toute agglomération et sera sans doute moins perturbé que si on était en pleine ville.

Les bandes ISM (industriel, scientifique et médical)

Les bandes ISM (industriel, scientifique et médical) sont des bandes de fréquences utilisées pour diverses applications non liées à la radiocommunication et au radio-repérage. En Europe, elles sont régies par la directive RED et définies par la norme EN 55011. Ces bandes sont souvent partagées avec des équipements de radiocommunication. La bande 433 MHz est couramment utilisée pour des dispositifs domestiques comme les télécommandes et les alarmes, tandis que la bande 868 MHz est utilisée pour les réseaux domotiques et M2M comme EnOcean, Z-Wave, Sigfox et Lora. (source Wikipedia)
Par contre c’est un peu une bande « fourre-tout » partagée entre (source Wikipedia)

  • le service radioamateur dans la bande de 430 MHz à 440 MHz (avec des puissances d’émission notablement supérieures),
  • la radiolocalisation CFL ;
  • les modems radio ;
  • le Ministère de la Défense, en France, pour des « besoins intermittents avec une puissance rayonnée maximale de 12 dBW »5 ;
  • les applications sans fil ;
  • des télécommandes, des télécommandes de voiture ou de portails ;
  • radiotélécommande de pont roulant  ;
  • le télécontrôle ;
  • la télémesure ;
  • les thermomètres d’extérieurs ;
  • les alarmes sans fil ;
  • la transmission d’alarme ;
  • les baby phone ;
  • des jouets ;

Ce qui est autorisé en France

Ce document de l’ANFR donne l’information sur ce qui est autorisé en France :

Dans la bande qui nous intéresse on trouve également les LPD433, ces petits talkie-walkie dont l’usage est régi par une décision de l’ARCEP (Décision 2007-0682).
Ici on a une PAR (puissance apparente rayonnée maxi) de 10mW soit 10dBm. C’est à noter car par défaut le module Ebyte sort 20dBm (100mW) ce qui vous place d’office hors-la-loi. Vous trouverez un convertisseur dBm <=> Watts en ligne en suivant ce lien. Attention cette puissance est bien la puissance RAYONNÉE ! Cela signifie que si vous montez sur le module une antenne avec du gain, vous dépasserez la puissance autorisé.

Les canaux autorisés

Il y a 69 canaux autorisés dans la bande ISM, à partir de 433,075MHz, espacés de 25KHz. Le module E49 de Ebyte permet d’émettre à partir de 410 MHz (interdit chez nous !) par pas de 500KHz. Il y a donc 3 possibilités de configuration du canal :

  • 433,500 MHz
  • 434,000 MHz
  • 434,500 MHz

Je vous déconseille le canal 18 des LPD433 (Low Power Device = Appareil de Faible Puissance) à 433,500 MHz qui est utilisé comme canal d’appel par les radioamateurs en FM et par les LPD433. Vous prenez le risque que vos données soient brouillées. On reste donc avec les deux canaux en gras : 434,000 MHz et 434,500 MHz.

Pourquoi le 433MHz

La bande de fréquence 433 MHz présente certains avantages en milieu rural par rapport à la bande 868 MHz :

  1. Meilleure pénétration des obstacles : La fréquence plus basse de 433 MHz permet une meilleure pénétration à travers les obstacles tels que les murs et les arbres, ce qui est particulièrement utile en campagne où les bâtiments et la végétation peuvent affaiblir les signaux.

  2. Portée de communication : Bien que la bande 868 MHz offre généralement une portée plus longue, la bande 433 MHz peut être plus efficace sur de courtes distances avec moins d’interférences, ce qui peut être avantageux pour des applications spécifiques comme les télécommandes et les capteurs domestiques.

  3. Moins d’interférences : En milieu rural, il y a généralement moins de dispositifs utilisant la bande 433 MHz, ce qui réduit les risques d’interférences.

  4. Consommation d’énergie : Les dispositifs utilisant la bande 433 MHz consomment souvent moins d’énergie, ce qui est bénéfique pour les appareils fonctionnant sur batterie.

Après je ne suis pas opposé aux tests et si Ebyte propose de me fournir quelques modules en 868MHz… Je me ferai un plaisir de les tester 😀

Description des modules E49 400T20D

Je reprends ci-dessous les informations du fabricant. J’ai trouvé ces modules pour moins de 4 € pièce sur Aliexpress. J’ai ajouté des antennes SMA 433 MHz pour les tests.


Les modules sont effectivement peu chers et sont prévus pour une puissance d’émission maxi de 20dBm (100mW) réglable.

La vitesse de transmission radio est réglable de 1200 bauds à 200 Kbauds

A pleine puissance, la portée a atteint 2500m. Avec la puissance autorisée en France (10dBm) ce sera sans doute moins.

Les modules sont conçus en vue d’une utilisation industrielle. Ils supportent une large gamme de températures, ce qui autorise une utilisation extérieure par grand froid ou dans des enceintes surchauffées au soleil.
Le fait que les modules soient prévus pour une communication série standard permet leur utilisation pour une large palette d’application. Il existe d’autres versions accessibles en bus SPI, et des modules LoRa.

Caractéristiques du module E49-400T20D

  • Distance de communication mesurée est jusqu’à 1 km ;
  • Puissance de transmission maximale est de 100 mW, réglable ;
  • Bande de fréquences mondiale sans licence ISM 433 MHz ;
  • Vitesse de transmission de données : 1,2 Kbps à 200 Kbps ;
  • Mode faible consommation d’énergie, adapté à l’application sur batterie ;
  • Modulation GFSK ultra-étroite avancée ;
  • Alimentation 2,6 V à 5,5 V ;
  • Qualité industrielle pour une utilisation à long terme de -40 à 85 °C ;
  • Interface d’antenne SMA.

Présentation physique

J’ai commandé 3 modules. Il en faut 2 pour établir une liaison mais un « accident » (on peut aussi appeler ça une connerie) est vite arrivé ! Il y a deux types d’antennes pour les essais. Il faudra absolument brancher une antenne avant de connecter vos modules. Les transistors d’émission doivent dissiper la puissance dans l’antenne. A défaut ils la dissipent eux même en chauffant et parfois ça se termine mal pour eux !
Les 3 modules E49. Notez que la prise SMA est protégée par un bouchon. Les modules étaient bien à l’abri dans des sachets antistatiques.

Côté pile et côté face des modules.
Vue de dessus Le module est identifié par son N° de série
Sous le module les pins sont identifiées. On retrouvera les explications pour ces identifiants un peu plus loin dans l’article.

Connectique

  • M0 et M1 permettent de choisir le mode de fonctionnement du module (4 modes possibles). Ces entrées possèdent une résistance de rappel PULL-UP
  • RXD entrée de l’UART connectée à la broche TXD du MCU
  • TXD sortie de l’UART connectée à la broche RXD du MCU
  • AUX sortie qui indique l’état du module et « réveille » le MCU (interruption) lors de la réception de données. Pendant la procédure de RESET et de self test du module, la brocha AUX est à 0
  • VCC Alimentation du module de 2,6v à 5,5v CC
  • GND Masse

Choix des modes de fonctionnement

Vu le choix réduit des fréquences, j’ai opté pour la fréquence de 434 MHz. L’étude de la notice du module E49 400T20D va permettre de définir la configuration à adopter.

Cliquez pour télécharger

RESET du module

Lorsque le module est mis sous tension, la sortie AUX passe immédiatement à 0 (niveau bas), le module effectue un auto-contrôle du matériel et définit le mode de fonctionnement en fonction des paramètres de l’utilisateur. Pendant le processus, la sortie AUX reste à un niveau bas. Une fois le processus terminé, la sortie AUX repasse à un niveau élevé et le module commence à fonctionner selon le mode de fonctionnement indiqué par M1 et M0. Par conséquent, il faut attendre le front montant de la sortie AUX pour commencer le fonctionnement normal du module.

Sortie AUX

La sortie AUX  est utilisée comme indication pour le tampon d’envoi et de réception de données sans fil et l’auto-vérification.

Elle peut indiquer s’il y a encore des données qui n’ont pas été envoyées via une connexion sans fil, ou si toutes les données reçues par radio ont été envoyées à l’UART, ou si le module est toujours en cours d’auto-contrôle lors de l’initialisation.

Indication de réception radio

Après avoir reçu des données sans fil valides, le module met immédiatement la sortie AUX à 0 et démarre l’UART pour sortir les données. Une fois les données transmises, il remettra la broche AUX à 1.

Indication de transmission radio

Après avoir reçu des données sur le port série, le module passera immédiatement la sortie AUX à 0 et commencera à envoyer des données par radio. Une fois toutes les données envoyées, AUX repasse à 1.

RESET et sortie du mode veille

Uniquement lors de la réinitialisation et de la sortie du mode veille

Notes pour la sortie AUX

Les deux fonctions mentionnées ci-dessus (transmission radio et RESET/sortie de veille) sont prioritaires pour forcer le passage de AUX à 0. Cela signifie que si une condition de passage à 0  est remplie, AUX génère un niveau bas à 0 ; lorsque toutes les conditions de niveau bas ne sont pas remplies, AUX génère un niveau haut à 1.

Lorsque la sortie AUX est à 0, cela indique que le module est occupé et la détection du mode de fonctionnement n’est pas effectuée ; lorsque la sortie AUX est à 1, le changement de mode de fonctionnement est terminée.

Lorsque les utilisateurs entrent dans d’autres modes à partir du mode 3 (mode veille) ou pendant le processus de réinitialisation, le module réinitialise les paramètres utilisateur, pendant cette séquence la sortie AUX passe à 0.

Description du mode de transmission fixe

Dans ce mode de transmission, les data sont précédées de 3 octets : les deux premiers représentent l’adresse du module destination (ici 00 03) et le troisième octet (Target Channel) représente le canal radio sur lequel les données sont transmises, ici 04. Il faut bien comprendre que la transmission se fait alors sur la fréquence

(410 + (Channel x 0,5)) MHZ, donc ici (410 + (4x 0,5)) = 412 MHz  qui est interdite en France !

Vous ne pourrez donc utiliser que les fréquences mentionnées plus haut

  • 433,500 MHz  ==>  Target Channel 0x2F  ==>  410 + (47×0,5) = 433.5 MHz
  • 434,000 MHz  ==>  Target Channel 0x30  ==>  410 + (48×0,5) = 434.0 MHz
  • 434,500 MHz  ==>  Target Channel 0x31  ==>  410 + (49×0,5) = 434.5 MHz

Il reste donc les canaux 30 et 31 si vous voulez laisser libre le canal d’appel des radioamateurs et des LDP433.

On voit sur le schéma que les récepteurs qui sont sur le même canal mais n’ont pas la bonne adresse (00 05 04) ou ceux qui ne sont pas sur le même canal (00 07 06) ne sortent pas de données sur le port TXD du module.

Description du mode Broadcast (Diffusion)

Adresse de diffusion

Exemple :

  • Envoyez en entête de vos données l’adresse 0xFFFF et mettez le canal sur 0x04.
  • Lorsque le module passe en transmission (même mode, mode de transmission transparent), tous les modules recevant sur le canal 0x04 peuvent recevoir les données.

Adresse de moniteur

Exemple :

  • Configurez l’adresse du module à 0xFFFF et mettez le canal sur 0x04.
  • Lorsque le module est utilisé comme récepteur, il peut recevoir toutes les données envoyées sur le canal 0x04 ce qui permet de surveiller tout ce qui passe sur ce canal.

Modes disponibles

Il existe 4 modes de fonctionnement configurés selon l’état de M0 et M1, selon l’image ci-dessus.

Changement de mode

  • Les niveaux sur M0 et M1 déterminent le mode de fonctionnement du module. Les utilisateurs peuvent utiliser deux GPIO du MCU pour contrôler le mode de fonctionnement. Après modification de M0, M1 : le module devient inactif et après 1 ms, il peut commencer à fonctionner selon le nouveau mode de fonctionnement programmé. Si le module avait reçu des données sur l’UART et qu’il n’a pas terminé sa transmission radio, il ne passera dans le nouveau mode de fonctionnement qu’une fois la transmission terminée. Si le module reçoit les données par radio et envoie ces données via le port série, il terminera l’envoi avant de passer dans le nouveau mode de fonctionnement. Donc le changement de mode de fonctionnement ne peut se faire que lorsque la sortie AUX est à 1, sinon le changement de mode est retardé.
  • Par exemple : en mode 0, l’utilisateur saisit en continu une grande quantité de données et change de mode en même temps. L’opération de changement de mode n’est pas valide à ce stade ; le module traitera toutes les données utilisateur avant de prendre en compte le changement de mode demandé. Il est donc recommandé de détecter l’état de la broche AUX, et d’attendre 2 ms après que la sortie AUX soit passée à l’état haut avant de changer de mode.
  • Lorsque le module passe d’un mode quelconque au mode veille, alors qu’il y a des données à traiter, le module passe en mode veille après avoir traité les données (y compris la réception et l’envoi). Cette fonction peut être utilisée pour un mode veille rapide afin de diminuer la consommation d’énergie. Par exemple : le module émetteur fonctionne en mode 0, l’utilisateur lance les données série « 12345 », il n’a pas besoin d’attendre que la broche AUX soit inactive (niveau élevé) et peut passer directement en mode veille. Le MCU de l’utilisateur passe immédiatement en mode veille, le module continue d’envoyer automatiquement toutes les données utilisateur via le réseau radio et passe ensuite automatiquement en mode veille dans un délai de 1 ms ; économisant ainsi le temps de travail du MCU et réduisant la consommation d’énergie.
  • De même, n’importe quel changement de mode peut utiliser cette fonctionnalité. Après avoir traité l’événement du mode actuel, le module entrera automatiquement dans le nouveau mode dans un délai de 1 ms, éliminant ainsi la surveillance de la sortie AUX par l’utilisateur et autorisant une commutation rapide. On peut par exemple passer du mode transmission au mode configuration, le MCU de l’utilisateur peut passer en mode veille avant le changement de mode, et attendre l’interruption indiquant le changement d’état de la sortie AUX pour passer en mode commande.
  • Ce mode de fonctionnement est très flexible et efficace. Il est conçu en fonction de la commodité du microcontrôleur utilisateur et peut réduire autant que possible la charge de travail de l’ensemble du système, améliorer l’efficacité du système et réduire la consommation d’énergie.

Configuration du module

La partie qui suit explique comment configurer le module. C’est la traduction de la notice du module E49-400T20D.

Mode transmission (Mode 0)

Type M0 = 0, M1 = 0
Émission

Le module reçoit les données utilisateur sur port série, la longueur maximale du paquet de données sans fil transmis par le module est de 54 octets, lorsque la quantité de données d’entrée utilisateur atteint 54 octets, le module commence la transmission radio. À ce stade, l’utilisateur peut continuer à saisir les données qu’il souhaite transmettre.
Lorsque l’utilisateur doit transmettre moins de 54 octets, le module attend environ 20 ms. S’il n’y a plus de données utilisateur qui arrivent sur l’entrée série, les données sont considérées comme terminées. Le module envoie alors toutes les données via la connexion radio.
Lorsque le module reçoit les premières données utilisateur sur le port série, la sortie AUX passe au niveau bas (0). Lorsque le module a mis toutes les données dans la puce UHF et commence à transmettre, la sortie AUX repasse au niveau haut (1).
Cela indique que le dernier paquet de données a été transmis sur la voie radio et que l’utilisateur peut continuer à envoyer des données.
Les paquets de données envoyés en mode 0 ne peuvent être reçus que par un module de réception en mode 0.

 Réception

Le module est en permanence en réception et peut recevoir des paquets de données émis à partir du mode 0.
Après avoir reçu un paquet de données, la sortie AUX passe au niveau bas (0), il commence à envoyer des données reçues sur la voie radio sur la broche TXD du port série. Une fois que toutes les données reçues sur la voie radio ont été envoyées sur le port série, la sortie AUX du module repasse à l’état haut (1).

Mode RSSI (Mode 1)

Type M0 = 1, M1 = 0
Émission Aucune émission n’est autorisée, les données reçues sont perdues
 Réception Le module ne reçoit pas de données, il surveille simplement la puissance Pw du signal reçu, et sort sa valeur (relative) sur le port série toutes les 100ms.
Méthode de calcul employée : -(256-Pw)dBm  (avec 256 et Pw exprimés en décimal)
Par exemple si la valeur hexadécimale envoyée sur le port série est 0x91, la force du signal est :
-(256-145) = -111dBm

Mode configuration (Mode 2)

Type M0 = 0, M1 = 1
 Émission Aucune émission n’est autorisée, les données reçues sont perdues
 Réception Le module ne peut pas recevoir de données
 Configuration Mode utilisé pour la configuration du module. Cette fonction utilise le port série en 9600 bit/s, 8 bits, parité paire, 1 stop bit (8N1). Réglez les paramètres du module en fonction des performances souhaitées.
 Note Lorsque le module passe du mode « Configuration » aux autres modes, il reconfigure ses paramètres. Pendant cette reconfiguration la sortie AUX reste au niveau bas (0). Le niveau de AUX repasse à 1 après la reconfiguration des paramètres. Il est donc conseillé aux utilisateurs de détecter le front montant sur AUX.

Mode veille (Mode 3)

Type M0 = 1, M1 = 1
 Émission Le module ne peut pas émettre de données
 Réception Le module ne peut pas recevoir de données
 Configuration Quand le module est dans cet état de consommation électrique ultra faible, toutes ses fonctions sont en sommeil. Il ne peut être remis en fonctionnement qu’en changeant l’état de M0 et M1.

Configuration du module en mode 2 (M0 = 0 et M1 = 1)

Différentes commandes

En mode « Configuration » (Mode 2 : M0 = 0 et M1 = 1), le module peut recevoir les paramètres ci-dessous. La communication en mode 2 se fait uniquement en 9600, N, 8, 1.

 N° Format de la
commande
Description
1 C0 + commande Envoyer C0 suivi des paramètres sous forme de 5 octets au format hexadécimal, soit un total de 6 octets. En mode C0, les paramètres sont sauvegardés lors de la coupure d’alimentation.
2 C1+C1+C1 Envoyer 3 octets C1 en hexadécimal. Le module retourne sur le port série les paramètres sauvegardés. Le module retourne la configuration actuelle par exemple : C0 00 00 18 20 00
3 C2 + commande Envoyer C2 suivi des paramètres sous forme de 5 octets au format hexadécimal, soit un total de 6 octets. En mode C2, les paramètres ne sont pas sauvegardés lors de la coupure d’alimentation.
4 C3+C3+C3 Envoyer 3 octets C3 en hexadécimal. Le module retourne sur le port série la version du module : C3 49 xx yy

Configuration d’usine par défaut

Modèle Valeur de la configuration d’usine par défaut : C0 00 00 19 2E 00
Module Fréquence Adresse Canal Data radio Data UART Puissance Tx
E49-400T20D 433 MHz 0x0000 0x2E 2,4 Kb/s 9600 b/s 20 dBm

Paramètres de configuration pour C0 et C2

Les commandes C0 et C2 permettent d’envoyer les paramètres de fonctionnement au module, en remplacement de la configuration d’usine ci-dessus. C0 enregistre les paramètres et ils seront réactivés au prochain démarrage, alors que C2 configure le module jusqu’à la coupure d’alimentation, après quoi le module reprendra les paramètres qu’il a en mémoire. Ce seront les paramètres d’usine si rien n’a été modifié, ou les paramètres enregistrés avec C0.

Octet 0 : Entête

L’entête indique au module s’il doit utiliser les données suivantes temporairement, jusqu’à la coupure de l’alimentation (C2) ou s’il doit les enregistrer pour les ré-utiliser au prochain redémarrage (C0)

Octet 1 : Adresse poids Fort


Octet de poids fort de l’adresse, compris entre 0x00 et 0xFF.

Octet 2 : Adresse poids Faible

Octet de poids faible de l’adresse, compris entre 0x00 et 0xFF.

Octet 3 : Vitesse de transmission


Les bits 7 et 6 définissent le nombre de bits, le nombre de stop bits et la parité pour l’UART et pour la liaison radio

  • Les bits 5, 4, 3 définissent la vitesse de communication de l’UART. La vitesse de l’UART n’a aucun rapport avec la vitesse de transmission/réception radio des données émises.
  • Les bits 2, 1, 0 définissent la vitesse de transmission des données sur la liaison radio. Plus la vitesse est lente, plus la transmission dure longtemps. Une vitesse lente permet cependant d’améliorer la portée. C’est une affaire de compromis puissance/Vitesse de transmission/Obstacles/Antenne utilisée. La vitesse de transmission radio doit être identique pour les 2 modules concernés par la liaison radio.

Octet 4 : Canal de communication (fréquence)


Les bits 7, 6, 5, 4, 3, 2, 1, 0 de l’octet 4 définissent le canal de communication, donc la fréquence d’émission et de réception. ils peuvent aller de 0x00 à 0xC8 ce qui correspond à une gamme de fréquence de 410 MHz à 510 MHz. Il convient de n’utiliser que les canaux autorisés par votre réglementation locale ! Voir plus haut pour la réglementation en France.

Octet 5 : Options

  • En mode de transmission fixe (bit 7 de l’octet 5 positionné à 1) Les trois premiers octets du paquet de data correspondent à l’adresse et au canal à utiliser.
  • Les bits 1, 0 configurent la puissance d’émission du module. Rappel : En france sur la bande ISM 433 MHz, la puissance apparente rayonnée (PAR) est limitée à 10 dBm = 10mw.

Réalisation de la liaison

Matériel retenu

Carte Maker Pi PICO avec module E49-400T20D – Envoi de la température du MCU RP2040 – Allume la LED RVB en fonction des commandes reçues

Je suis parti des modules que j’ai commandés sur Aliexpress. Pour le MCU j’ai commencé les manips avec le Raspberry Pi PICO, c’était avant la sortie du Raspberry Pi PICO 2 mais ça ne changera pas grand chose.

Carte Pimoroni – Reçoit par radio la Température MCU de la Maker Pi PICO et l’envoie sur la console série connectée au Raspberry Pi PICO (si j’ai le temps je l’afficherai sur l’écran) – Envoie des ordres grâce aux boutons poussoirs => allumage LED RGB

J’ai pensé dans un sens transmettre la température du MCU RasPi PICO et dans l’autre sens allumer une LED en appuyant sur un bouton. Comme je dispose d’une carte Pimoroni et d’une carte Maker Pi PICO , c’est sur deux supports que les Raspberry Pi PICO seront installés.

Câblage des modules E49-400T20D

L’existant

Le Pico Display utilise les GPIO suivants

La seule interférence dans le câblage est la broche 9 de l’UART 1 que j’utilisais au début. Je suis donc passé sur l’UART 0 avec  Tx en GP0 et Rx en GP1.

Câblage du module

Le câblage du module a été réalisé avec des fils Dupont pour ces tests. Il n’y a que 7 fils à connecter, et c’est assez rapide. Attention de bien prendre garde à ne pas inverser la tension d’alimentation, ce qui serait destructeur pour le module !

Analyse du programme à réaliser

Choix du mode de fonctionnement / Cahier des charges

J’ai choisi de travailler entre 2 points je n’ai pas besoin de changer les adresses, les modules travailleront en mode transparent.
Pour la France la fréquence que j’ai retenue est le 434 MHz (channel 0x30) avec une puissance de 10mW.
Je vais travailler en Fixed Transmission Mode en envoyant l’adresse du destinataire, j’enverrai la température du CPU depuis la carte Maker Pi PICO  (sous la forme T34.2 par exemple)

Depuis la carte Pimoroni j’enverrai la couleur de la LED RGB à afficher sur la Maker PI PICO (RED BLUE)
La sortie AUX sera surveillée par une interruption qui surveillera la montée ET la descente du signal et mettra un flag à jour en conséquence.

Pour les modifications de mode je ne surveille pas la sortie AUX, j’ai juste mis une temporisation. Comme je le dis souvent, je ne suis pas développeur et si vous voulez améliorer les programmes, n’hésitez pas !

Contenu de la bibliothèque

__init__ : initialisation de l’UART et déclaration des pins utilisées

aux_handler() : Gestionnaire de l’interruption sur la patte AUX – Positionne un flag pour suivre l’état de AUX. Évite de devoir gérer la lecture de AUX dans le programme principal

enter_configuration_mode() : passe le module en mode config avec M0=0 et M1=1

sleep_mode() : passe le module en mode veille M0=1 et M1=1

send_configuration_command(command) : Ecrit une config dans le module

read_configuration_command( command) : Lit la configuration actuelle du module

send_mode() : Met le module en mode transmission/réception

send_block(data) : Envoie le bloc de données. Vérifie s’il fait moins de 54 octets, attend que le flag AUX repasse à 1 pour rendre la main

receive_block() : Reçoit un bloc de données sur le port UART

Programme ÉTAPE 1

Le premier test consiste à envoyer un bloc de données vers le récepteur et de vérifier qu’il arrive bien. Déjà si ça fonctionne on a des bases. Vous pouvez télécharger les bibliothèques et programmes en cliquant sur ce lien. Avant tout cela j’ai aussi fait un test de lecture RSSI pour voir si le récepteur recevait bien les ondes envoyées par l’émetteur.
Avertissement : Les programmes de cette étape sont en cours de développement. Les librairies ne sont pas (encore) identiques car on est en phase de mise au point, les 0 avant le x des nombres hexadécimaux du bloc émetteur ajoutent des octets dans le bloc réception. L’étape suivante corrige tout cela.

Émetteur

L’émetteur est un PICO sur la carte Maker Pi Pico

Il émet régulièrement (pour les tests) sur 434 MHz un paquet de données

Récepteur

Le récepteur est sur une carte Pimoroni Pico Omnibus. Il reçoit simplement les données

Le récepteur reçoit le bloc de données et l’affiche sur la console série. Pour le moment il n’y a pas de traitement des infos, mais on voit que ça fonctionne.

Programme ÉTAPE 2

Dans l’étape 2 (voir la vidéo) l’émetteur envoie la température du CPU au récepteur. Il possède aussi 3 boutons poussoirs qui font changer la couleur de la LED du récepteur.

Vous pouvez télécharger les programmes en cliquant sur ce lien.

Vidéo

 

Conclusion

Une première expérience assez sympathique avec ces modules EBYTE. J’avoue que la doc est un peu difficile à décoder si on n’est pas « dedans ». Heureusement j’ai eu de bons contacts avec une ingénieure des ventes chez EBYTE à Chengdu une petite ville de … 18 millions d’habitants, Helen que je remercie, qui a fait preuve de patience et a relayé mes questions, et surtout… m’a envoyé des réponses !

Une fois qu’on a compris la philosophie du produit ça roule et comme le montre la vidéo les tests sont concluants. Il n’y avait pas de bibli micropython pour ce modèle, j’en ai fait une à l’arrache (mais ça fonctionne), ça permettra à ceux qui veulent se lancer de partir sur des bases correctes.

Merci à mon RTL-SDR qui m’a permis de visualiser les émissions des modules, leur fréquence en fonction de la programmation et la qualité du signal (étalement, raies parasites). On se croirait aux Oscars 😀

La prochaine étape ce sera les tests de portée que je n’ai pas encore réalisés. Je vais faire un boîtier en impression 3D pour protéger le module et le PICO, tester la portée et essayer de mesurer la consommation parce que mon testeur USB indique 1mAh après 1 heure de fonctionnement de l’émetteur et ça me semble peu… J’aimerais aussi qu’il y ait un ACK (un acquittement) par exemple quand le récepteur allume la LED bleue, qu’il envoie une confirmation, ce qui rassurerait l’utilisateur. Après pour de la simple transmission de données genre GPS, station météo ou autre ça ne pose pas de sousi.

En final pour un module E49 qui coûte moins de 4€ sur Aliexpress, un Raspberry Pi PICO à 4€ et une batterie de chez Action, on a un ensemble qui permet de réaliser une système de surveillance, une télécommande, un portier…

Consommation

Après une journée de mesures

On arrive à une consommation inférieure à 1mAh (autour de 0,6 ou 0,7mAh) je continue les mesures mais ça semble cohérent. A noter que je n’ai pas mis le module en mode veille où il consomme pratiquement plus rien et que le programme sur le PICO tourne en permanence. Avec un module RTC et un déclenchement programmé on devrait pouvoir réduire drastiquement la consommation de l’ensemble.

Et ici un essai sur plusieurs jours

 

On voit que le pack batterie a tenu près de 3 jours. A la louche on peut dire qu’un pack 10000mAh délivre environ 8000mAh avant de donner des signes de faiblesse. (Ici la LED la plus basse clignote avant que l’alimentation se coupe). On a donc un peu moins de 4 jours pleins de service. 3 jours et ~20H soit environ 90 Heures en émettant une fois toutes les 5 secondes on tourne autour de 8000/90 ~ 90 mA de consommation. Cela devrait vous permettre d’évaluer les besoins en énergie de ce type de montage, en sachant qu’ici je ne mets pas le module en veille, ni le Raspberry Pi PICO et que je fais flasher une diode RVB WS2812 en blanc à chaque émission… On doit donc pouvoir faire mieux.

Y’a quoi dedans ?

C’est une question posée par Denis Bodor (Rédac-chef des magazines Hackable et GNU Linux Mag) :

Cela m’a permis d’explorer un peu plus ce module en en « dégnappant » un (j’ai enlevé le blindage). Cela m’a permis d’identifier le MCU CX32L003F8 (notice ici) qui est un ARM Cortex-M0 par contre l’autre IC qui fait l’émission réception reste inconnu. Il ressemble au Si4461(notice ici) …


Carte vue dessus sans le blindage.

Carte vue de dssous la prise 4 broches est la prise JTAG qui permet d’accéder au MCU.

L’arrivée du JTAG côté MCU. On voit que le MCU est relié au transceiver par un bus (sans doute SPI), et on repère la liaison du transceiver au quartz. L’antenne (tout à droite) est reliée au transceiver par un ensemble de composants qui filtre les fréquences indésirables.

Ce composant reste inconnu : transceiver autour de 433MHz, capable d’envoyer des octets (64?) en GFSK et de recevoir sur la fréquence. Puissance 20dBm. Il est proche du Si4461 mais je ne l’ai pas identifié formellement. SI vous avez une idée…

Microcontrôleur 32 bits ARM Cortex-M0 qui gère l’émission réception.

Une suggestion pour trouver la doc de ce circuit ?

Sources (liens Aliexpress affiliés)

Modules E49-400T20D sur Aliexpress

Antennes 433 MHz par 2 sur Aliexpress

https://www.fr-ebyte.com/products/E49-400T20D

https://github.com/KrisKasprzak/EBYTE

Ebyte LoRa E32 & MicroPython: exploring library – 2

 

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

9 réflexions au sujet de « Transmission de données série en 433MHz avec les modules EBYTE E49-400T20D »

  1. sophie

    Merci François pour ce superbe article!

    Je vais tester votre code qui me semble très bien écrit  (et surtout très clair); la seule chose que je me demandais est que si data > 54 dans send_block() on ne peut pas boucler ?.. on alors on ajoute une fonction qui fragmente le message (data).

    Un dernière question concernant la réglementation dont je n’ai pas trouvé de réponse, peut on envoyer des données cryptés  (aes256)?

    Cordialement

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Sophie
      Merci pour votre retour.
      Oui effectivement on pourrait boucler, je n’y ai pas pensé car l’idée c etait d envoyer des messages courts , mais oui bonne idée
      De meme je n ai pas prevu de tempo pour sortir de la boucle d attente de AUX
      Ca fait plusieurs jours que ca tourne comme ca ici 🙂
      Bonne journée
      Francois

      Répondre
  2. sophie

    Oui, Ebyte fait vraiment des cartes ‘pro’ pour un prix dérisoire… Merci encore, je vais creuser.. et peut-etre porter votre code en mode asynchrone; ce qui permettra de lire les capteurs tout en envoyant les données (en théorie)

    Cordialement

    Répondre
  3. Benoit

    Bonjour,

    Dans cet excellent article , vous utilisez pour les tests une clé RTL-SDR que je ne voie plus sur le lien du site Passion Radio.

    Quel autre modèle équivalent dans la liste me conseillez-vous d’acheter ?

    Quelle est la bande passante de ces clés ?

    Merci d’avance.

    Benoit

    Répondre
  4. Gordon

    Salut François.
    C’est exactement ce que je cherchais, la communication sans fil de type RF (radio fréquence), sur de longues distances, peu cher, sans passer par le réseau Lora que je trouve contraignant (nécessité d’une passerelle). Ces modules Ebyte E49 sont petits (plus petit que mes NodeMCU ESP32 que j’utilise pour l’IoT) et peuvent être installés sur une breadboard (broches déjà soudés) pour faire des test et je découvre qu’il existe déjà des modules de tests :
    –> https://www.fr-ebyte.com/Module-ComposantElectronique-E49
    –> https://www.fr-ebyte.com/products/E49-900MBL-01
    Ils sont émetteur / récepteur RF à la fois et dans mon cas destinés à la domotique (Maison dite intelligente) et à la transmission de données issues de capteurs. Faible consommation. Il existe actuellement treize modèles « E49 » :
    –> https://www.fr-ebyte.com/product_serch/e49/1
    J’ai trouvé dans qu’elle catégorie entre ces E49, Ebyte considère cela comme du RF et non du Lora ou du LoraWan :
    –> https://www.fr-ebyte.com/products/E49-900T20D
    –> https://www.fr-ebyte.com/products/E49-400T20D
    –> https://www.fr-ebyte.com/products/E49-900M20S
    –> https://www.fr-ebyte.com/products/E49-400M20S
    Dans ton montage, l’un des E49 est un émetteur et l’autre E49, un récepteur. Y-a-t-il la possibilité d’alterner entre les deux modes de transmissions afin de créer un dialogue ? L’un parle pendant que l’autre écoute et vice-versa. Dans cette idée, peut-on gérer un E49 émetteur / récepteur et plusieurs E49 récepteurs ? Je soulève la question des interférences entre E49. Y-a-t-il une identification des récepteurs dans la trame qui est envoyé ? A moins que cela doit se gérer dans l’application.

    Bravo pour ton sujet qui est exactement dans la ligné de ce que je recherchais pour les modules ESP32, une communication longue distance.

    Cordialement.
    @+

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      oui bien entendu ils sont Tx ET Rx quand on est en mode « normal » ils sont en écoute en permanence et passent en émission quand on envoie un paquet de datas
      et oui chaque E49 a une adresse qu on lui attribue et on peut envoyer vers une adresse ou faire du broadcast. La doc est dans l’article
      cdt
      francois

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.