Go Down

Topic: envoie consigne RH-RF95 (Read 702 times) previous topic - next topic

dourlen

Bonjour tout le monde,

j'essaye de me fabriquer un arroseur automatique contrôlable à distance, et la je bute sur la radio. J'ai pas beaucoup de temps pour le réalisé donc je cherche un peu d'aide s'il vous plait.

Je dispose de 2 modules grove LoRa radio rfm95 868mhz.
http://wiki.seeedstudio.com/Grove_LoRa_Radio/

avec cette bibliothèque.
https://github.com/Seeed-Studio/Grove_LoRa_433MHz_and_915MHz_RF

je n'ai pas trouvé et surtout pas compris comment remplacer un message par une consigne, ligne 33 je pense.
   uint8_t data[] = "Hello World!";
   rf95.send(data, sizeof(data));


Code: [Select]

#include <SoftwareSerial.h>
#include <RH_RF95.h>

SoftwareSerial ss(5, 6);
RH_RF95 rf95(ss);


void setup()
{
    Serial.begin(115200);
    Serial.println("RF95 client test.");

    if (!rf95.init())
    {
        Serial.println("init failed");
        while(1);
    }

    // Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on

    // The default transmitter power is 13dBm, using PA_BOOST.
    // If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then
    // you can set transmitter powers from 5 to 23 dBm:
    //rf95.setTxPower(13, false);
    
    rf95.setFrequency(434.0);
}

void loop()
{
    // Envoyer un message à rf95_server
    uint8_t data[] = "Hello World!";
    rf95.send(data, sizeof(data));
  
    rf95.waitPacketSent();
    
    // Maintenant, attendez une réponse
    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);

    if(rf95.waitAvailableTimeout(3000))
    {  
        if(rf95.recv(buf, &len))
        {
            Serial.print("J'ai répondu: ");
            Serial.println((char*)buf);
        }
        else
        {
            Serial.println("recv failed");
        }
    }
    else
    {
        Serial.println("Pas de réponse, est-ce que rf95_server est en cours d'exécution?");
    }
    
    delay(1000);
}

J-M-L

#1
Jun 10, 2018, 07:35 pm Last Edit: Jun 10, 2018, 11:36 pm by J-M-L
je n'ai pas trouvé et surtout pas compris comment remplacer un message par une consigne, ligne 33 je pense.
Code: [Select]
   uint8_t data[] = "Hello World!";
   rf95.send(data, sizeof(data));

la commande rf95.send() va envoyer une série d'octets qui seront reçus de l'autre côté. ici la série d'octets c'est simplement le message Hello World! mais rien ne vous empêche si vous avez une variable qui contient votre valeur de faire
Code: [Select]
unsigned long data = 12345678ul;
rf95.send((uint8_t  *) &data, sizeof(data)); // pointeur sur la mémoire de la variable

ça enverra (codé en binaire) les octets correspondants à votre variable de l'autre côté.

généralement cependant on ne balance pas les valeurs comme cela, on fabrique un petit protocole pour que celui qui écoute puisse détecter chaque message - donc il y a quelque chose qui indique qu'un message commence, puis le message, puis que le message est terminé par exemple.

éventuellement on envoie des messages en ASCII un truc du genre <val= 12345678>, les symboles < et > servent de marqueur de début et fin de message et au milieu vous avez ce que vous voulez transmettre.

l'ASCII étant très "bavard" (besoin de bcp de caractères), quand vous avez une liaison a assez bas débit vaut mieux éviter (sauf si vous n'êtes pas pressé)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

dourlen

merci pour ta réponse, je vais médité là-dessus

Tu veux dire que si j'envoie un message il sera pas forcement réceptionner au complet ?
Le récepteur doit comprendre si le message est complet et envoyer un accuser de réception ?


dourlen

Yo,
Dessolé pour l'absence de retour,
j'ai malheureusement pas réussi a envoyer une variable.  :'(
je suis débordé et quand j'essaye de programmer cette radio je n'arrive a rien.  :smiley-confuse:

code tx
Code: [Select]
void loop()
{
    uint8_t sonde1[] = "X";
    rf95.send(sonde1, sizeof(sonde1));
   
    rf95.waitPacketSent();

code rx:
Code: [Select]
void loop()
{

  if(rf95.available())
  {
    uint8_t sonde1[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(sonde1);
    if(rf95.recv(sonde1, &len))
    { 
        Serial.println((char*)sonde1);       
        X = ((char*)sonde1);
        Serial.println(X);
    }
  }
}

   
Je cherche sur internet mais ca n'a pas l'air de m"aider plus que ça.
J'aurai juste besoin qu'on me guide un peu plus vers la vérité  ;)
Excusez mon ignorance et incompétence

Gweno

Bonjour, ce sujet est-il toujours lu ?

Je suis tombé sur ce sujet par hasard.

j'ai le meme probleme avec les même modules que ceux que tu utilise.

je souhaite également envoyé une variable en Lora mais je n'arrive pas à modifier le programme fourni dans ce sens.

As tu résussis à trouver une solution ?

Merci !

Go Up