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 :

Impossible de faire fonctionner LoRa Emetteur


Sujet :

Arduino

  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 111
    Par défaut Impossible de faire fonctionner LoRa Emetteur
    Bonjour à Tous,

    Mon problème du jour est de faire fonctionner dans mon module Emetteur , mon module LoRa + uPesy
    je précise que ce programme a déjà fonctionné ( il y a 2 ans env ) mais lors d'une légère modification des entrées , je n'arrive plus à le refaire fonctionner
    j'ai regardé l'ensemble des raccordements à mille reprises pour m'assurer de la bonne connectique
    changer de module RA-01

    Librairie carte ESP32 : 3.3.7
    LoRa : 0.8.0

    je poste ici le programme , je serais preneur de quelques conseils car là je ne vois pas où se situe le problème

    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
     
    /*************************************
                 EMETTEUR
    **************************************/
     
     
    /***************************************
              ESP32 WROOM LOW POWER DEVKIT
              uPesy
                       ------------------
                       |1             32| GPIO23   MOSI
                       |2             31|
                       |3             30|
                       |4             29|
                       |5             28|
      DATA    GPIO32   |6             27| GPIO19   MISO
                       |7             26| GPIO18   SCK 
                       |8             25| 
                       |9             24| 
      DIO0     GPIO27  |10            23|
      RST      GPIO14  |11            22|  
                       |12            21| 
      NSS      GPIO13  |13            20|  
                       |14            19|
                       |15            18| 3V3 VCC
                       |16     |----| 17| GND
                       \-------|    |---/
                               |----| 
    *************************************/
    #include <driver/rtc_io.h>
    #include <LoRa.h>
    #include <SPI.h>
     
    // LoRa definition
    #define SCK     18   // GPIO18 -- SX1278's SCK
    #define MISO    19   // GPIO19 -- SX1278's MISO
    #define MOSI    23   // GPIO23 -- SX1278's MOSI
    #define SS      5    // GPIO5  -- SX1278's NSS
    #define RST     14   // GPIO14 -- SX1278's RST
    #define DI0     27   // GPIO27 -- SX1278's IRQ(Interrupt Request)
     
    #define LORA_SS_GPIO_NUM  GPIO_NUM_5
    #define LORA_RST_GPIO_NUM GPIO_NUM_14
     
    #define BAND 433E6  //433E6 for Asia, 866E6 for Europe and 915E6 for North America
     
    const gpio_num_t pinBAL    = GPIO_NUM_32; // RTC GPIO for ESP32: 0, 2, 4, 12-15, 25-27, 32-39;
    const gpio_num_t vbatPin   = GPIO_NUM_35;
     
    //#define BUTTON_PIN_BITMASK (1ull << pinBAL) // 
    const uint64_t  uS_TO_S_FACTOR = 1000000ull; /* Facteur de conversion des microsecondes en secondes */
    const uint64_t  TIME_TO_SLEEP = 300ull; /* Temps de mise en veille de l'ESP32 (en secondes) ici 5Mn */
     
    RTC_DATA_ATTR int bootCount = 0;
    RTC_DATA_ATTR int Vbat = 0;
     
    int vBat;
    #define DELTA 32
     
    //***********************************************
    void loraMessage(const char * message) {
      LoRa.beginPacket();
      LoRa.println(message);
      LoRa.endPacket();
    }
     
     
    void envoiVbatBrut() {
       char str[8];                                  // 6 caractères devraient suffire : V4095 et /0
       int  cmpt = 8;
       int vBatOld = 0 ; 
       do {
          cmpt--;
    	  vBatOld = vBat;
    	  vBat = analogRead(vbatPin); // tension échantillonnée brute
       } while((abs(vBat-vBatOld) > DELTA) && (cmpt > 0));
       Serial.print("Valeur Brute = "); 
       Serial.println(vBat);
       sprintf(str, "V%d", vBat);                    // 'V' suivi de la tension brute 
       loraMessage(str);                             // Envoi du message
    } 
     
     
    //***********************************************
    void action() {
      esp_sleep_wakeup_cause_t source_reveil = esp_sleep_get_wakeup_cause();
      uint64_t GPIO_reason = esp_sleep_get_ext1_wakeup_status();
     
      switch (source_reveil) {
        case ESP_SLEEP_WAKEUP_TIMER :
          Serial.println("Réveil par un timer");
          envoiVbatBrut();
          break;
        default :
          Serial.print("Aucun Réveil causé par le Deep Sleep :");
          Serial.println(source_reveil);
          break;
      }
     
      if (GPIO_reason != 0) {
        const uint64_t gpioWakeUp = __builtin_ctzll(GPIO_reason); // __builtin_ctzll finds the position of the rightmost 1
        switch (gpioWakeUp) {
          case pinBAL: loraMessage("1"); break;
          default : Serial.println("Aucun GPIO connu n'a déclenché le réveil"); break;
        }
      }
    }
     
    //***********************************************
    //   SETUP
    //***********************************************   
     
    void setup() {
      rtc_gpio_hold_dis(LORA_SS_GPIO_NUM);
      rtc_gpio_hold_dis(LORA_RST_GPIO_NUM); 
     
      Serial.begin(115200);
      while (!Serial) yield();
     
      SPI.begin(SCK, MISO, MOSI, SS);
      LoRa.setPins(SS, RST, DI0);
     
      Serial.println("LoRa : Emetteur");
      if (!LoRa.begin(BAND)) { // LoRa_frequency
        Serial.println("Le lancement de LoRa a échoué !");
        while (true) yield();
      }
      Serial.println("init ok");
     
      //Incrémenter le numéro de démarrage et l'imprimer à chaque redémarrage
      ++bootCount;
      Serial.print("Boot number: ");  Serial.println(bootCount);
     
      //action();
     
      // go back to sleep
      //LoRa.end();
      //delay(600);
      LoRa.sleep();
     
      digitalWrite(SS, HIGH); // Normalement la broche est déjà à l'état haut
      rtc_gpio_hold_en(LORA_SS_GPIO_NUM);
     
      digitalWrite(RST, HIGH); // Normalement la broche est déjà à l'état haut
      rtc_gpio_hold_en(LORA_RST_GPIO_NUM);
     
     
     
     // esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);
      esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
     
     
      //Serial.println("Going to sleep");
      Serial.flush(); // esp_deep_sleep_start() va vider le contenu des FIFO UART
      esp_deep_sleep_start();
    }
     
    //***********************************************
    //   LOOP
    //***********************************************
     
    void loop() {}
    Et le résultat au lancement :

    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
    10:42:48.418 -> ets Jul 29 2019 12:21:46
    10:42:48.418 -> 
    10:42:48.418 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    10:42:48.418 -> configsip: 0, SPIWP:0xee
    10:42:48.418 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    10:42:48.418 -> mode:DIO, clock div:2
    10:42:48.418 -> load:0x3fff0030,len:4876
    10:42:48.418 -> ho 0 tail 12 room 4
    10:42:48.418 -> load:0x40078000,len:16600
    10:42:48.418 -> ho 0 tail 12 room 4
    10:42:48.418 -> load:0x40080400,len:3500
    10:42:48.418 -> entry 0x400805b4
    10:42:48.530 -> E (6) R�CLoRa : Emetteur
    10:42:48.530 -> Le lancement de LoRa a échoué !

    EDIT :
    Arduino IDE 1.8.19 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    compilation terminated.
    exit status 1
    driver/rtc_io.h: No such file or directory

    Arduino IDE 2.3.8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    e croquis utilise 297700 octets (22%) de l'espace de stockage de programmes. Le maximum est de 1310720 octets.
    Les variables globales utilisent 22308 octets (6%) de mémoire dynamique, ce qui laisse 305372 octets pour les variables locales. Le maximum est de 327680 octets.

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 794
    Par défaut
    Bonjour,

    Je regarderais du côté de la RTC. L'ancien environnement ne la trouve pas et le nouveau la trouve a priori à un autre emplacement (certainement dans les chemins par défaut). Il n'est pas sûr que la version trouvée soit la même que celle initialement attendue. Et peut être que le problème est là. Il faut au moins y regarder.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 111
    Par défaut
    Bonjour Guesset

    Je regarderais du côté de la RTC. L'ancien environnement ne la trouve pas et le nouveau la trouve a priori à un autre emplacement (certainement dans les chemins par défaut). Il n'est pas sûr que la version trouvée soit la même que celle initialement attendue. Et peut être que le problème est là. Il faut au moins y regarder.
    tu as sans doute raison car selon la version Arduino IDE l'une le trouve et pas l'autre , c'est étrange ...

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 111
    Par défaut
    j'ai repris l'ensemble du cablage
    j'arrive semble-t-il à "lancer" LoRa
    mais le programme s'arrête dès l'envoi d'information

    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
    171
    172
    173
    174
     
    /*************************************
                 EMETTEUR
    **************************************/
     
     
    /***************************************
              ESP32 WROOM LOW POWER DEVKIT
              uPesy
                       ------------------
                       |1             32| GPIO23   MOSI
                       |2             31|
                       |3             30|
                       |4             29|
                       |5             28|
         A     GPIO32  |6             27| GPIO19   MISO
         B     GPI033  |7             26| GPIO18   SCK 
                       |8             25| GPIO5    NSS
                       |9             24| 
      DIO0     GPIO27  |10            23|
      RST      GPIO14  |11            22|  
                       |12            21| 
                       |13            20|  
                       |14            19|
                       |15            18| 3V3 VCC
                       |16     |----| 17| GND
                       \-------|    |---/
                               |----| 
    *************************************/
    #include <driver/rtc_io.h>
    #include <LoRa.h>
    #include <SPI.h>
     
    // LoRa definition
    #define SCK     18   // GPIO18 -- SX1278's SCK
    #define MISO    19   // GPIO19 -- SX1278's MISO
    #define MOSI    23   // GPIO23 -- SX1278's MOSI
    #define SS      5    // GPIO13 -- SX1278's NSS
    #define RST     14   // GPIO14 -- SX1278's RST
    #define DI0     27   // GPIO27 -- SX1278's IRQ(Interrupt Request)
     
    #define LORA_SS_GPIO_NUM  GPIO_NUM_5
    #define LORA_RST_GPIO_NUM GPIO_NUM_14
     
    #define BAND  433E6  //433E6 for Asia, 866E6 for Europe and 915E6 for North America
     
    const gpio_num_t pinA  = GPIO_NUM_32; // RTC GPIO for ESP32: 0, 2, 4, 12-15, 25-27, 32-39;
    const gpio_num_t pinB  = GPIO_NUM_33;
     
    const gpio_num_t vbatPin   = GPIO_NUM_35;
     
    #define BUTTON_PIN_BITMASK (1ull << pinA) | (1ull << pinB) // 
    const uint64_t  uS_TO_S_FACTOR = 1000000ull; /* Facteur de conversion des microsecondes en secondes */
    const uint64_t  TIME_TO_SLEEP = 10ull; /* Temps de mise en veille de l'ESP32 (en secondes) */
     
    RTC_DATA_ATTR int bootCount = 0;
    RTC_DATA_ATTR int Vbat = 0;
     
    int vBat;
    #define DELTA 32
     
    //***********************************************
    void loraMessage(const char * message) {
      LoRa.beginPacket();
      LoRa.println(message);
      LoRa.endPacket();
    }
     
     
    void envoiVbatBrut() {
       char str[8];                                  // 6 caractères devraient suffire : V4095 et /0
       int  cmpt = 8;
       int vBatOld = 0 ; 
       do {
          cmpt--;
    	  vBatOld = vBat;
    	  vBat = analogRead(vbatPin); // tension échantillonnée brute
       } while((abs(vBat-vBatOld) > DELTA) && (cmpt > 0));
       Serial.print("Valeur Brute = "); 
       Serial.println(vBat);
       sprintf(str, "V%d", vBat);                    // 'V' suivi de la tension brute 
       //loraMessage(str);                             // Envoi du message
    } 
     
     
    //***********************************************
    void action() {
      esp_sleep_wakeup_cause_t source_reveil = esp_sleep_get_wakeup_cause();
      uint64_t GPIO_reason = esp_sleep_get_ext1_wakeup_status();
     
      switch (source_reveil) {
        case ESP_SLEEP_WAKEUP_TIMER :
          Serial.println("Réveil par un timer");
          envoiVbatBrut();
          break;
        default :
          Serial.print("Aucun Réveil causé par le Deep Sleep :");
          Serial.println(source_reveil);
          break;
      }
     
      if (GPIO_reason != 0) {
        const uint64_t gpioWakeUp = __builtin_ctzll(GPIO_reason); // __builtin_ctzll finds the position of the rightmost 1
        switch (gpioWakeUp) {
          case pinA: loraMessage("1"); break;
          case pinB: loraMessage("2"); break;
          default : Serial.println("Aucun GPIO connu n'a déclenché le réveil"); break;
        }
      }
    }
     
    //***********************************************
    //   SETUP
    //***********************************************   
     
    void setup() {
      rtc_gpio_hold_dis(LORA_SS_GPIO_NUM);
      rtc_gpio_hold_dis(LORA_RST_GPIO_NUM); 
     
      Serial.begin(115200);
      while (!Serial) yield();
     
      SPI.begin(SCK, MISO, MOSI, SS);
      LoRa.setPins(SS, RST, DI0);
     
      Serial.println("LoRa : Emetteur");
     
      if (!LoRa.begin(433E6)) { // LoRa_frequency
        Serial.println("Le lancement de LoRa a échoué !");
        while (true) yield();
     
      }
     
      Serial.println("init ok");
     
      //Incrémenter le numéro de démarrage et l'imprimer à chaque redémarrage
      ++bootCount;
      Serial.print("Boot number: ");  Serial.println(bootCount);
     
      action();
     
      // go back to sleep
      //LoRa.end();
      //delay(600);
      LoRa.sleep();
     
      digitalWrite(SS, HIGH); // Normalement la broche est déjà à l'état haut
      rtc_gpio_hold_en(LORA_SS_GPIO_NUM);
     
     
      digitalWrite(RST, HIGH); // Normalement la broche est déjà à l'état haut
      rtc_gpio_hold_en(LORA_RST_GPIO_NUM);
     
     
      esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);
      esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
     
      //esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
      rtc_gpio_pullup_en(pinA);   //https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/sleep_modes.html#external-wakeup-ext1
      rtc_gpio_pullup_en(pinB);
      rtc_gpio_pulldown_dis(pinA);
      rtc_gpio_pulldown_dis(pinB);
     
     
      Serial.println("Going to sleep");
      Serial.flush(); // juste pour la tranquillité d'esprit, car esp_deep_sleep_start() va vider le contenu des FIFO UART
      esp_deep_sleep_start();
    }
     
    //***********************************************
    //   LOOP
    //***********************************************
     
    void loop() {}

    Voici sur la console :

    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
     
    08:45:41.547 -> ets Jun  8 2016 00:22:57
    08:45:41.547 -> 
    08:45:41.547 -> rst:0x5 (DEEPSLEEP_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
    08:45:41.547 -> configsip: 0, SPIWP:0xee
    08:45:41.547 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    08:45:41.547 -> mode:DIO, clock div:1
    08:45:41.547 -> load:0x3fff0030,len:4980
    08:45:41.547 -> load:0x40078000,len:16612
    08:45:41.547 -> load:0x40080400,len:3480
    08:45:41.547 -> entry 0x400805b4
    08:45:41.584 -> E (19) LoRa : Emetteur
    08:45:41.627 -> init ok
    08:45:41.627 -> Boot number: 58
    08:45:41.627 -> Réveil par un timer
    08:45:41.627 -> Valeur Brute = 4095
    08:45:41.627 -> E (42) RTCIO: rtc_gpio_hold_en(203): RTCIO number error
    08:45:41.627 -> Going to sleep
    08:45:47.915 -> ets Jun  8 2016 00:22:57
    08:45:47.915 -> 
    08:45:47.915 -> rst:0x5 (DEEPSLEEP_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
    08:45:47.915 -> configsip: 0, SPIWP:0xee
    08:45:47.915 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    08:45:47.915 -> mode:DIO, clock div:1
    08:45:47.915 -> load:0x3fff0030,len:4980
    08:45:47.915 -> load:0x40078000,len:16612
    08:45:47.915 -> load:0x40080400,len:3480
    08:45:47.915 -> entry 0x400805b4
    08:45:47.957 -> E (19) LoRa : Emetteur
    08:45:47.957 -> init ok
    08:45:47.957 -> Boot number: 59
    08:45:47.957 -> Aucun Réveil causé par le Deep Sleep :3
    j'ai une erreur mais je ne sais pas ce qu'elle signifie
    E (42) RTCIO: rtc_gpio_hold_en(203): RTCIO number error

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 111
    Par défaut
    j'ai fini par conclure que mon module était HS
    j'ai permuté de module mais je suis toujours très ennuyé
    la consommation en Deep-Sleep que j'ai mesurée est égale à :9,1 mA
    or je ne vois pas dans ce programme la raison de cette consommation qui devrait normalement se situer vers 100 µA max
    je précise que la mesure s'effectue avec module seul sans périphérique
    Si vous avez quelques idées ....

    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
     
    /*************************************
                 EMETTEUR
    **************************************/
     
    #include <driver/rtc_io.h>
    #include <LoRa.h>
    #include <SPI.h>
     
     
    // LoRa definition
    #define SCK     5    // GPIO5  -- SX1278's SCK
    #define MISO    19   // GPIO19 -- SX1278's MISnO
    #define MOSI    27   // GPIO27 -- SX1278's MOSI
    #define SS      18   // GPIO18 -- SX1278's CS
    #define RST     14   // GPIO14 -- SX1278's RESET
    #define DI0     26   // GPIO26 -- SX1278's IRQ(Interrupt Request)
     
    #define LORA_SS_GPIO_NUM  GPIO_NUM_5
    #define LORA_RST_GPIO_NUM GPIO_NUM_14
     
    const gpio_num_t pinA  = GPIO_NUM_32; // RTC GPIO for ESP32: 0, 2, 4, 12-15, 25-27, 32-39;
    const gpio_num_t pinB  = GPIO_NUM_33;
     
    const gpio_num_t vbatPin   = GPIO_NUM_35;
     
    #define BUTTON_PIN_BITMASK (1ull << pinA) | (1ull << pinB) // 
    const uint64_t  uS_TO_S_FACTOR = 1000000ull; /* Facteur de conversion des microsecondes en secondes */
    const uint64_t  TIME_TO_SLEEP = 30ull; /* Temps de mise en veille de l'ESP32 (en secondes) */
     
    RTC_DATA_ATTR int bootCount = 0;
    RTC_DATA_ATTR int Vbat = 0;
     
    int vBat;
    #define DELTA 32
     
    //***********************************************
    void loraMessage(const char * message) {
      LoRa.beginPacket();
      LoRa.println(message);
      LoRa.endPacket();
    }
     
     
    void envoiVbatBrut() {
       char str[8];                                  // 6 caractères devraient suffire : V4095 et /0
       int  cmpt = 8;
       int vBatOld = 0 ; 
       /*
       do {
          cmpt--;
    	  vBatOld = vBat;
    	  vBat = analogRead(vbatPin); // tension échantillonnée brute
       } while((abs(vBat-vBatOld) > DELTA) && (cmpt > 0));
       */
       vBat = 3234;
       Serial.print("Valeur Brute = "); 
       Serial.println(vBat);
       sprintf(str, "V%d", vBat);  
       loraMessage(str);     // 'V' suivi de la tension brute // Envoi du message
     
    } 
     
     
    //***********************************************
    void action() {
      esp_sleep_wakeup_cause_t source_reveil = esp_sleep_get_wakeup_cause();
      uint64_t GPIO_reason = esp_sleep_get_ext1_wakeup_status();
     
      switch (source_reveil) {
        case ESP_SLEEP_WAKEUP_TIMER :
          Serial.println("Réveil par un timer");
          envoiVbatBrut();
          break;
        default :
          Serial.print("Réveil par GPIO :");
          Serial.println(source_reveil);
          break;
      }
     
      if (GPIO_reason != 0) {
        const uint64_t gpioWakeUp = __builtin_ctzll(GPIO_reason); // __builtin_ctzll finds the position of the rightmost 1
        switch (gpioWakeUp) {
          case pinA: loraMessage("1");Serial.println(" GPIO-32 a déclenché le réveil"); break;
          case pinB: loraMessage("2");Serial.println(" GPIO-33 a déclenché le réveil"); break;
          default : /*Serial.println("Aucun GPIO connu n'a déclenché le réveil");*/ break;
        }
      }
    }
     
    //***********************************************
    //   SETUP
    //***********************************************   
     
    void setup() {
      rtc_gpio_hold_dis(LORA_SS_GPIO_NUM);
      rtc_gpio_hold_dis(LORA_RST_GPIO_NUM); 
     
      Serial.begin(115200);
      while (!Serial) yield();
     
      SPI.begin(SCK, MISO, MOSI, SS);
      LoRa.setPins(SS, RST, DI0);
     
      Serial.println("LoRa : Emetteur");
     
      if (!LoRa.begin(433E6)) { // LoRa_frequency
        Serial.println("Le lancement de LoRa a échoué !");
        delay(200);
        while (true) yield();
     
      }
     
      Serial.println("init ok");
      //Incrémenter le numéro de démarrage et l'imprimer à chaque redémarrage
      ++bootCount;
      Serial.print("Boot number: ");  Serial.println(bootCount);
     
      action();
     
      // go back to sleep
      LoRa.end();
      delay(600);
      LoRa.sleep();
     
      digitalWrite(SS, HIGH); // Normalement la broche est déjà à l'état haut
      rtc_gpio_hold_en(LORA_SS_GPIO_NUM);
      digitalWrite(RST, HIGH); // Normalement la broche est déjà à l'état haut
      rtc_gpio_hold_en(LORA_RST_GPIO_NUM);
     
     
      esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);
      esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
     
     //esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
     //rtc_gpio_pullup_en(pinA);   //https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/sleep_modes.html#external-wakeup-ext1
     //rtc_gpio_pullup_en(pinB);
     //rtc_gpio_pulldown_dis(pinA);
     //rtc_gpio_pulldown_dis(pinB);
     
      Serial.println("Going to sleep");
      Serial.flush(); // juste pour la tranquillité d'esprit, car esp_deep_sleep_start() va vider le contenu des FIFO UART
      esp_deep_sleep_start();
    }
     
    //***********************************************
    //   LOOP
    //***********************************************
     
    void loop() {}
    Images attachées Images attachées  

Discussions similaires

  1. Fonction session_start : impossible à faire fonctionner
    Par lesouriciergris dans le forum Langage
    Réponses: 10
    Dernier message: 05/04/2014, 21h35
  2. Réponses: 5
    Dernier message: 05/12/2006, 23h57
  3. impossible de faire fonctionner le gridlayout
    Par oceane751 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 12/06/2006, 10h42
  4. Réponses: 5
    Dernier message: 22/03/2006, 10h39
  5. impossible de faire fonctionner phppgadmin et pgdmin3
    Par le_ben dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 09/12/2004, 14h27

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