ESP32-CAM - FT232RL ESPHome

Bonjour,

Je tente d’installer une ESP32-CAM dont voici le modèle:

Adaptateur FT232RL:

Pour info j’ai déjà un ESP32 avec capteur Température / humidité qui fonctionne bien.

L’installation depuis mon PC via le câble USB vers FT232RL semble bien se passer et l’ESP32-CAM est online:
image

Mais je vois une erreur dans les logs :

INFO Reading configuration /config/esphome/esp32camsalon.yaml...
WARNING GPIO15 is a Strapping PIN and should be avoided.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from esp32camsalon.local using esphome API
INFO Successfully connected to esp32camsalon.local
[13:55:31][I][app:102]: ESPHome version 2022.6.2 compiled on Jul  7 2022, 13:28:43
[13:55:31][C][wifi:491]: WiFi:
[13:55:31][C][wifi:353]:   Local MAC: 0C:B8:15:FE:DF:4C
[13:55:31][C][wifi:354]:   SSID: [redacted]
[13:55:31][C][wifi:355]:   IP Address: 192.168.1.8
[13:55:31][C][wifi:357]:   BSSID: [redacted]
[13:55:31][C][wifi:358]:   Hostname: 'esp32camsalon'
[13:55:31][C][wifi:360]:   Signal strength: -56 dB ▂▄▆█
[13:55:31][C][wifi:364]:   Channel: 11
[13:55:31][C][wifi:365]:   Subnet: 255.255.255.0
[13:55:31][C][wifi:366]:   Gateway: 192.168.1.254
[13:55:31][C][wifi:367]:   DNS1: 192.168.1.254
[13:55:31][C][wifi:368]:   DNS2: 0.0.0.0
[13:55:31][C][logger:275]: Logger:
[13:55:31][C][logger:276]:   Level: DEBUG
[13:55:31][C][logger:277]:   Log Baud Rate: 115200
[13:55:31][C][logger:278]:   Hardware UART: UART0
[13:55:31][C][esp32_camera:048]: ESP32 Camera:
[13:55:31][C][esp32_camera:049]:   Name: My Camera
[13:55:31][C][esp32_camera:050]:   Internal: NO
[13:55:31][C][esp32_camera:052]:   Data Pins: D0:17 D1:35 D2:34 D3:5 D4:39 D5:18 D6:36 D7:19
[13:55:31][C][esp32_camera:053]:   VSYNC Pin: 22
[13:55:31][C][esp32_camera:054]:   HREF Pin: 26
[13:55:31][C][esp32_camera:055]:   Pixel Clock Pin: 21
[13:55:31][C][esp32_camera:056]:   External Clock: Pin:27 Frequency:20000000
[13:55:31][C][esp32_camera:057]:   I2C Pins: SDA:25 SCL:23
[13:55:31][C][esp32_camera:058]:   Reset Pin: 15
[13:55:31][C][esp32_camera:076]:   Resolution: 640x480 (VGA)
[13:55:31][E][esp32_camera:095]:   Setup Failed: ERROR
[13:55:31][C][psram:020]: PSRAM:
[13:55:31][C][psram:021]:   Available: YES
[13:55:31][C][captive_portal:088]: Captive Portal:
[13:55:31][C][mdns:084]: mDNS:
[13:55:31][C][mdns:085]:   Hostname: esp32camsalon
[13:55:31][C][ota:085]: Over-The-Air Updates:
[13:55:31][C][ota:086]:   Address: esp32camsalon.local:3232
[13:55:31][C][ota:089]:   Using Password.
[13:55:31][C][api:138]: API Server:
[13:55:31][C][api:139]:   Address: esp32camsalon.local:6053
[13:55:31][C][api:141]:   Using noise encryption: YES

[esp32_camera:095]: Setup Failed: ERROR

Mais dans mon board elle est inactive :
image

Une petite idée ?
Merci,
Bob

Voici mon fichier yaml:

esphome:
  name: esp32camsalon

esp32:
  board: esp32dev
#  framework:
#    type: arduino
    
#esphome:
#  name: esp32camsalon
#  platform: ESP32
#  board: nodemcu-32s

# Enable logging
logger:
  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: "fl4CJu/nFmJf8sia8w7ImTQd5txxxxxxxxxxW5rJDM8="

ota:
  password: "2746018d727b50xxxxxxxxxx001e548d"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32Camsalon Fallback Hotspot"
    password: "DexxxxxxQ96T"

captive_portal:

# Example configuration entry
esp32_camera:
  name: My Camera
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO25
    scl: GPIO23
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21
  reset_pin: GPIO15
  resolution: 640x480
  jpeg_quality: 10

Ma configuration

System Health

