ESP8266 et capteur PIR

Bonjour Je veux tester le fonctionnement d'un capteur PIR (passive infrared) avec un ESP8266 (NodeMCU 0.9) pour ensuite envoyer sans fil l'information de détection à un serveur distant. L'envoi fonctionne, je l'ai testé avec d'autres capteurs, mais le PIR ne marche pas. J'ai pourtant pris le sketch standard qu'on trouve partout sur internet :

/*
 * PIR sensor tester
 */

int ledPin = 2;                // choose the pin for the LED
int inputPin = 3;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input

  Serial.begin(9600);
}

void loop(){
  val = digitalRead(inputPin);  // read input value
  Serial.println(val);
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } else {
    digitalWrite(ledPin, LOW); // turn LED OFF
    if (pirState == HIGH){
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}

Je me demande si le pinout de l'ESP8266 n'est pas spécial et si la déclaration de la broche D2 pour la sortie du capteur ne doit pas être faite autrement. L'image http://www.cnx-software.com/wp-content/uploads/2015/10/NodeMCU_v0.9_Pinout.png indique GPIO0 sur la pin 3, celle que j'utilise. Comment dois-je déclarer ma broche PIR ? Merci

Utilisez des noms de pins tels que D2 ou D3 pour un esp nodeMCU (et chosissez la bonne carte dans l'IDE)

Les noms des pins sont là

|500x331

Donc si je comprends bien, au lieu de

int ledPin = 4;
int inputPin = 14;

je dois mettre

#define ledPin D2
#define inputPin D5

puisque le GPIO04 est sur la broche D2 et le GPIO14 sur la D5 ?
Je vais tester ça…

Pour la polarité du capteur PIR, comment être sûr des broches 5V et GND ? (le signal est supposé être au centre). On trouve souvent cette illustration, mais j’ai vu sur certains sites qu’il existe des capteurs branchés différemment.
5bb7dc411fbc8f8fa28bb538e4be2b356a1b20e6.png

Ça ne fonctionne pas, j'ai toujours le même problème : la sortie du capteur (variable val) reste à 1, qu'il y ait ou non un mouvement. Problème de connexion ?

souvent cette illustration, mais j'ai vu sur certains sites qu'il existe des capteurs branchés différemment

Bonjour, il faudrait que tu postes une photo macro du pcb pour qu'un électronicien puisse déterminer le branchement correct

Les PIR ont besoin de 30 secondes à 1 minute où il ne se passe rien pour s'initialiser - ensuite ils ont souvent un potentiomètre qui permet que régler pendant combien de temps la sortie sera HIGH même si aucun mouvement n'est détecté (et certains disent HIGH quand il y a rien et LOW en cas de détection)

Il faudrait donc voir comment tout cela est configuré sur votre système

lesept: Je me demande si le pinout de l'ESP8266 n'est pas spécial et si la déclaration de la broche D2 pour la sortie du capteur ne doit pas être faite autrement. L'image Comment dois-je déclarer ma broche PIR ? Merci

Bonjour Ton "PIR" est alimenté par quoi et sous quelle tension ?

Voici le PCB. Le gros composant avec plein de pattes à gauche est un BISS0001 dont la datasheet est ici

http://wiki.seeedstudio.com/images/2/2f/Twig_-_BISS0001.pdf

On voit quelle patte est reliée à la masse (Vss), et par continuité j’ai vu que c’est la broche de gauche sur la photo qui lui est reliée, donc cette broche serait le GND. Correct ?
Après, je ne sais pas comment vérifier quelle broche est pour le 5V… J’ai essayé les deux cas, j’ai toujours le même résultat…

Avec un delay(30000), c’est pareil
Si je modifie les réglages des potentiomètres, aucun changement…

Concernant l’alimentation : j’utilise une sorte de shield (voir seconde photo) qui offre des pin GND et 5V (en fait plus proche de 4.5, mais le PIR accepte de 3 à 12V), le tout est alimenté par l’USB du NodeMCU.

Pas évident, mais il semble bien que le + soit à droite : diode de protection contre les inversions (...), capa de découplage, régulateur d'après moi le câblage est donc le suivant : - ; out ; +, c'est à dire inverser l'alim par rapport à ton schéma de plus il me semble lire 33 sur le régulateur, ce qui signifierait un fonctionnement à 3v3, tension d'alim préconisée : de 5v à 12v max

trimarco232: Pas évident, mais il semble bien que le + soit à droite : diode de protection contre les inversions (...), capa de découplage, régulateur d'après moi le câblage est donc le suivant : - ; out ; +, c'est à dire inverser l'alim par rapport à ton schéma de plus il me semble lire 33 sur le régulateur, ce qui signifierait un fonctionnement à 3v3, tension d'alim préconisée : de 5v à 12v max

Bonsoir Ce genre de capteur repandu , comporte sur sa ligne VCC : une diode (protection anti inversion) avant le regulateur 3.3V Il faut déjà une alim VCC qui passe la tension de diode + le drop out du regulateur |500x375

Ça ne change rien, j'ai toujours la sortie à 1 Par contre, la console me donne des choses bizarres : j'a ajouté les lignes suivantes dans le setup :

  Serial.begin(9600);
  Serial.println("Delai 30s");
  delay (30000);
  Serial.println("Cest parti");

et j'obtiens :

D⸮⸮⸮⸮⸮30s

Le "Cest parti" est affiché très vite, mais j'ai eu le temps de le voir, il est correct.

Bonjour

Le "Cest parti" est affiché très vite, mais j'ai eu le temps de le voir, il est correct.

La console ne s'efface jamais - donc ça veut dire quoi que vous avez eu le temps de Le voir?

Pouvez vous poster

  • Le code
  • une photo d'un dessin sur un bout de papier de comment tout est connecté
  • confirmer quel type d'arduino vous utiliser

Le ' Serial.println(val);' renvoie à la ligne, ce qui fait que très rapidement on ne voit plus que des 1 sans pouvoir voir ce qu'il y avait avant.

Voici le code :

/*
 * PIR sensor tester
 */

//int ledPin = 2;                // choose the pin for the LED
//int inputPin = 3;               // choose the input pin (for PIR sensor)
#define ledPin D2
#define inputPin D5
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input

  Serial.begin(9600);
  Serial.println("Delai 30s");
  delay (30000);
  Serial.println("Cest parti");
}

void loop(){
  val = digitalRead(inputPin);  // read input value
  Serial.println(val);
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } else {
    digitalWrite(ledPin, LOW); // turn LED OFF
    if (pirState == HIGH){
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}

J'utilise un NodeMCU 0.9 avec un ESP-12, ce n'est pas un Arduino. Pour les branchements, c'est un peu compliqué, car :

  • le NodeMCU est sur un shield qui apporte des pin GND et 5V supplémentaires
  • le PIR est branché sur la pin D5, le GND et le 5V
  • la LED est sur la D2, avec une résistance de 220 Ohms
  • et comme je faisais des tests avec un DHT11 juste avant, j'ai aussi ce capteur sur une autre pin (me souviens plus laquelle, D1 je crois, je le posterai ce soir en rentrant)
  • le tout est alimenté via l'USB du NodeMCU.

Je mettrai un schéma ce soir... Merci de votre aide. Je pourrais tester de remplacer le NodeMCU par un Arduino Nano pour voir si le problème se reproduit ou s'il est spécifique à ce µC.

Le ' Serial.println(val);' renvoie à la ligne, ce qui fait que très rapidement on ne voit plus que des 1 sans pouvoir voir ce qu'il y avait avant.

vous avez une petite case à cocher qui dit à la console de ne pas défiler et vous pouvez toujours remonter dans la fenêtre pour voir l'historique des valeurs

Pour vous assurer que vous avez identifié les bons N° de pin, faites un petit montage avec une résistance de limitation de courant (220Ω à 300Ω) et une LED attachée à la PIN et utilisez le code de blink pour faire clignoter la LED. si elle ne clignote pas, vous n'avez pas la bonne pin (je n'ai plus d'ancienne génération, je n'ai que des NodeMCU ESP-12E et il y a des différences - perso je suis passé maintenant sur des WeMos D1)

si vous avez un multimètre vérifiez la tension de sortie de votre PIR quand il n'y a pas de mouvement et quand il y en a. utilisez les 2 potentiomètres intégrés à la carte pour régler la sensibilité correctement et mettez la durée d'alerte au min

Allez voir la page d'explication de adafruit elle est bien fichue pour comprendre les PIRs

J'ai tout repris avec un Nano, que je maîtrise un peu mieux. Le problème venait du réglage du capteur (les potentiomètres), que j'ai pu tester et régler sur le Nano. Ensuite, j'ai porté le soft sur l'ESP8266 et ça fonctionne. Merci !

Je trouve que l'ESP8266 est vraiment intéressant, car il ouvre la voie vers la com sans fil. Par contre j'ai l'impression qu'il ne conserve pas les programmes en mémoire car je dois tout uploader lorsque je l'allume.

Quelqu'un a des infos là-dessus ?

(j'ai un NodeMCU 0.9, avec l'ESP10 je crois)

lesept: ...Par contre j'ai l'impression qu'il ne conserve pas les programmes en mémoire car je dois tout uploader lorsque je l'allume.

Quelqu'un a des infos là-dessus ?

(j'ai un NodeMCU 0.9, avec l'ESP10 je crois)

Bonsoir Le programmme utilisateur des ESP8266 est stocké en memoire flash. aucune raison de devoir le reprogrammer apres chaque power off (heureusement)

C'est une bonne nouvelle, je dois me tromper alors. Merci