ESP32 Comportement différent ESPhome / arduino IDE

Bonjour à tous,

Je suis bien embêté depuis quelques jours sur un projet de caméra destinée à identifier les animaux passant dans le jardin.

Depuis 2-3 ans, j’ai un EPS32-cam en deepsleep, réveillé par un AM312 sur son pin 13, qui envoie une photo via Telegram et se rendort. Programmé via l’arduino IDE. Ceci monté sur un PCB fait maison. => tout fonctionne.

Je souhaite convertir ce projet pour exploiter les images sous home assistant donc je monte un ESP32-cam sur le même PCB et ajoute le classique binary sensor : aucune détection des changements d’état de l’AM312. (programmé via ESPhome).

L’AM312 est branché directement sur l’alimentation (2* 18650 avec condensateur 1000uf) sa sortie est en direct sur le GPIO13. J’ai remplacé les AMS1117 de tous les ESP32 CAM par un SPX3819 en 3.3V donc pas de PB de stabilité lié au VIN inférieur à 5V.

-J’ai essayé avec différents ESP32 → pas de détection

-J’ai essayé différents AM312 → pas de détection

-J’ai refait le montage sur breadboard → pas de détection

-J’ai testé les AM312 → ils passent bien à 3V lors d’une détection de mouvement

-J’ai ajouté une résistance de pulldown de 10k et essayé le INPUT_PULLDOWN → pas de détection

-J’ai tenté de jouer avec différents paramètres du binary sensor (use_interrupts true/false, rising low to high, INPUT PULLDOWN…) → pas de détection

-Je remonte un ESP32 programmé depuis l’arduino IDE → détection PIR OK (j’en déduits que le hardware est OK)

-Je retire l’AM312, et connecte via un fil l’emplacement OUT et l’emplacement VIN → le binary_sensor change bien d’état (j’en déduits que l’aspect “software” est OK et cela confirme que le PCB est OK.)

Je n’arrive plus à avoir de pistes de résolution … auriez vous une suggestion …?

Merci par avance et bon week-end !

  - platform: gpio
    name: "3V3 PIR Sensor"
    device_class: motion
    use_interrupt: False
    pin: 
      number: GPIO13
      mode: INPUT_PULLDOWN    

Mais c’est quoi qui ne fonctionne pas ? le changement de niveau sur le GPIO13 ou la sortie du deep-sleep ?
Si je regarde la doc du « deep sleep » de ESPhome Deep Sleep Component - ESPHome - Smart Home Made Simple
ça dit que le GPIO16 ne peut pas sortir l’ESP de ce mode.
Donc soit y a une erreur dans la doc, soit ton code Arduino utilise un autre mécanisme.

C’est vraiment le changement de niveau qui ne fonctionne pas ! Je mesure bien que la sortie de l’AM312 monte à 3V lorsqu’il y a un mouvement, mais le binary sensor ne change pas d’état

Faudrait voir ton fichier yaml complet alors…
Parce que l’extrait que tu as mis ne dit pas grand chose

Voici le yaml :

esphome:
  name: esp323v3cam
  friendly_name: esp32cam3V3
  on_boot:
  - priority: -100.0
    then:
      - script.execute: deep_sleep_evaluation
          



esp32:
  cpu_frequency: 240MHZ
  board: esp32dev
  framework:
    type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

ota:
  - platform: esphome
    password: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

wifi:
  networks:
  - ssid: XXXXXXXXXXX
    password: XXXXXXXXXXXXX
  - ssid: XXXXXXXXXXXXXXXXX
    password: XXXXXXXXXXXXXX

  use_address: 192.168.1.XXX


# Example configuration entry

psram:
  mode: quad
  speed: 120MHz