version core-2022.6.7
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.12
os_name Linux
os_version 5.15.32-v8
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.25.5
Stage running
Available Repositories 1074
Downloaded Repositories 19
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 8.2
update_channel stable
supervisor_version supervisor-2022.06.2
agent_version 1.2.1
docker_version 20.10.14
disk_total 457.7 GB
disk_used 16.1 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons deCONZ (6.14.2), Let’s Encrypt (4.12.5), File editor (5.3.3), Samba share (10.0.0), Network UPS Tools (0.11.0), Spotify Connect (0.12.1), Terminal & SSH (9.4.0), Portainer (2.0.0), InfluxDB (4.5.0), Grafana (7.6.0), Node-RED (12.0.2), Studio Code Server (5.1.2), ESPHome (2022.6.2)
Dashboards
dashboards 2
resources 13
views 10
mode storage
Recorder
oldest_recorder_run 29 juin 2022 à 18:46
current_recorder_run 29 juin 2022 à 20:46
estimated_db_size 232.63 MiB
database_engine sqlite
database_version 3.34.1
Spotify
api_endpoint_reachable ok

Bonjour

j’ai un modele de camera identique
il s’agit du modele AI-thinker
Le code a utiliser est le suivant
Configuration for Ai-Thinker Camera

Example configuration entry


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

le code que tu as utilisé correspond a la configuration d’un M5-stack

qui ressemble plus a cela
image

Merci, je testerai ce soir, Ai-Thinker Camera était la première conf que j’avais testé mais depuis j’ai tenté aussi plusieurs conf pour le début de fichier yaml et je n’étais pas revenu en arrière:

esphome:
  name: esp32camsalon

esp32:
  board: esp32dev

Bob

Pas mieux @jrvrcd

Pourrais-tu me donner le .yaml complet que tu utilises stp, j’ai toujours le même souci.

Le yaml :

esphome:
  name: espcam32a

esp32:
  board: esp32dev
#  framework:
#    type: arduino

# Enable logging
logger:
  level: DEBUG

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

ota:
  password: "monpwd"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Espcam32A Fallback Hotspot"
    password: "monpassword"

captive_portal:
esp32_camera:
  name: CameraSalon
  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
  resolution: 640x480
  jpeg_quality: 10

Hello
comme demandé

esphome:
  name: espcam001
  platform: ESP32
  board: esp32cam

wifi:
  networks:
  - ssid: "Livebox-abcdef"
    password: "password"
 
  manual_ip:
    static_ip: 192.168.1.xyz
    gateway: 192.168.1.254
    subnet: 255.255.255.0
    dns1: 192.168.1.254
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Espcam 001 Fallback Hotspot"
    password: "fallback"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
switch:
  - platform: restart
    name: "Espcam_001 reboot"
time:
  - platform: sntp
    id: sntp_time
    timezone: Europe/Paris

web_server:
  port: 80

binary_sensor:
  - platform: status
    name: "Espcam 001 Status"

sensor:
  - platform: uptime
    id: uptime_seconds
    name: "Uptime Sensor"
    update_interval: 60s
    unit_of_measurement: s
    accuracy_decimals: 0
    force_update: false
    icon: mdi:timer
    internal: True  # Hide to HA
  - platform: wifi_signal
    name: "EspCam 001 WiFi Signal Sensor"
    update_interval: 60s

