Pb de capture rf433

Bonjour a tous,
Je suis confronté a un probleme de RF433.
Lorsque j'utilise RCSwitch mon capteur de porte communique avec mon arduino mais pas mon capteur de tension.
Lorsque j'utilise NewRemoteReceiver mon capteur de tension fonctionne mais pas le capteur de porte.

Je suis perdu :frowning_face:

Y aurait il une bonne âme pour m'aider.

Merci d'avance.

Ma boule de cristal est dans le lave vaisselle...

blague à part, il faudrait nous donner plus d'infos

  • le circuit, les références des composants, l'alim. (un petit schéma serait bien)
  • le code

tout ce qu'il faut savoir pour bien poster est dans "Les bonnes pratiques du Forum Francophone” ➜ à lire !

tout d'abord merci pour l'intérêt que vous portez a mon problème.

pour le code qui fonctionne avec le capteur de porte :

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver input on interrupt 0 (D2)
  pinMode(13, OUTPUT); // D13 as output- Optional
}

void loop() {

  if (mySwitch.available()) {
    Serial.print("Received ");
    Serial.print( mySwitch.getReceivedValue() );
    Serial.print(" / ");
    Serial.print( mySwitch.getReceivedBitlength() );
    Serial.print("Bit ");
    Serial.print(" // ");
    Serial.print("Protocol: ");
    Serial.println( mySwitch.getReceivedProtocol() );
    digitalWrite(13, HIGH); // Toggle the onboard LED  if serial is available - Optional

    delay(1);

    digitalWrite(13, LOW);
    mySwitch.resetAvailable();
  }
}

Pour le code du capteur de tension qui fonctionne :

#include <NewRemoteReceiver.h>

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

  // Initialize receiver on interrupt 0 (= digital pin 2) for Arduino Uno. 
  // On ESP8266 and ESP32 use on GPIO 5 = digital pin depends board. 
  // Review file "pins_arduino.h" of your variant:
  //   https://github.com/esp8266/Arduino/tree/master/variants
  //   https://github.com/espressif/arduino-esp32/tree/master/variants
  //
  // See the interrupt-parameter of attachInterrupt for possible values (and pins)
  // to connect the receiver.
  //
  // Calls the callback "showCode" after 2 identical codes have been received 
  // in a row. (thus, keep the button pressed for a moment).

  // if you don't see codes try to reset your board after upload
  
    #if defined ESP8266 || defined ESP32
      NewRemoteReceiver::init(5, 2, showCode);
    #else
      NewRemoteReceiver::init(0, 2, showCode);
    #endif
    Serial.println("Receiver initialized");    
}

void loop() {

}

// Callback function is called only when a valid code is received.
void showCode(unsigned int period, unsigned long address, unsigned long groupBit, unsigned long unit, unsigned long switchType, boolean dimLevelPresent, byte dimLevel) {

  // Print the received code.
  Serial.print("Code: ");
  Serial.print(address);
  Serial.print(" Period: ");
  Serial.println(period);
  Serial.print(" unit: ");
  Serial.println(unit);
  Serial.print(" groupBit: ");
  Serial.println(groupBit);
  Serial.print(" switchType: ");
  Serial.println(switchType);

  if (dimLevelPresent){
    Serial.print(" dimLevel: ");
    Serial.println(dimLevel);    
  }

}

Pour le schema :
capteur RF : RXB6
data pin 2
power 5v et gnd.
alim antene 5v

pour le contact porte aucune reference

pour le contact tension : intertechno its-23
433.92 mhz
le tout est alimenté par le port usb d'un ordinateur Fixe.

RCSwitch ➜ votre code dépend de l'interruption sur la pin D2 (interruption 0)


NewRemoteReceiver ➜ votre code dépend de l'interruption sur la pin D2 (interruption 0)
e

➜ vous ne pouvez pas avoir deux composants dont la bibliothèque attend une interruption sur la même pin. Je ne comprends pas trop comment vous câblez le tout.

bonjour,
Pour le branchement, je connecte le cable GND de l'arduino sur le GND du RXB6 et le +5 arduino sur le +5 du RXB6
Le cable DATA sur la pin 2 du l'arduino.
Le problème c'est que je souhaite que les 2 émetteurs puissent fonctionner sur la meme bibliothèque.
pour le moment je peu utilisé soit l'une soit l'autre.
chaque périphérique fonctionnent mais chacun avec une bibliothèque différente.
le but final est d'avoir plusieurs capteurs sur la meme interruption afin de creer une alarme.
Dans les 2 cas j'ai regler la vitesse de transmition a 115200.
mon arduino est un mega2560.
Merci.

