Skip to content

nopnop2002/esp-idf-smtp-camera

Repository files navigation

esp-idf-smtp-camera

Take a picture and Publish it via SMTP.
This project use this Camera Driver.

slide0001 slide0002

Hardware requirements

ESP32 development board with OV2640 camera.
If you use other camera, edit sdkconfig.default.
From the left:

  • Aithinker ESP32-CAM
  • Freenove ESP32-WROVER CAM
  • UICPAL ESPS3 CAM
  • Freenove ESP32S3-WROVER CAM (Clone)

es32-camera

Software requirements

ESP-IDF V5.0 or later.
ESP-IDF V4.4 release branch reached EOL in July 2024.

Installation

For AiThinker ESP32-CAM, you need to use a USB-TTL converter and connect GPIO0 to GND.

ESP-32 USB-TTL
U0TXD RXD
U0RXD TXD
GPIO0 GND
5V 5V
GND GND
git clone /~https://github.com/nopnop2002/esp-idf-smtp-camera
cd esp-idf-smtp-camera
chmod 777 getpem.sh
./getpem.sh
idf.py set-target {esp32/esp32s3}
idf.py menuconfig
idf.py flash monitor

Start firmware

For AiThinker ESP32-CAM, Change GPIO0 to open and press the RESET button.

Configuration

Set the following items using menuconfig.

config-main config-app

Wifi Setting

config-wifi-1

You can connect using the mDNS hostname instead of the IP address.
config-wifi-2

You can use static IP.
config-wifi-3

SMTP Server Setting

config-smtp

I've only tested with a Gmail account.
If you want to use a non-gmail account, you need to change gmail_root_cert.pem according to this instruction.

Note about Gmail:
To help keep your account secure, from May 30, 2022, Google no longer supports the use of third-party apps or devices which ask you to sign in to your Google Account using only your username and password.
Due to this change, you can no longer log in to Google from ESP-IDF using only your username and password.
You will need to generate a special app password as described here.
An app password is a 16-character code generated by your device.
Use this code as your password.

Attached File Name Setting

You can select the file name to write to the shared folder from the following.

  • Always the same file name
    config-filename-1

  • File name based on date and time
    When you choose date and time file name, you will need an NTP server.
    The file name will be YYYYMMDD-hhmmss.jpg.
    config-filename-2

  • Add FrameSize to Remote file Name
    When this is enabled, FrameSize is added to remote file name like this.
    20210520-165740_800x600.jpg
    config-filename-3

Select Board

config-board

Select Frame Size

Large frame sizes take longer to take a picture.

config-framesize-1 config-framesize-2

Select Shutter

You can choose one of the following shutter methods

  • Shutter is the Enter key on the keyboard
    For operation check config-shutter-1

  • Shutter is a GPIO toggle

    • Initial Sate is PULLDOWN
      The shutter is prepared when it is turned from OFF to ON, and a picture is taken when it is turned from ON to OFF.

    • Initial Sate is PULLUP
      The shutter is prepared when it is turned from ON to OFF, and a picture is taken when it is turned from OFF to ON.

    I confirmed that the following GPIO can be used.

    GPIO PullDown PullUp
    GPIO12 OK NG
    GPIO13 OK OK
    GPIO14 OK OK
    GPIO15 OK OK
    GPIO16 NG NG

    config-shutter-2

  • Shutter is TCP Socket
    ESP32 acts as a TCP server and listens for requests from TCP clients.
    You can use tcp_send.py as shutter.
    python3 ./tcp_send.py Image

  • Shutter is UDP Socket
    ESP32 acts as a UDP listener and listens for requests from UDP clients.
    You can use this command as shutter.
    echo -n "take" | socat - UDP-DATAGRAM:255.255.255.255:49876,broadcast
    You can use udp_send.py as shutter.
    Requires netifaces.
    python3 ./udp_send.py
    Image
    You can use these devices as shutters.
    Image
    Click here for details.

  • Shutter is a MQTT Publish
    ESP32 acts as an MQTT subscriber and listens to requests from MQTT publishes.
    You can use mosquitto_pub as shutter.
    mosquitto_pub -h broker.emqx.io -t "/take/picture" -m "hello world"

    MQTT broker is specified by one of the following.

    • IP address
      192.168.10.20
    • mDNS host name
      mqtt-broker.local
    • Fully Qualified Domain Name
      broker.emqx.io

    config-shutter-51

    Specifies the username and password if the server requires a password when connecting.
    config-shutter-52

Flash Light

ESP32-CAM by AI-Thinker have flash light on GPIO4.

config-flash

PSRAM

When using ESP32S3, you need to set the PSRAM type according to the hardware.
ESP32S3-WROVER CAM has Octal Mode PSRAM.
UICPAL ESPS3 CAM has Quad Mode PSRAM.
config-psram

About

Take a picture and Publish it via SMTP.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published