l'IDE ne charge pas le .h qui contient les définitions des GPIO

Je bricole un petit peu sur Arduino et depuis quelques jours j'apprends à utiliser des ESP32. J'utilise les exemples que l'on trouve dans l'IDE et des infos glanées sur le net.

En fait j'essaie (sans succès pour le moment) d'avoir une petite application qui configurerait l'esp32 pour aller en sommeil profond après une initialisation.

Elle devrait se réveiller une fois par jour, vérifier l'état de la batterie d'alimentation, si elle est faible, m'envoyer un e-mail (ça ça fonctionne bien)

Elle devrait aussi se réveiller lorsqu'une touche est pressée sur un clavier 4x3... sans perdre quelle touche vient d'être pressée et c'est là où je bute un peu... J'arrive a faire fonctionner cette partie sur un UNO avec la librairie "keypad" mais ça ne fonctionne pas sur l'ESP32.

J'ai donc, encore une fois regardé les exemples et configuré sept PINS de l'ESP32 qui peuvent réveiller l'ESP32... ça, ça fonctionne bien... Un test pour voir si il détecte deux pins en même temps, et ça fonctionne aussi.

Pour faire du nettoyage de code avant d'aller plus loin, je voulais utiliser les définitions que l'on trouve dans GPIO.h, qui est inclus dans drivers/rtc_io.h qui sont par exemple GPIO_SEL_13... mais lors de la compilation l'IDE me dit que ces variables ne sont pas définies et je ne comprends pas, elles devraient normalement être inclues....

Quelqu'un aurait-il une idée sur pourquoi ça ne passe pas ??

merci d'avance
Charles

Faites comme dans leur exemple, ajoutez un include

Mais il est ajouté bien sûr... j'ai même tenté de rajouter GPIO.h directement mais ça ne change rien.... Y-a-t'il un moyen d'avoir un "debug" là dessus durant la compilation ?

L'exemple pour le deep sleep mode fonctionne nickel, je voulais juste faire plus "propre" dans mon code car j'ai ajouté pas mal de lignes de code, je perds la mémoire et je rajoute beaucoup de commentaires pour le cas ou je devrais y retourner plus tard.

J'ai trouvé sur le web qu'il y a des définitions GPIO_SEL_xx qui sont équivalentes à BUTTON_PIN_BITMASK(GPIO_NUM_xx) je ne comprends juste pourquoi je ne peux pas utiliser ces définitions là (elles sont dans gpio.h qui est sensé être chargé par rtc_io.h

J'utilise l'IDE 2.3.3 sur Mac Intel, Sonoma, 64Go de RAM, 2To de ssd... ça devrait être bon, c'est la première fois que j'ai ce genre de souci

Voici le début de rtc_io.h, gpio.h est bien inclus

/*

* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD

*

* SPDX-License-Identifier: Apache-2.0

*/

#pragma once

#include <stdint.h>

#include <stdbool.h>

#include "esp_err.h"

#include "soc/soc_caps.h"

#include "hal/rtc_io_types.h"

#include "driver/gpio.h"

#ifdef __cplusplus

extern "C" {

#endif

/**

* @brief Determine if the specified GPIO is a valid RTC GPIO.

*

* @param gpio_num GPIO number

* @return true if GPIO is valid for RTC GPIO use. false otherwise.

*/

bool rtc_gpio_is_valid_gpio(gpio_num_t gpio_num);

#define RTC_GPIO_IS_VALID_GPIO(gpio_num) rtc_gpio_is_valid_gpio(gpio_num)

#if SOC_RTCIO_PIN_COUNT > 0

je n'ai jamais eu à utiliser directement ce driver/rtc_io.h ni "driver/gpio.h"

si vous faites un code tout simple de 3 lignes avec l'include de gpio.h et des Serial print pour les variables / define qui vous intéresse, est-ce que ça compile et fonctionne ?

comme ce sont des define, il faudrait vérifier si un autre include ne fait pas des undef sur ces noms...

Si tu actives les comptes-rendus détaillés, tu verras quels fichiers sont inclus. L'analyse est un peu laborieuse mais tu verras ce qu'il se passe.

Je vais essayer de voir si j’arrive à trouver les compte-rendus de la compilation.

J’ai remarqué qu’il y a un sac de fichiers gpio.h dans les librairies cachées sur mon mac, peut-être qu’il faut un #define quelconque pour inclure le bon gpio .h.

J’ai inclus dans mon code les #define qui m’intéressaient et le code tourne bien à présent et il est plus lisible. C’est déjà ça

Par contre j’aimerais bien comprendre pourquoi le fichier include ne charge pas ou pourquoi le mauvais se charge…

Je connais peu Arduino mais les fichiers esp idf du même nom (comme driver/gpio.h) sont différents de ceux utilisés par Arduino. Les fichiers esp idf n'ont pas ces définitions. Ce n'est qu'une piste.

oui il faut vraiment aller regarder le arduino core pour ESP32 pour voir ce qu'il en est

Les fichiers en question ne sont pas dans le core arduino mais dans les include du SDK.

Oui — je voulais dire le hardware core qui est installé par l'IDE Arduino, pas les APIs arduino

sur mon Mac il est dans

~/Library/Arduino15/packages/esp32/hardware/esp32/2.0.14/tools/sdk/esp32/include/driver/include/driver/gpio.h

ou le 3.x suivant la version esp32 installée

Merci à tous, je vais essayer plus tard dès que j'ai un peu de temps de comprendre quelle version est utilisée.