text_sensor:
  - platform: template
    name: espcam_001 - Uptime
    update_interval: 60s
    icon: mdi:clock-start
    lambda: |-
      int seconds = (id(uptime_seconds).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600);
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      if ( days ) {
        return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( hours ) {
        return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else if ( minutes ) {
        return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
      } else {
        return { (String(seconds) +"s").c_str() };
      }


esp32_camera:
  name: ESPCam_001
  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
  test_pattern: false
  vertical_flip: false
  horizontal_mirror: true
  resolution: 640x480
  max_framerate: 10 fps
  idle_framerate: 0.1 fps
  
output:
  # Register the  LED as a dimmable output ....
  - platform: ledc
    id: cam001_led
    pin: GPIO4
    channel: 2
    inverted: false

light: 
  # ... and then make a light out of it.
  - platform: monochromatic
    name: "Espcam 001 LED"
    output: cam001_led

esp32_camera_web_server:
  - port: 8080
    mode: stream

1 « J'aime »

Super @jrvrcd, merci j’ai l’image :+1:
Juste une autre question sur le bloc text_sensor: que je n’ai pas mis dans mon .yaml, il sert à quoi ?

Merci encore
Bob

Un horodatage je pense : temps d’uptime au format D H M S

Merci c’est top, je regarderai plus tard tous les paramètres possibles.
La carte FT232RL ne sert que la première fois ? Une fois le module en wifi on peut le flasher sans ?
Sinon une dernière question pour ce sujet, je vois un onglet « visit »
image

Qui pointe sur « http://espcam32a.local/ » mais inaccessible, j’ai la vidéo dans le board donc pas gênant…

Reste à regarder les détections de personnes ou de « chose » mais déjà très content :slight_smile:

Merci beaucoup
Bob

Hello again
Contant que ce soit tombé en marche

Comme le suggère @Pulpy-Luke le text sensor permet de remonter le temps de fonctionnement depuis le dernier reboot de l’esp

Pour repondre a ta derniere question

L’avantage d’esphome c’estqu’une fois qu’un firmwre de base est chargé tout ce fait over the air le fameux OTA

Génial, merci encore pour ton aide, je souhaite explorer tous les aspects de HA, premier ESP32 semaine dernière avec LED pour rire et AHT10, NFC cette semaine et ESP32-CAM, je reste très soft et dans la « norme » dans mes board mais j’ai franchement un système qui tient la route.
Bonne soirée @jrvrcd @Pulpy-Luke
Bob

C’est le but de ce forum de partage
Avec ton premier esp on a patachoné
Là ça a ete plus efficace

1 « J'aime »

Je mets mon yaml si ça peu aider :

esphome:
  name: espcam32a
  platform: ESP32
  board: esp32cam

#esp32:
#  board: esp32cam
#  framework:
#    type: arduino

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Espcam32A Fallback Hotspot"
    password: "mypassword"
    
    
captive_portal:

# Enable logging
logger:

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

ota:
  password: "mypassword"
  
time:
  - platform: sntp
    id: sntp_time
    timezone: Europe/Paris
    
web_server:
  port: 80

binary_sensor:
  - platform: status
    name: "Espcam32a Status"

sensor:
  - platform: uptime
    id: uptime_seconds
    name: "Uptime Sensor"
    update_interval: 60s
    unit_of_measurement: s
    accuracy_decimals: 0
    force_update: false
    icon: mdi:timer
    internal: True  # Hide to HA
  - platform: wifi_signal
    name: "EspCam32a WiFi Signal Sensor"
    update_interval: 5s

esp32_camera:
  name: CameraSalon
  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
  test_pattern: false
  vertical_flip: false
  horizontal_mirror: false
  resolution: 1600x1200
  max_framerate: 10 fps
  idle_framerate: 0.1 fps
  
output:
  # Register the  LED as a dimmable output ....
  - platform: ledc
    id: espcam32a_led
    pin: GPIO4
    channel: 2
    inverted: false

light: 
  # ... and then make a light out of it.
  - platform: monochromatic
    name: "Espcam 001 LED"
    output: espcam32a_led

esp32_camera_web_server:
  - port: 8080
    mode: stream

Oui trop bien le forum, j’hésite parfois mais quand c’est nouveau pour moi, je demande.

Bob

1 « J'aime »

Bonsoir,
Dans la continuité, je me dis, si détection de présence au salon avec un capteur Aqara, j’allume la LED de l’ESP32-CAM (ça fonctionne) et je fais un snapshot ?

L’interface me propose bien l’option:


Mais quand je rentre le filename :

Logger: homeassistant.helpers.template
Source: helpers/template.py:1926
First occurred: 19:45:54 (6 occurrences)
Last logged: 20:35:40

Template variable error: 'camera' is undefined when rendering '/tmp/snapshot_{{ camera.camerasalon }}.jpg'

Logger: homeassistant.components.automation.espcammtest
Source: helpers/script.py:1718
Integration: Automatisation (documentation, issues)
First occurred: 19:45:54 (6 occurrences)
Last logged: 20:35:40

EspCammTest: Error executing script. Error for call_service at pos 2: Error rendering data template: UndefinedError: 'camera' is undefined

Logger: homeassistant.components.automation.espcammtest
Source: components/automation/__init__.py:525
Integration: Automatisation (documentation, issues)
First occurred: 19:45:54 (6 occurrences)
Last logged: 20:35:40

Error while executing automation automation.espcammtest: Error rendering data template: UndefinedError: 'camera' is undefined

:wink:

Bob

C’est tout ecrit dans la doc


Donc {{ entity_id.name }} et pas {{ camera.camerasalon }}

Trop fatigué ce soir je crois, désolé :
image
image

:expressionless:

Désolé @Pulpy-Luke, je me couche, demain j’'y verrai peut être clair.
Merci
Bob

Difficile de s’arrêter…
Le /tmp doit être à quel niveau ?
image

Essaye tmp/ (sans / devant) ça devrait arriver dans /config/tmp (à creer)

Mais je ne vois pas par quoi remplacer « yourcamera_ » dans:

data:
    filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg'

:weary:
Suis nul ce soir :wink:

C’est marqué plus haut
Donc :

filename: 'tmp/{{ entity_id.name }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg'