EPS32 - Etat de mon pin instable

Bonjour,
Je rencontre le même problème avec mes deux cartes ESP32. Lorsque je fais un digitalRead sur la plupart des pins, la valeur renvoyée est de 0 tant que je ne n'y touche pas. Si j'ai le malheur de brancher un câble (même sans rien au bout) alors la valeur renvoyé est de 0, puis 1, puis 0, ect de manière irrégulière.
J'ai essayé sur les pin GPIO 36, 34, 4, 23 les seuls qui ont un résultat différent sont le pins GPIO16 et 17 qui n'alternent entre 1 et 0 que lorsque je pince le fils (sur le plastique ou le métal) ... :face_with_raised_eyebrow:
Je précise que ma carte est alimentée sur le port USB de mon ordinateur en micro-USB et qu'il s'agit d'un ESP32 DEVKIT V1

Petite précision supplémentaire voici le mode qui me permet d'afficher mon problème :

const int pin_normal = 16;
const int pin_pullup = 17;

int pin_normal_last_state;
int pin_pullup_last_state;

void setup() {
  Serial.begin(115200);
  Serial.println("Lets get started");
  
  pinMode(pin_normal, INPUT);
  pinMode(pin_pullup, INPUT_PULLUP);
}

void loop() {
 int pin_normal_state = digitalRead(pin_normal);
 int pin_pullup_state = digitalRead(pin_pullup);

 if(pin_normal_state != pin_normal_last_state || pin_pullup_state != pin_pullup_last_state){
  if(pin_normal_state != pin_normal_last_state){
    Serial.print("Etat de la pin normale (");
    Serial.print(pin_normal);
    Serial.print(") : ");
    Serial.println(pin_normal_state);
  }if (pin_pullup_state != pin_pullup_last_state){
    Serial.print("Etat de la pin pullup (");
    Serial.print(pin_pullup);
    Serial.print(") : ");
    Serial.println(pin_pullup_state);
  }
  Serial.println(" ");
  }
 

 pin_normal_last_state = pin_normal_state;
 pin_pullup_last_state = pin_pullup_state;

}i

PS : Les pins GPIO 16 et 17 ne réagissent qu'au pincement lorsqu'ils sont initialisés en INPUT_PULLUP

Merci d'avance :slight_smile:

Bonjour,

C'est normal, si tes pins sont en l'air sans rien relié dessus leur état est indéfini (du fait de leur grande impédance elles captent n'importe quel parasite).
Il faut utiliser une résistance de pullup (interne ou externe) ou un pull down.

Tu peux remplacer ces lignes par une seule, comme ceci :
Serial.printf("Etat de la pin normale (%d) : %d\n",pin_normal, pin_normal_state);

Ca ne répond pas forcément à ta question, mais ça simplifie le code...
Pour ta question, lorsqu'une pin est "flottante", elle peut voir son niveau varier aléatoirement, et d'autant plus si un fil est connecté car il agit un peu comme une antenne. Sur l'ESP32, c'est peut-être mitigé par le fait que les pins sont aussi tactiles : on peut les utiliser (en les configurant pour ça) comme des boutons tactiles.

Bonjour,
C'est la qu'est mon problème. J'ai besoin de capter un bouton poussoir, mais que ce soit en PULLUP, PULLDOWN ou normal mon esp détecte une valeur au bornes du BP alors qu'il n'est rien.

Explique bien comment ton bouton est connecté. Genre "pin 16 (pullup) - BP - GND"

Quel longueur?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.