Bonjour nicoco68

Je ne suis pas spécialiste RF433 et n'ai pas de marériel pour essayer, mais j'ai posé la question à ChatGPT:

Je suis confronté a un probleme de RF433.
J'aimerai faire fonctionner mon capteur de porte ainsi qu'un capteur de tension en même temps avec la bibliothèque RCSwitch. Comment écrire le programme?

Sa réponse est intéressante, puisque le programme utilise l'identifiant du périphérique pour les distinguer.

A essayer :wink:

Cordialement
jpbbricole

chatGPT délire...

Le protocole utilisé par la bibliothèque RCSwitch pour la communication RF433 entre un émetteur et un récepteur et le contact tension de type Intertechno ITS-23, reposent tous les deux sur un encodage simple de signaux en modulation d'amplitude (ASK) à 433 MHz

En ASK, le signal est envoyé en activant ou en désactivant la porteuse (on/off). Lorsque le signal est activé, cela représente un "1", et lorsqu'il est désactivé, cela représente un "0".

Les messages envoyés par les appareils utilisent un encodage binaire spécifique. Les messages contiennent généralement un préambule (une séquence pour synchroniser le récepteur), suivi d'un identifiant unique de l'appareil et des commandes spécifiques à l'appareil.

➜ Ces messages sont donc une série de 0 et de 1, envoyés sous forme de trame.

Pour décoder un message, ces transitions entre 0 et 1 (LOW et HIGH) sont captées par une interruption sur l'Arduino sur la pin 2 (interruption 0) et les bits sont accumulés dans un buffer qui permet de reconstituer la trame puis grace à la connaissance du protocole, valider que la trame est cohérente et la décoder.

Dit autrement, quand vous n'avez qu'un seul appareil qui parle, vous avez une trame - disons 10110011101011001010 qui va arriver sur la pin 2 et il faut bien sûr que le décodeur (le code qui lit les interruptions) soit au courant du format de message pour le décoder.

Si vous avez 2 formats de trames incompatibles, il faut que le code de l'interruption écoute et détermine dynamiquement si c'est la trame format 1 ou format 2 pour ensuite effectuer l'analyse de la tame ➜ ça pourrait fonctionner en écrivant du code spécifique dans l'interruption pour décoder les 2 protocoles.

Mais si vous avez connecté deux appareils tous les deux sur la pin D2 et que les deux parlent en même temps
l'appareil 1 envoie 10110011101011001010
l'appareil 2 envoie 01100011100101100101000001001000111

l'arduino va recevoir la somme (le OU) de ces bits plus ou moins superposés en fonction des timings respectifs des appareils émetteurs et va voir un doux mélange des signaux

➜ c'est alors impossible de décoder quoi que ce soit, les trames sont mélangées et les bits ne veulent plus rien dire.

Oui, ça arrive, parfois :woozy_face:

tout d'abord merci pour votre aide.

Pouvez vous m'indiquer comment connaitre la trame de mes 2 périphériques. cela me permettrait d'avancer dans mon projet.
Sachant que les 2 périphériques n'émettrons jamais ensemble.

Je vous remercie pour l'interet et l'assistance que vous m'apportez.

Bonjour nicoco68

Essaies ça:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(2);  // Récepteur connecté à la broche 2
}

void loop() {
  if (mySwitch.available()) {
    unsigned long receivedCode = mySwitch.getReceivedValue();
    if (receivedCode == 0) {
      Serial.println("Signal RF non reconnu");
    } else {
      Serial.print("Code RF reçu: ");
      Serial.println(receivedCode);
    }
    mySwitch.resetAvailable();
  }
}

C'est issu de l'IA, mais pas essayé personnellement)

Cordialement
jpbbricole

je suis pris d'un doute

la sortie de ce capteur n'est pas simplement un tout ou rien ? En gros est-ce que ça se comporte comme un interrupteur ?

si c'est le cas il n'y a pas besoin de bibliothèque spéciale pour lire son état. juste n'importe quelle pin fait l'affaire et un digitalRead()

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.