IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

NRF24L01 : Pas de message reçu


Sujet :

Arduino

  1. #41
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    j'ai procédé au test suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void loop() {
      //if (!radio.write(&message,sizeof(t_message)))
      //  Serial.println(F("erreur d'envoi"));
      //else
        radio.write(&message,sizeof(t_message));
        Serial.println(message.payload);
     
      delay(1000);
    }
    naturellement je perds le traitement de la condition
    mais j'ai lancé le récepteur et là miracle !
    ( validé en coupant l'émetteur)
    bref je pense qu'il s'agit du test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!radio.write(&message,sizeof(t_message)))
    qui ne semble pas fonctionner ....
    Images attachées Images attachées  

  2. #42
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    vous avez quoi comme type t_message?

  3. #43
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    vous avez quoi comme type t_message?
    A l'émission ?
    ceci
    Images attachées Images attachées  

  4. #44
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    non, je voulais dire dans le code de la structure

    vous utilisez ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct __attribute__ ((packed)) t_message {
      char payload[32];
    } message;
    essayez de mettre 20 au lieu de 32 et testez si le if() fonctionne

  5. #45
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    désolé pour la réponse tardive mais j'ai du renoncer à faire fonctionner mon croquis initial

    je me suis rabattu sur celui-ci conforme aux conseils de Jay M à savoir un traitement en package plus facile à manipuler
    et qui semble fonctionner correctement
    EMETTEUR
    Arduino UNO
    NRF24L01
    DHT22

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
     
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <RF24_config.h>
    #include <DHT.h>
    #include <Wire.h>
    #include <SPI.h>
    #include <Adafruit_Sensor.h>
    #include "LowPower.h"
     
    // DHT22
    #define DHTPIN 3     // DHT22 PIN
    #define DHTTYPE DHT22   // DHT 22
    DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for 16mhz
     
    //DHT22 Variables
    int chk;
    float dht22_hum;  //Stores humidity value
    float dht22_temp; //Stores temperature value
     
     
     
    //VBat
    const float VccMin   = 3.2;           // Niveau minimum attendu de Vcc, en Volts.
    const float VccMax   = 4.2;           // Niveau maximum attendu de Vcc, en Volts.
    const float VccCorrection = 0.99;  // Vcc mesuré par le multimètre divisé par le Vcc rapporté
    const float VccEchelle = VccMax - VccMin;  // Vcc mesuré par le multimètre divisé par le Vcc rapporté
    const byte BROCHE_CAPTEUR_VIN = A0;
    const float COEFF_PONT_DIVISEUR_VIN = 4.0;
    float bat_value;
     
     
     
    //NRF24L01
    const int pinCE = 8;
    const int pinCSN = 7;
    RF24 radio(pinCE, pinCSN);
    byte addresses[][6] = {"0"};
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    struct package
    {
      float temperature ;
      float humidity;
      float bat;
    };
    typedef struct package Package;
    Package data;
     
    /// SETUP ////////////////////////////////////
    void setup()
    {
      Serial.begin(9600);
      radio.begin();
      radio.setChannel(115);
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate( RF24_250KBPS ) ;
      radio.openWritingPipe( addresses[0]);
      delay(1000);
      dht.begin();
     
    }
     
    /// LOOP /////////////////////////////////////
    void loop()
    {
      dht22_hum = dht.readHumidity();
      dht22_temp = dht.readTemperature();
      Serial.print("--- Veranda ---\n");
      Serial.print("Temperature = ");
      Serial.print(dht22_temp);
      Serial.println(" ºC");
      Serial.print("Humidity = ");
      Serial.print(dht22_hum);
      Serial.println(" %");
      Serial.print("Bat = ");
      Serial.print(bat_value);
      Serial.println(" %");
      Serial.print("--------------------------------\n\n");
      delay(1000);
      readSensor();
      do_vcc();
      radio.write(&data, sizeof(data));
     
      ////// avant de dormir
      byte etatSPI = SPCR;
      SPCR = 0;
      digitalWrite(13,LOW);
     
      ////////////////////////////////////////////////
      for (int i = 0; i < 1 ; i++) { // 56s de sommeil (7 * 8s )// 
         LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
      } 
      ////  on remet l'état
      SPCR = etatSPI;
     
    }
     
    /** Lecture DHT22 *********************/ 
    void readSensor()
    {
      data.humidity = dht.readHumidity()+200;
      data.temperature = dht.readTemperature()+200;
      data.bat = bat_value+200;
    }
     
    //***********************************************************
    void do_vcc()
    {
        /* Mesure la tension en RAW et la référence interne à 1.1 volts */
        unsigned int raw_vin = analogRead(BROCHE_CAPTEUR_VIN)*VccCorrection;
        unsigned int raw_ref = analogReadReference();
         /* Calcul de la tension réel avec un produit en croix */
        float v = ((raw_vin * 1.1) / raw_ref) * COEFF_PONT_DIVISEUR_VIN;
        Serial.print("VCC = ");
        Serial.print(v);
        Serial.println(" Volts");
     
        float p =((v-VccMin)/(VccEchelle))*100 ;
        bat_value = round(p);
        if (bat_value>100){  // max
          bat_value = 100 ;
        } else if ( bat_value<0) {
          bat_value = 0 ;  
        }
     
        delay(1000);
    }
     
     /** Mesure la référence interne à 1.1 volts */
    unsigned int analogReadReference(void) {
     
      /* Elimine toutes charges résiduelles */
    #if defined(__AVR_ATmega328P__)
      ADMUX = 0x4F;
    #elif defined(__AVR_ATmega2560__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5F;
    #elif defined(__AVR_ATmega32U4__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5F;
    #endif
      delayMicroseconds(5);
     
      /* Sélectionne la référence interne à 1.1 volts comme point de mesure, avec comme limite haute VCC */
    #if defined(__AVR_ATmega328P__)
      ADMUX = 0x4E;
    #elif defined(__AVR_ATmega2560__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5E;
    #elif defined(__AVR_ATmega32U4__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5E;
    #endif
      delayMicroseconds(200);
     
      /* Active le convertisseur analogique -> numérique */
      ADCSRA |= (1 << ADEN);
     
      /* Lance une conversion analogique -> numérique */
      ADCSRA |= (1 << ADSC);
     
      /* Attend la fin de la conversion */
      while(ADCSRA & (1 << ADSC));
     
      /* Récupère le résultat de la conversion */
      return ADCL | (ADCH << 8);
    }

    RECEPTEUR
    WEMOS
    NRF24L01

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <RF24_config.h>
    #include <SPI.h>
     
     
    // sensors
    float previousRemoteHumidity = 0;
    float previousRemoteTemperature = 0;
    float previousRemotebat = 0;
     
    float remoteHumidity = 0.0;
    float remoteTemperature = 0.0;
    float remoteBat = 0.0;
     
    // trans package
    struct package
    {
      float temperature;
      float humidity;
      float bat;
    };
     
    // radio
    RF24 radio(4, 15);
    byte addresses[][6] = {"0"};
    typedef struct package Package;
    Package data;
     
    void setup(void) {
      // serial
      Serial.begin(115200);
     
      // radio
      startWirelessCommunication();
     
    }
     
    void loop(void) {
      checkForWirelessData();
    }
     
    void startWirelessCommunication()
    {
      radio.begin();
      radio.setChannel(115);
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate( RF24_250KBPS ) ;
      radio.openReadingPipe(1, addresses[0]);
      radio.startListening();
      delay(100);
    }
     
    void checkForWirelessData()
    {
      if ( radio.available())
      {
        while (radio.available())
        {
           radio.read( &data, sizeof(data) );
        }
        Serial.print("\nPackage:");
        Serial.print("\n");
        Serial.println(data.temperature);
        Serial.println(data.humidity);
        Serial.println(data.bat);
      }
    }
    La prochaine étape serait de pouvoir mettre un AtTiny 85 en lieu et place du UNO
    est-ce possible ?
    et comment faire pour lire les valeurs de "data" dans
    l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    radio.read( &data, sizeof(data) );
    Images attachées Images attachées   

  6. #46
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    La prochaine étape serait de pouvoir mettre un AtTiny 85 en lieu et place du UNO
    il y a des trucs sur internet = https://www.hackster.io/arjun/nrf24l...-3-pins-74a1f2

    et comment faire pour lire les valeurs de "data" dans l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    radio.read( &data, sizeof(data) );
    vous avez défini
    donc c'est une structure de type Package qui est défini par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct package
    {
      float temperature;
      float humidity;
      float bat;
    };
    donc vous accédez aux champs simplement par data.temperature, data. humidity et data.bat


    PS/ dans mon code je recommandais de mettre __attribute__ ((packed)) sur la définition des structures pour s'assurer qu'il n'y ait pas de modification par le compilateur

  7. #47
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    merci Jay M


    donc vous accédez aux champs simplement par data.temperature, data. humidity et data.bat
    pardon je me suis mal exprimé
    en fait , je souhaite lire la valeur brute de "data" en ASCII pour pouvoir identifier les valeurs
    pourquoi sachant que les possèdent séparément comme
    data.température etc , parce qu'actuellement j'ai mon ancien boitier qui émet des valeurs identiques sous la forme => 25UHT;200;200;200 ( voir pb évoqué ci-dessus)
    et je pensais initialement "récupérer" cette chaîne de caractères en lisant la valeur de "data" et ainsi ne pas refaire le boitier , c'est purement pratique


    merci pour le lien , pour l'instant j'essaie de faire fonctionner le montage sous MiniPro mais il est gourmand au repos env 40 mA
    je voudrais le combiner avec un TPL5110 pour économiser la batterie
    puis je vais voir avec un ATTiny 85 mais j'ai besoin d'une entrée TOR (DHT22) et ANA(Vbat)

  8. #48
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    parce qu'actuellement j'ai mon ancien boitier qui émet des valeurs identiques sous la forme => 25UHT;200;200;200 ( voir pb évoqué ci-dessus)
    et je pensais initialement "récupérer" cette chaîne de caractères en lisant la valeur de "data" et ainsi ne pas refaire le boitier , c'est purement pratique
    data est une structure binaire, vous avez la représentation des 3 floats (12 octets), vous n'avez pas une représentation textuelle mais vous pouvez la créer

    si vous voulez des valeurs entières:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char messageTexte [50]; // assurez vous que la taille soit assez grande
    snprintf(messageTexte, sizeof messageTexte, "25UHT;%d;%d;%d", (int) data.temperature, (int) data. humidity, (int) data.bat);
    si vous voulez les valeurs en nombre à virgules, sur Uno sprintf ne sait pas le gérer, il faut utiliser d'autres fonctions mais sur ESP ça fonctionne

  9. #49
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    j'ai tenté de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void checkForWirelessData()
    {
      if ( radio.available())
      {
        while (radio.available())
        {
           radio.read( &data, sizeof(data) );
           char message [50]; // assurez vous que la taille soit assez grande
           sprintf(message, sizeof(message), "25UHT;%d;%d;%d", (int) data.temperature, (int) data. humidity, (int) data.bat);
        }
        Serial.print("\nPackage:");
        Serial.print("\n");
        Serial.println(data.temperature);
        Serial.println(data.humidity);
        Serial.println(data.bat);
      }
    }
    mais la reponse a été très rapide ....
    mais je n'ai du comprendre l'astuce

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ....\RECEPTEUR_V2.ino: In function 'void checkForWirelessData()':
    RECEPTEUR_V2:67:25: error: invalid conversion from 'unsigned int' to 'const char*' [-fpermissive]
       67 |        sprintf(message, sizeof(message), "25UHT;%d;%d;%d", (int) data.temperature, (int) data. humidity, (int) data.bat);
          |                         ^~~~~~~~~~~~~~~
          |                         |
          |                         unsigned int
    In file included from C:\Users\Utilisateur\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Arduino.h:32,
                     from sketch\RECEPTEUR_V2.ino.cpp:1:
    c:\users\utilisateur\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\stdio.h:244:32: note:   initializing argument 2 of 'int sprintf(char*, const char*, ...)'
      244 | int sprintf (char *__restrict, const char *__restrict, ...)
          |                                ^~~~~~~~~~~~
    exit status 1
    invalid conversion from 'unsigned int' to 'const char*' [-fpermissive]

  10. #50
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    vous avez mis sprintf() au lieu de snprintf()



    Vous ne vous servez pas de la chaîne (message) que vous créez dans la boucle de réception ?
    while (radio.available())
    {
    radio.read( &data, sizeof(data) );
    char message [50]; // assurez vous que la taille soit assez grande
    sprintf(message, sizeof(message), "25UHT;%d;%d;%d", (int) data.temperature, (int) data. humidity, (int) data.bat);
    }
    comme la variable est locale au while, vous ne pouvez pas l'utiliser en dehors

  11. #51
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    j'ai déclaré çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    byte addresses[][6] = {"0"};
    typedef struct package Package;
    Package data;
    donc j'ai mis çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void checkForWirelessData()
    {
      if ( radio.available())
      {
        while (radio.available())
        {
          radio.read( &data, sizeof(data) );
        }
        char Package [50]; // assurez vous que la taille soit assez grande
        snprintf(Package, sizeof(Package), "25UHT;%d;%d;%d", (int) data.temperature, (int) data. humidity, (int) data.bat);
        Serial.print("\nPackage:");
        Serial.print("\n");
        Serial.println(data.temperature);
        Serial.println(data.humidity);
        Serial.println(data.bat);
      }
    }
    mais le "Package" reste vide
    Images attachées Images attachées  

  12. #52
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    Citation Envoyé par cobra38 Voir le message
    j'ai déclaré çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    byte addresses[][6] = {"0"};
    typedef struct package Package;
    Package data;
    je ne comprends ni pourquoi vous avez ce format pour les adresses ni la définition de la struct ???

    pourquoi pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char address[6] = "0"; // pourquoi 0 ?
     
    struct __attribute__((packed)) Package // Package et le nom du type
    {
      float temperature;
      float humidity;
      float bat;
    };
     
    Package unPackage; // ici on crée une instance de la structure

  13. #53
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    j'ai modifié comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <RF24_config.h>
    #include <SPI.h>
     
    /*
    // trans package
    struct package
    {
      float temperature;
      float humidity;
      float bat;
    };
    */
     
    // radio
    RF24 radio(4, 15);
    byte addresses[][6] = {"0"};
    //typedef struct package Package;
    //Package data;
     
    struct __attribute__((packed)) package // Package et le nom du type
    {
      float temperature;
      float humidity;
      float bat;
    };
     
    package unpackage; // ici on crée une instance de la structure
     
    /*** SETUP ***********************/
    void setup(void) {
      // serial
      Serial.begin(115200);
      // radio
      startWirelessCommunication();
    }
     
    /*** LOOP **************************/
    void loop(void) {
      checkForWirelessData();
    }
     
    /***********************************/
    void startWirelessCommunication()
    {
      radio.begin();
      radio.setChannel(115);
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate( RF24_250KBPS ) ;
      radio.openReadingPipe(1, addresses[0]);
      radio.startListening();
      delay(100);
    }
     
    /**********************************/
    void checkForWirelessData()
    {
      if ( radio.available())
      {
        while (radio.available())
        {
          radio.read(&unpackage, sizeof( unpackage) );
        }
        char message [50]; // assurez vous que la taille soit assez grande
        snprintf( message , sizeof(message), "25UHT;%d;%d;%d", (int)  unpackage.temperature, (int)  unpackage. humidity, (int) unpackage.bat);
     
        Serial.print("\nMessage:");
        Serial.print(message);
        Serial.print("\nPackage:");
        Serial.print("\n");
        /*
        Serial.println(data.temperature);
        Serial.println(data.humidity);
        Serial.println(data.bat);
        */
        Serial.println( unpackage.temperature);
        Serial.println( unpackage.humidity);
        Serial.println( unpackage.bat);
      }
    }
    j'obtiens ceci :
    Images attachées Images attachées  

  14. #54
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    ça a l'air de fonctionner non ?

  15. #55
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    ça a l'air de fonctionner non ?
    Oui effectivement
    il ne reste plus qu'à utiliser les datas sous la forme :
    unpackage.temperature = int temp_v
    par ex

    il me restera à tester :
    - le mode sommeil du Pro Mini ( Emetteur) , sa consommation en base (hors émission) est de 8mA actuellement beaucoup donc trop élevée
    ( des conseils me seraient utiles sur ce point )
    - la synchronisation entre le Récepteur et l'Emetteur à savoir comment gérer l'affichage du récepteur sachant l'émetteur envoie ses données toutes les 1/2 heures

    en tout cas encore merci pour votre patience ...

  16. #56
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    Bonjour à tous

    j'ai complété mon montage de l’Émetteur en y associant pour des raisons de consommation
    un TPL5110 qui est une minuterie déclenchée par l'entrée A1 de l'Arduino Pro mini
    celle-ci est réglée pour un périodicité de 30s env (en phase de test )

    j'ai pu constater que le Récepteur lui indique les "datas" reçus de façon aléatoire ou reste muet ( il est placé à 2 m)
    malgré que je constate bien le fonctionnement de l'Emetteur

    ma question est la suivante :
    faut-il un laps de temps minimal pour permettre l'envoi correct des datas ?

    Pour mémoire je remets la dernière version de l'Emetteur pour avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
     
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <RF24_config.h>
    #include <DHT.h>
    #include <Wire.h>
    #include <SPI.h>
    #include <Adafruit_Sensor.h>
    #include "LowPower.h"
     
    // DHT22
    #define DHTPIN 3     // DHT22 PIN
    #define DHTTYPE DHT22   // DHT 22
    DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for 16mhz
     
    //DHT22 Variables
    int chk;
    float dht22_hum;  //Stores humidity value
    float dht22_temp; //Stores temperature value
     
    //TP5110
    #define DONEPIN A1
     
    //VBat
    const float VccMin   = 3.2;           // Niveau minimum attendu de Vcc, en Volts.
    const float VccMax   = 4.2;           // Niveau maximum attendu de Vcc, en Volts.
    const float VccCorrection = 1;  // Vcc mesuré par le multimètre divisé par le Vcc rapporté
    const float VccEchelle = VccMax - VccMin;  // Vcc mesuré par le multimètre divisé par le Vcc rapporté
    const byte BROCHE_CAPTEUR_VIN = A0;
    const float COEFF_PONT_DIVISEUR_VIN = 4.0;
    float bat_value;
     
    //NRF24L01
    const int pinCE = 8;
    const int pinCSN = 7;
    RF24 radio(pinCE, pinCSN);
    byte addresses[][6] = {"0"};
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    struct package
    {
      float temperature ;
      float humidity;
      float bat;
    };
    typedef struct package Package;
    Package data;
     
    /// SETUP ////////////////////////////////////
    void setup()
    {
      pinMode(DONEPIN, OUTPUT);
      digitalWrite(DONEPIN, LOW);
      Serial.begin(115200);
      radio.begin();
      radio.setChannel(115);
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate( RF24_250KBPS ) ;
      radio.openWritingPipe( addresses[0]);
      delay(1000);
      dht.begin();
     
    }
     
    /// LOOP /////////////////////////////////////
    void loop()
    {
      do_vcc();
      dht22_hum = dht.readHumidity();
      dht22_temp = dht.readTemperature();
      /*
      Serial.print("--- Veranda ---\n");
      Serial.print("Temperature = ");
      Serial.print(dht22_temp);
      Serial.println(" ºC");
      Serial.print("Humidity = ");
      Serial.print(dht22_hum);
      Serial.println(" %");
      Serial.print("Bat = ");
      Serial.print(bat_value);
      Serial.println(" %");
      Serial.print("--------------------------------\n\n");
      delay(1000);
      */
      readSensor();
      radio.write(&data, sizeof(data));
      done();
     
    }
     
    void done()
    {
      // bascule FAIT pour que TPL sache qu'il faut couper l'électricité !
      while (1) {
       digitalWrite(DONEPIN, HIGH);
       delay(1);
       digitalWrite(DONEPIN, LOW);
       delay(1);
      }
    }
     
    /** Lecture DHT22 *********************/ 
    void readSensor()
    {
      data.humidity = round(dht.readHumidity())+200;
      data.temperature = round(dht.readTemperature())+200;
      data.bat = round(bat_value)+200;
    }
     
    //***********************************************************
    void do_vcc()
    {
        /* Mesure la tension en RAW et la référence interne à 1.1 volts */
        unsigned int raw_vin = analogRead(BROCHE_CAPTEUR_VIN)*VccCorrection;
        unsigned int raw_ref = analogReadReference();
         /* Calcul de la tension réel avec un produit en croix */
        float v = ((raw_vin * 1.1) / raw_ref) * COEFF_PONT_DIVISEUR_VIN;
        Serial.print("VCC = ");
        Serial.print(v);
        Serial.println(" Volts");
     
        float p =((v-VccMin)/(VccEchelle))*100 ;
        if (p>100){  // max
          p = 100;
        } else if ( p<0) {
          p = 0;  
        }
        bat_value = p;
        //bat_value = 50.00; // valeur de test
        delay(1000);
    }
     
     /** Mesure la référence interne à 1.1 volts */
    unsigned int analogReadReference(void) {
     
      /* Elimine toutes charges résiduelles */
    #if defined(__AVR_ATmega328P__)
      ADMUX = 0x4F;
    #elif defined(__AVR_ATmega2560__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5F;
    #elif defined(__AVR_ATmega32U4__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5F;
    #endif
      delayMicroseconds(5);
     
      /* Sélectionne la référence interne à 1.1 volts comme point de mesure, avec comme limite haute VCC */
    #if defined(__AVR_ATmega328P__)
      ADMUX = 0x4E;
    #elif defined(__AVR_ATmega2560__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5E;
    #elif defined(__AVR_ATmega32U4__)
      ADCSRB &= ~(1 << MUX5);
      ADMUX = 0x5E;
    #endif
      delayMicroseconds(200);
     
      /* Active le convertisseur analogique -> numérique */
      ADCSRA |= (1 << ADEN);
     
      /* Lance une conversion analogique -> numérique */
      ADCSRA |= (1 << ADSC);
     
      /* Attend la fin de la conversion */
      while(ADCSRA & (1 << ADSC));
     
      /* Récupère le résultat de la conversion */
      return ADCL | (ADCH << 8);
    }
    Encore merci

  17. #57
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    si vous enlevez le TPL5110 est-ce que la communication est stable ?

  18. #58
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    si vous enlevez le TPL5110 est-ce que la communication est stable ?
    Oui , je n'ai pas de problème particulier

    mais avec le TPL5110 , il y a une durée de mise sous tension, je suppose , et donc un temps minimal avant d'envoyer les datas ?

  19. #59
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 907
    Par défaut
    oui peut-être attendre que tout soit bien alimenté

  20. #60
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    965
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 965
    Par défaut
    Bonjour Jay M


    pour éviter les défauts de connexion , j'ai fait un "PCB" sur une carte proto pour l'émetteur
    la périodicité d'envoi des datas est de :
    1 envoi toutes les minutes avec une durée d'env 5s

    le récepteur m'indique quelques "trous" et une perte d'infos température et humidité que je ne m'explique pas
    comme le montre l'image ci-dessous mais globalement çà s'améliore...
    Images attachées Images attachées  

Discussions similaires

  1. [FTP] Warning avec ftp_get, mais pas de message d'erreur
    Par NomUtilisateurDejaPris dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2006, 18h12
  2. Réponses: 10
    Dernier message: 13/02/2006, 08h30
  3. [EJB] [JBoss] EJB ne se déploie pas - pas de message d'erreur
    Par Sapience dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 10/01/2006, 16h41
  4. [Connexion] pas de message d'erreur
    Par kase74 dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 22/04/2005, 10h35
  5. déclencheurs qui ne se lancent pas - pb messages
    Par marie253 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/08/2004, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo