Take a picture and Publish it via FTP.
This project use ESP32 Camera Driver.
This project use ESP32-FTP-Client.
ESP32-CAM Development board.
Support for OV2640 camera.
If you use other camera, edit sdkconfig.default.
esp-idf v4.3 or later.
Use a USB-TTL converter.
ESP-32 | USB-TTL |
---|---|
U0TXD | RXD |
U0RXD | TXD |
GPIO0 | GND |
5V | 5V |
GND | GND |
git clone https://github.com/nopnop2002/esp-idf-ftp-camera
cd esp-idf-ftp-camera
git clone https://github.com/espressif/esp32-camera components/esp32-camera
idf.py set-target esp32
idf.py menuconfig
idf.py flash monitor
Change GPIO0 to open and press the RESET button.
Set the following items using menuconfig.
ESP32 supports the following file systems.
- SPIFFS file system on FLASH
- FAT file system on FLASH
- FAT file system on SPI peripheral SDCARD
- FAT file system on SDMMC peripheral SDCARD
You can select any one using menuconfig.
Must be formatted with FAT32 before use
ESP32 pin | SPI pin | Notes |
---|---|---|
GPIO14(MTMS) | SCK | |
GPIO15(MTDO) | MOSI | 10k pull up if can't mount |
GPIO2 | MISO | |
GPIO13(MTCK) | CS | |
3.3V | VCC | Can't use 5V supply |
GND | GND |
Must be formatted with FAT32 before use
ESP32 pin | SD card pin | Notes |
---|---|---|
GPIO14(MTMS) | CLK | 10k pullup |
GPIO15(MTDO) | CMD | 10k pullup |
GPIO2 | D0 | 10k pullup |
GPIO4 | D1 | not used in 1-line SD mode; 10k pullup in 4-line SD mode |
GPIO12(MTDI) | D2 | not used in 1-line SD mode; 10k pullup in 4-line SD mode |
GPIO13 (MTCK) | D3 | not used in 1-line SD mode, but card's D3 pin must have a 10k pullup |
N/C | CD | optional, not used in the example |
N/C | WP | optional, not used in the example |
You can use the mDNS hostname instead of the IP address.
- esp-idf V4.3 or earlier
You will need to manually change the mDNS strict mode according to this instruction. - esp-idf V4.4 or later
If you set CONFIG_MDNS_STRICT_MODE = y in sdkconfig.default, the firmware will be built with MDNS_STRICT_MODE = 1.
You can specify mDNS hostname for the FTP server.
You can choose the file name on the FTP server side from the following.
- Always the same file name
- 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.
- Add FrameSize to Remote file Name
When this is enabled, FrameSize is added to remote file name like this.
20210520-165740_800x600.jpg
Large frame sizes take longer to take a picture.
You can choose one of the following shutter methods
- Shutter is the Enter key on the keyboard
For operation check
-
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 |
- Shutter is TCP Socket
You can use tcp_send.py.
python ./tcp_send.py
- Shutter is UDP Socket
You can use udp_send.py.
Requires netifaces.
python ./udp_send.py
- Shutter is HTTP Request
You can use this command.
curl "http://esp32-camera.local:8080/take_picture"
ESP32-CAM by AI-Thinker has a flash light on GPIO4.
You can check the photos taken using the built-in WEB server.
Enter the ESP32's IP address and port number in the address bar of your browser.