Fonctionnement Kit émetteur-récepteur sans fil 433MHz LR43B

Bonsoir,
encore moi, confinement oblige

voilà j'ai ces modules 433MHZ des LR43B

Modules RF 433 ALI

ils disent qu'il faut utiliser la "-Bibliothèque: VirtualWire"

j'ai essayé pas mal de sketch de bas pour tester mais d'office ça plante!

dernier sktech testé issue des exemples la bibliothèque :

// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600); // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
 //   vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000); // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
 int i;

        digitalWrite(13, true); // Flash a light to show received good message
 // Message with a good checksum received, dump it.
 Serial.print("Got: ");
 
 for (i = 0; i < buflen; i++)
 {
    Serial.print(buf[i], HEX);
    Serial.print(" ");
 }
 Serial.println("");
        digitalWrite(13, false);
    }
}

voici les messages d'erreur

Arduino : 1.8.12 (Windows 8.1), Carte : "Arduino Uno"

c:\Temp\ccYyTQ3b.ltrans0.ltrans.o: In function `loop':

c:\Temp\arduino_modified_sketch_456517/receiver.pde:30: undefined reference to `vw_get_message'

collect2.exe: error: ld returned 1 exit status

exit status 1
Erreur de compilation pour la carte Arduino Uno

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

une idée? un conseil?

Merci

vous avez bien installé la bibliothèque VirtualWire.h ?

oui,
je l'ai récupérée là:
github VirtualWire

le problème est là : undefined reference to `vw_get_message'

Jai aussi testé les sketchs de cette page avec les câblage idoines

[communication rf](http://communication rf)

et vous l'avez installé où et sous quel nom ?

:o
J'ai laisse le programme l'installer par l'option importation de bibliothèque
Donc son nom d'origine..
Avant de l'installer j'avais une erreur comme quoi la bibliothèque Virtualwire etait absente , après plus de soucis de nom de bibliothèque

allez voir dans vos librairies le nom du répertoire et ce qu''il y a dedans. est-ce que ça correspond à celle qu'on peut télécharger ici: VirtualWire: VirtualWire library for Arduino and other boards (vaut mieux d'ailleurs passer sur RH_ASK)

Ce qui est bizarre, c'est que le compilateur ne dit rien (enfin, si notre ami ne nous cache rien :slight_smile: ) pour inclure le .h, ni lorsqu'il rencontre les appels de fonctions de cette lib.
Par contre, le linker ne trouve pas le code de la fonction.
Donc :

  • soit le .h et le(s) .cpp de la bibliothèque sont incohérents,
  • soit Arzou n'a pas posté toutes les erreurs !

Non biggil, je ne cache rien.. :frowning:
J'ai fait dans le bas de l'IDE un copy to clipboard des messages du compilateur . Et tout y est.

Là je suis au boulot, je regarderai ce soir. Hier soir j étais ko

Protégez vous

vous avez essayé de changer le nom du fichier en .ino ? (receiver.pde --> receiver.ino)

On voit que tu n'as pas activé les "messages détaillés de compilation" (option de l'IDE Arduino).
Réessaye avec.

Par ailleurs, je vois que le linker déplore l'absence d'une seule des 3 fonctions vw_machin_truc.
Moi j'irais voir dans les fichiers .cpp de la bibliothèque si la fonction manquante existe ou pas.
Si elle n'y est pas, ça valide mon hypothèse 1 : les fichiers de la lib sont incohérents (pas la même version peut-être).
Si elle y est (avec la bonne signature), alors je sais plus.

Voici les messages complet de compilation

Arduino : 1.8.12 (Windows 8.1), Carte : "Arduino Uno"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\freddy\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\freddy\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\freddy\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=1A86_7523 -ide-version=10812 -build-path c:\Temp\arduino_build_814120 -warnings=none -build-cache c:\Temp\arduino_cache_949204 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Temp\Temp1_VirtualWire-1.14.zip\VirtualWire\examples\receiver\receiver.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\freddy\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\freddy\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\freddy\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=1A86_7523 -ide-version=10812 -build-path c:\Temp\arduino_build_814120 -warnings=none -build-cache c:\Temp\arduino_cache_949204 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\freddy\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Temp\Temp1_VirtualWire-1.14.zip\VirtualWire\examples\receiver\receiver.ino
Using board 'uno' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"C:\\Users\\freddy\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10812 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "c:\\Temp\\arduino_build_814120\\sketch\\receiver.ino.cpp" -o nul
Alternatives for VirtualWire.h: [VirtualWire]
ResolveLibrary(VirtualWire.h)
  -> candidates: [VirtualWire]
"C:\\Users\\freddy\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10812 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-IC:\\Users\\freddy\\Documents\\Arduino\\libraries\\VirtualWire" "c:\\Temp\\arduino_build_814120\\sketch\\receiver.ino.cpp" -o nul
Using cached library dependencies for file: C:\Users\freddy\Documents\Arduino\libraries\VirtualWire\VirtualWire.cpp
Generating function prototypes...
"C:\\Users\\freddy\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10812 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-IC:\\Users\\freddy\\Documents\\Arduino\\libraries\\VirtualWire" "c:\\Temp\\arduino_build_814120\\sketch\\receiver.ino.cpp" -o "c:\\Temp\\arduino_build_814120\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"C:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "c:\\Temp\\arduino_build_814120\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Compilation du croquis...
"C:\\Users\\freddy\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10812 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "-IC:\\Users\\freddy\\Documents\\Arduino\\libraries\\VirtualWire" "c:\\Temp\\arduino_build_814120\\sketch\\receiver.ino.cpp" -o "c:\\Temp\\arduino_build_814120\\sketch\\receiver.ino.cpp.o"
Compiling libraries...
Compiling library "VirtualWire"
Utilisation du fichier déjà compilé : c:\Temp\arduino_build_814120\libraries\VirtualWire\VirtualWire.cpp.o
Compiling core...
Using precompiled core: c:\Temp\arduino_cache_949204\core\core_arduino_avr_uno_0c812875ac70eb4a9b385d8fb077f54c.a
Linking everything together...
"C:\\Users\\freddy\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "c:\\Temp\\arduino_build_814120/receiver.ino.elf" "c:\\Temp\\arduino_build_814120\\sketch\\receiver.ino.cpp.o" "c:\\Temp\\arduino_build_814120\\libraries\\VirtualWire\\VirtualWire.cpp.o" "c:\\Temp\\arduino_build_814120/..\\arduino_cache_949204\\core\\core_arduino_avr_uno_0c812875ac70eb4a9b385d8fb077f54c.a" "-Lc:\\Temp\\arduino_build_814120" -lm
c:\Temp\ccN429Mt.ltrans0.ltrans.o: In function `loop':

