DOMOTIQUE : Communiquer en 433Mhz

23 décembre 2018 rdorigny 2 commentaires

Les IOT sont par définition connectés, et je vous ai présenté le microcontrôleur ESP32 qui peut communiquer en bluetooth ou en WIFI. Cependant ces deux protocoles fonctionnent assez mal lorsque la distance dépasse 15m avec des obstacles au milieu.

J'ai donc commandé plusieurs kits d'émetteurs/récepteurs RF à 433Mhz. Fréquence réputée pour la domotique. On les trouve pour quelques euros sur la plupart des sites de commerce en ligne digne de ce nom. Voyons un peu la mise en oeuvre de ces modules et ce que j'ai réussi à en tirer.




Ces modules fonctionnent en modulation d'amplitude (ASK), et les schémas de l'émetteur et du récepteur sont assez basiques.

Sur le schéma de l’émetteur ci-dessous, on observe que l'émetteur dispose de 3 sorties une VCC pour 5V, une pour la masse et une une pour les données. Le bouton poussoir sert à simuler l'émission de données.

Le récepteur n'est guère plus complexe, il dispose de deux sorties data que l'on peut utiliser indifféremment. La sortie numérique oscille entre un niveau haut et un niveau bas ce qui pilote le transistor pour alimenter la led.

Une fois ces schémas réalisés sur breadboard, j'observe un phénomène étrange. Lorsque j'appuie sur le bouton poussoir de l'émetteur la diode s'allume effectivement ce qui tend à démontrer que la communication est effective. Cependant, la diode n'est jamais vraiment éteinte, elle est comme semi-allumée sans action de ma part sur le poussoir de l'émetteur.

Bizarre... Pour mieux comprendre, je mesure la sortie data du récepteur directement à l'oscilloscope. Et là, mauvaise surprise, je reçois un signal assez puissant qui émet tout le temps!


Cela explique la LED semi-allumée, on a une sorte d'effet PWM (Pulse Width Modulation). Ce bruit de fond est probablement généré par un équipement domotique d'un de mes voisins. (j'habite en ville dans un quartier pavillonnaire).

Vu le bruit ambiant sur cette fréquence, il est probable que vais avoir des difficultés. Mais je pousse tout de même mes investigations un peu plus loin. Objectif du projet faire communiquer deux ESP32.

Pour cela, j'ai utilisé la bibliothèque ESPiLight que l'on peut installer via le gestionnaire de bibliothèque de l'IDE Arduino. La bibliothèque est compatible avec bons nombre d'équipements domotique.

Code pour l'émetteur: (le câblage est trivial, j'utilise juste la pin 23 pour le transfert des données vers l'émetteur)
/*
 Basic ESPiLight transmit example

 https://github.com/puuu/espilight
*/

#include (ESPiLight.h) //remplacer les () par <>

#define TRANSMITTER_PIN 23

ESPiLight rf(TRANSMITTER_PIN);

void setup() { Serial.begin(115200); }

// Toggle state of elro 800 switch evrey 2 s
void loop() {
  rf.send("elro_800_switch", "{"systemcode":17,"unitcode":1,"on":1}");
  Serial.println("on");
  delay(2000);
  rf.send("elro_800_switch", "{"systemcode":17,"unitcode":1,"off":1}");
  Serial.println("off");
  delay(2000);
}
Code pour le récepteur: (même remarque, le cablage est trivial, la pin 13 pour la réception des données)
/*
 Basic ESPiLight transmit example

 https://github.com/puuu/espilight
*/

#include (ESPiLight.h) //remplacer les () par <>

#define RECEIVER_PIN 13  // any intterupt able pin
#define TRANSMITTER_PIN -1

ESPiLight rf(TRANSMITTER_PIN);  // use -1 to disable transmitter

// callback function. It is called on successfully received and parsed rc signal
void rfCallback(const String &protocol, const String &message, int status,
                size_t repeats, const String &deviceID) {
  Serial.print("RF signal arrived [");
  Serial.print(protocol);  // protocoll used to parse
  Serial.print("][");
  Serial.print(deviceID);  // value of id key in json message
  Serial.print("] (");
  Serial.print(status);  // status of message, depending on repeat, either:
                         // FIRST   - first message of this protocoll within the
                         //           last 0.5 s
                         // INVALID - message repeat is not equal to the
                         //           previous message
                         // VALID   - message is equal to the previous message
                         // KNOWN   - repeat of a already valid message
  Serial.print(") ");
  Serial.print(message);  // message in json format
  Serial.println();

  // check if message is valid and process it
  if (status == VALID) {
    Serial.print("Valid message: [");
    Serial.print(protocol);
    Serial.print("] ");
    Serial.print(message);
    Serial.println();
  }
}

void setup() {
  Serial.begin(115200);
  // set callback funktion
  rf.setCallback(rfCallback);
  // inittilize receiver
  rf.initReceiver(RECEIVER_PIN);
}

void loop() {
  // process input queue and may fire calllback
  rf.loop();
  delay(10);
}

Le moniteur série du récepteur affiche :

Donc cela fonctionne!! Mais j'ai vite déchanté. Je dois avoir 7 ou 8m de portée avec obstacles ce qui n'est vraiment pas beaucoup, ou tout du moins très en dessous pour le projet que j’envisage. Certainement du fait du bruit sur la fréquence de 433Mhz autour de chez moi. Vraiment dommage.

Conclusion

Le petit module émetteur/récepteur à 433Mhz fonctionne effectivement. Et si vous avez moins de bruit que moi, vous devriez pourvoir l'utiliser sur des distance beaucoup plus longue. Quand à moi, j'ai deux solutions. La première est d'émettre plus fort avec un système doté d'une amplification conséquente. (En théorie, on ne doit pas dépasser 100mW sur cette fréquence...). L'autre solution serait d’utiliser une autre fréquence, comme le 868Mhz avec le protocole LORA.






Neutrino - 2018-12-26 22:54:58
BonjourPour avoir une meilleure réception je te conseille comme récepteur le RXB6 de Superheterodyne. Bien meilleur que les récepteurs chinois.Même avec un simple fil de 17cm monobrin je couvre toute ma maison et quelques voisins :
rdorigny - 2018-12-27 10:27:08
Bonjour neutrino merci pour l'info. Je ne connaissais pas ce modèle. Je vais voir pour en acheter un. Tu sais si tu as du bruit sur cette fréquence autour de toi?

Pseudonyme (obligatoire) :
Adresse mail (obligatoire) :
Site web :




© 2019 www.doritique.fr par Robert DORIGNY