esp32_camera:
  external_clock:
    pin: GPIO0
    frequency: 20MHz
  i2c_pins:
    sda: GPIO26
    scl: GPIO27
  data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
  vsync_pin: GPIO25
  href_pin: GPIO23
  pixel_clock_pin: GPIO22
  power_down_pin: GPIO32

  
  jpeg_quality: 10
  resolution: SXGA
  max_framerate: 3fps
  idle_framerate: 0.1fps
  brightness: 2
  vertical_flip: false

  # Image settings
  name: My Camera

esp32_camera_web_server:
  - port: 8080
    mode: stream
  - port: 8081
    mode: snapshot


button:
  - platform: restart
    name: "EspCamBird3V3 Restart"

light:
  - platform: binary
    id: "Flash_lampBird3V3"
    name: "Flash LampBird3V3"
    output: light_output


  - platform: binary
    name: "IR lampBird3V3"
    output: IR_led_output
  
  - platform: binary
    name: "IR_led_12"
    output: IR_led_12

  - platform: binary
    name: "IR_led_2"
    output: IR_led_2

output:
  - id: light_output
    platform: gpio
    pin: GPIO4

  - id: IR_led_output
    platform: gpio
    pin: GPIO15

  - id: IR_led_12
    platform: gpio
    pin: GPIO12

  - id: IR_led_2
    platform: gpio
    pin: GPIO2


sensor:
  - platform: wifi_signal
    name: "WiFibird3V3 Signal Sensor"
    update_interval: 30s
    force_update: true
  
  - platform: internal_temperature
    name: "Internal Temperature bird3V3"
    update_interval: 30s 


#binary_sensor:
#  - platform: gpio
#    pin: GPIO13
#    name: "PIR Sensor3V3"
    # use_interrupt: true  # Default - uses interrupts
    # Only detect low-to-high transitions

    

status_led:
  pin:
    number: GPIO33
    inverted: true



binary_sensor: 
  - platform: homeassistant
    id: disable_deep_sleep
    entity_id: input_boolean.esp3v3_disable_deepsleep

  - platform: gpio
    name: "3V3 PIR Sensor"
    device_class: motion
    use_interrupt: False
    pin: 
      number: GPIO13
#      mode: INPUT_PULLDOWN    

deep_sleep:
  id: deep_sleep_enabled
  #run_duration: 20sec # move this value to -delay- deep_sleep_evaluation script parameter
  sleep_duration: 20min

script:
  - id: deep_sleep_evaluation
    mode: queued
    then:
      - delay: 60s
      - if:
          condition:
            binary_sensor.is_on: disable_deep_sleep
          then:
            - logger.log: 'Deep Sleep Disabled'
          else:
          #  - wifi.disable:
            - logger.log: 'Deep Sleep enabled'
            - deep_sleep.enter: deep_sleep_enabled
      - script.execute: deep_sleep_evaluation

(je re-précise que pour le moment je n’essaye même pas de sortir du deepsleep)

merci !

On trouve pas grand chose comme doc sur le AM312. Le peu que j’ai trouvé, parle d’une résistance de 20k en série avec la sortie, de ce fait, il a quand même une impédance de sortie très élevée et peu donc donner des niveau logiques un peu « flou ». Il faudrait mesurer la tension sur le GPIO13 en situation réelle de détection pour s’assurer de la viabilité des niveaux logiques fournit.
Si ça fonctionnait bien avec le code Arduino et pas avec l’ESP, vu d’ici, le seul truc qui pourrait avoir une influence c’est les résistances de pull-up / pull-down. Donc perso j’essayerais de les désactiver implicitement dans le code (par ce qu’en vrai la doc ne donne pas la valeur par défaut à ce sujet) donc je tenterais un truc du genre :


  - platform: gpio
    name: "3V3 PIR Sensor"
    device_class: motion
    use_interrupt: False
    pin: 
      number: GPIO13
      mode:
        input: true
        pullup: false
        pulldown: false

Ce sujet a été automatiquement fermé après 60 jours. Aucune réponse n’est permise dorénavant.