Night vision on ESP32-CAM

I use a ESP32CAM module as a front door camera. It’s flashed with ESPHome and it’s connected with Home Assistant. THe biggest disadvantage of this module is the lack of night vision. The EPS32 module comes with an OV2640 camera. The standard lens has an IR filter which blocks infrared radiation. You could remove that IR filter and have some kind of night vision but it would mess the colors during daytime.

I read a conversation on reddit where KiLLeRRaT85 suggested to use a “M12 lens 3MP no IR”. I tried a lens like that and used a M12 IR cut filter to be able to switch on and off the IR filter which also holds the lens and allows to focus the image.

I also attached a IR LED board that is turned on automatically at night using a photoresistor. The IR filter needs a pulse from the ESP32 module to switch on the IR filter. Then it needs an inverted pulse to switch it off. I used a MX1508 H-bridge module to turn on and off the IR LED using two cables from the ESP32 module.

Then I created a Helper Toggle on Home Assistant that is read by ESP32 and it gives the pulse on the H-bridge module. I can toggle that switch manually or automatically based on Sun position. You can find my ESPHome configuration for my camera module below

I designed a 3d printed case that holds everything inside. Beside the camera module with my modifications there are a DHT22 sensor, a PIR module acting as a motion sensor, an external antenna and a step down converter that gets 12V (LED needs 12V) and outputs 5V for everything else including the ESP32.

List of materials:

  • 3D Printed parts (download on thingiverse)
  • ESP32CAM module
  • M12 lens 3MP no IR (like that)
  • M12 IR cut filter, holes distance 20mm (like that)
  • IR LED board 45mm 12V (like that)
  • MX1508 H-bridge module
  • Step Down module (like MP1584EN)
  • PIR module (HC-SR501)
  • DHT22
  • 2.4GHz SMA antenna

ESPHome configuration:

  devicename: esp-cam
  friendlyname: ESPcam

  name: $devicename
  platform: ESP32
  board: esp32cam

  ssid: !secret wifi_ssid
  password: !secret wifi_wpa
  fast_connect: on
    ssid: $friendlyname Hotspot
    password: !secret ap_pass





  - platform: dht
    pin: 15
      name: $friendlyname Temp
        - sliding_window_moving_average:
            window_size: 15
            send_every: 15
      name: $friendlyname Humidity
        - sliding_window_moving_average:
            window_size: 15
            send_every: 15
    update_interval: 15s
    model: AM2302

  - platform: gpio
    pin: GPIO12
    name: $friendlyname Motion Sensor
    device_class: motion
  - platform: homeassistant
    name: "Input Boolean Night Mode HA"
    entity_id: input_boolean.esp32_night_mode
        - switch.turn_on: ir2
        - switch.turn_on: ir1

    pin: GPIO0
    frequency: 20MHz
    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
  name: $friendlyname Door Camera
  resolution: 640x480
  jpeg_quality: 20 #10 best, 63 worst
  idle_framerate: 0.4 fps
  max_framerate: 5 fps
  vertical_flip: true
  horizontal_mirror: true

  - platform: gpio
    pin: GPIO2
    name: $friendlyname IR ON
    id: ir1
    - delay: 100ms
    - switch.turn_off: ir1
    interlock: [ir2]
  - platform: gpio
    pin: GPIO14
    name: $friendlyname IR OFF
    id: ir2
    - delay: 100ms
    - switch.turn_off: ir2
    interlock: [ir1]

19 replies on “Night vision on ESP32-CAM

Leave a Reply

Your email address will not be published. Required fields are marked *