Take a picture and Publish it via SMB.
You can access a picture using Windows shared folder.
This project use ESP32 Camera Driver.
This project use SMB2/3 userspace client.
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)
ESP-IDF V5.0 or later.
ESP-IDF V4.4 release branch reached EOL in July 2024.
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-smb-camera
cd esp-idf-smb-camera
git clone https://github.com/sahlberg/libsmb2 components/libsmb2
cp esp-idf/CMakeLists.txt components/libsmb2/
idf.py set-target {esp32/esp32s3}
idf.py menuconfig
idf.py flash monitor
For AiThinker ESP32-CAM, Change GPIO0 to open and press the RESET button.
Set the following items using menuconfig.
You can connect using the mDNS hostname instead of the IP address.
- CONFIG_ESP_SMB_USER
Username with shared folder permissions. - CONFIG_ESP_NEED_PASSWORD
Shared access requires password. - CONFIG_ESP_SMB_PASSWORD
Password with shared folder permissions. - CONFIG_ESP_SMB_HOST
IP address or mDNS host name of shared host. - CONFIG_ESP_SMB_PATH
Shared path name.
When a password is required to access the shared folder.
You can select the file name to write to the shared folder 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.
When using the USB port provided by the USB Serial/JTAG Controller Console, you need to enable the following line in sdkconfig.
CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y
-
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 as shutter.
python3 ./tcp_send.py
- Shutter is UDP Socket
You can use udp_send.py as shutter.
Requires netifaces.
python3 ./udp_send.py
- Shutter is HTTP Request
You can use this command as shutter.
curl "http://esp32-camera.local:8080/take/picture"
ESP32-CAM by AI-Thinker have flash light on GPIO4.
When you use ESP32S3-WROVER CAM, you need to set the PSRAM type.
ESP32 works as a web server.
You can check the pictures taken using the built-in WEB server.
Enter the ESP32's IP address and port number in the address bar of your browser.
You can connect using mDNS hostname instead of IP address.