C:\Temp\Temp1_VirtualWire-1.14.zip\VirtualWire\examples\receiver/receiver.ino:30: undefined reference to `vw_get_message'

collect2.exe: error: ld returned 1 exit status

Utilisation de la bibliothèque VirtualWire prise dans le dossier : C:\Users\freddy\Documents\Arduino\libraries\VirtualWire (legacy)
exit status 1
Erreur de compilation pour la carte Arduino Uno

j'ai chargé le programme .cpp
et j'ai trouvé la fonction incriminé

inline uint8_t vw_get_message(uint8_t* buf, uint8_t* len)
{
    uint8_t rxlen;
    
    // Message available?
    if (!vw_rx_done)
  return false;
    
    // Wait until vw_rx_done is set before reading vw_rx_len
    // then remove bytecount and FCS
    rxlen = vw_rx_len - 3;
    
    // Copy message (good or bad)
    if (*len > rxlen)
  *len = rxlen;
    memcpy(buf, vw_rx_buf + 1, *len);
    
    vw_rx_done = false; // OK, got that message thanks
    
    // Check the FCS, return goodness
    return (vw_crc(vw_rx_buf, vw_rx_len) == 0xf0b8); // FCS OK?
}

que dire de plus?

J-M-L:
allez voir dans vos librairies le nom du répertoire et ce qu''il y a dedans. est-ce que ça correspond à celle qu'on peut télécharger ici: VirtualWire: VirtualWire library for Arduino and other boards (vaut mieux d'ailleurs passer sur RH_ASK)

Bonsoir a tous!!
Merci J-M-L! effectivement ca venais de ma bibliotheque!!
et téléchargeant la tienne , plus d'erreurs!
erci! et + 1 karma!!! heu.. au fait, ca sert à quoi ? :slight_smile:

Bonjour,
article intéressant https://www.carnetdumaker.net/articles/communiquer-sans-fil-en-433mhz-avec-la-bibliotheque-virtualwire-et-une-carte-arduino-genuino/#la-bibliotheque-virtualwire
,
Du coups, ce qu'il proposait en 2017 n'est plus valable aujourd'hui ?

Tu as quelle portée réelle avec ce module en modulation ASK ?

Bonne nouvelle ! oui il y a plusieurs librairies qui trainent, certains ont fait des copies et des modifications vaut mieux toujours retourner à la source :slight_smile:

Bien que VirtualWire fonctionne encore, Radiohead (même si un peu plus lourd) est plus performant au global. Son usage reste très simple, voilà un petit sketch d'émission:

#include <RH_ASK.h>
RH_ASK rf_driver;
const char *msg = "Ceci est un test";

void setup()
{
  rf_driver.init();
}

void loop()
{
  rf_driver.send((uint8_t *)msg, strlen(msg)+1); // +1 pour envoyer le caractère '\0' de fin
  rf_driver.waitPacketSent();
  delay(2000);
}

et le récepteur associé est tout aussi simple:

#include <RH_ASK.h>
RH_ASK rf_driver;
const uint8_t tailleMax = RH_ASK_MAX_MESSAGE_LEN;
uint8_t message[tailleMax];

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

void loop()
{
  uint8_t buflen = tailleMax;
  if (rf_driver.recv(message, &buflen)) Serial.println((char*) message);
}

La portée du "Amplitude Shift Keying (ASK)" est très influencée par l'environnent (ce type de transmission radio est très sensible au bruit et aux interférences d'autres ondes radio), la puissance de votre module, la qualité de son alimentation, l'antenne et bien sûr le débit choisi.

Avec une antenne correctement dimensionnée (normalement 69.24 cm mais on peut passer en quart d'onde à 17.3 cm) et une bonne alimentation stable, j'ai eu jusqu'à 40 voire 50m de portée dans mon jardin (en "ligne de vue", pas d'obstacles majeurs, pas d'arbres ni de feuilles et en environnement peu bruité d'un point de vue électro-magnétique).

Ok merci.
Avec un kit de ce type, J'ai une portée de 70 m avec la maison entre le jardin et la grange ou se situe le récepteur, en soudant un fil de 17 cm comme antenne et un autre identique côté masse pour faire un doublet.

L'émetteur est alimenté en 12 V, ça compte aussi pour la puissance.
Cela portait beaucoup moins avant. Je ne sait pas si c'est aussi ASK comme modulation ?

OK - je ne sais pas quelle modulation est utilisé sur ces kits. Notez qu'en France les "Puissances Apparentes Rayonnées" (PAR) admises diffèrent suivant les bandes et sous-bandes. Les PAR sont limitées à 10 mW dans la bande 433 MHz. Ensuite la police des ondes peut débarquer ou vos voisins se plaindre ...

Oui c'est bien de rappeler la réglementation. Je pense être dans les clous, c'est juste de l'optimisation. J'ai aussi fait un doublet côté réception. Utile quand on n'a pas de plan de masse pour faire le contrepoids d'une quart d'onde. On peut aussi régler au mieux la fréquence avec le condensateur réglable. Avec une impulsion tout les 3 jours, en période d'arrosage, pas de risque de gêne dans ma cambrousse. :wink:

Bonsoir a tous,
Ca y est, les modules fonctionnement avec virtualWire.
Ca fonctionne.
Je l'ai intégré en l'adaptant a mon programme coté emission pas de soucis.

Mon problème c'est côté récepteur..

Voici une partie du sketch de test

vw_wait_rx();                                             // On attend de recevoir un message

  if (vw_get_message((byte *) &message, &taille_message))      // On copie le message, qu'il soit corrompu ou non
  {
    derniere_reception=millis();
    premier_message=false;
    lcd.clear();
    lcd.print("Mes -");
    lcd.print(message.Controle1); lcd.print("-"); lcd.print(" - ");lcd.print( message.tempo);
    lcd.setCursor(0, 1);

    if (message.Controle1 == 22)    // on decode les messages 
    {
      lcd.print("Lever  :");
    };
     if (message.Controle1 == 127)
    {
      lcd.print("Heure  :");
    };
     if (message.Controle1 == 225)
    {
      lcd.print("Coucher:");
    };
    lcd.print(message. heure) ;
    lcd.print(":");
    lcd.print(message. minutes) ;
    lcd.print(":");
    lcd.print(message.secondes);
    lcd.setCursor(0, 2);
    lcd.print("Bat/PV ");
    lcd.print(message. tension_batt);
    lcd.print(" / ");
    lcd.print(message. tension_pv);
    lcd.setCursor(0, 3);
    lcd.print("code Alarme: ");
    lcd.print(message. alarme);
    delay(1000);
  }

Mon problème c'est que tout est bloqué par vw_wait_rx()

Comment puis-je faire autrement ?
Car j'aimerais pouvoir faire d'autres opérations
Merci

Il y’a la fonction vw_wait_rx_max(unsigned long milliseconds) qui va être bloquante juste pendant le temps passé en paramètre et qui retourne true si un message est en attente

Sinon sans bloquer du tout il y a aussi

vw_have_message()

Sinon regardez le code de Radiohead que j’ai mis au dessus c’est assez trivial aussi, cet appel est non bloquant  if (rf_driver.recv(message, &buflen))