With the SpyCam Arduino source code, an “ESP32-CAM” module and the suggested circuit, you can make a spy camera-microphone
Price:
Other projects from this group
This project is an “ESP32 WiFi Camera Microphone (SpyCam)” firmware arduino source code (.ino) with Time Lapse and Chain Network feature which is based on the “ESP32 WebApp Builder” project. The “Chain Network” is a local network which the devices one by one are connected to the each other.
The SpyCam project uses the “AI Thinker ESP32-CAM” module which has a 2MP Camera, 10 I/O pins, an on-chip LED and one MicroSD slot to store the images and videos. With its tiny sized camera and 240MHz CPU is able to provide a fair quality images and video frames and also a network online stream.
You can either use a “WaveShare Sound Sensor” (or similar) or the suggested circuit as the audio input.
The ADC input (for the audio circuit) is GPIO 33 which is originally connected to the red on-board LED.
This project contains three folders ESP32CamMicProgram (the Arduino source code) and PCB-SCH-BOM.
First open one of the files with Arduino program, then set the settings as the following image (Board and Flash Frequency).
Then turn on the ESP32 module in the “download mode” (GPIO0àGND) and upload the program with using an USB2Serial module.
Also there are the PCB files in the PCB-SCH-BOM folder:
This is the assembled circuit with a 5V power source inside of an enclosure:
The “Chain Network” is a local network which the devices one by one are connected to the each other (Series). In the chain network, the first device is the master of network. The starter (either the master or the last joined module) is directly connected to the WebApp. It sends the command to the next device, and the next device sends it to the next one till the last device. The last device response will be sent to the first device and finally the WebApp via the middle devices.
You can join up to 4 cameras, either with “ESP32 SpyCam” firmware (Audio and Video recorder) rev 1.4 or “ESP32 IPCam” firmware (which has not the audio record feature) rev 1.4 in a chain network and see the online stream of the Cameras.
Plug the power and turn on the circuit and the module in “normal mode”.
Then the LED will blink once (in case of everything is ok). Then you’ll be able to see the module’s hot spot ssid via the WiFi networks in your PC or smart phone.
The default SSID is WiCardCamMic and the default password is 12345678. Connect and go to 192.168.4.1 with a PC or smart phone web browser (Chrome or Firefox).
Here’s the web UI:
Depending on the settings, the online stream can be played as the following modes:
By tap on the video image, the image will scale to full with and original size.
There are two buttons under the scope, with “CAPTURE”, the module will take and save a shot and with tap or click on the “LIGHT” button, the on-chip flash light will turn on and off.
In case of using the “Chain Network” feature, If you join multiple ESP32-Cams to the network, you’ll be able to see an online stream of all of the joined cameras at the same time.
Also you’ll be able to see an online video stream of all of the joined cameras in the “Streams” page:
By one click on each image, the “Capture” and “Light” buttons will appear and by double click on each images, you can enlarge and see the selected camera stream in higher quality.
By tap or click on the “menu button” (top-right), the menu items will be appeared:
This web application is also compatible with desktop and mobile device browsers:
The Web Application is divided to 4 menus. The menus can be selected by click on the menu button.
“Online Stream” refers to the “Live Video Stream” page, "Network" revers to the network video streams and oscilloscopes page, “File Manager” refers to the Memory access page and “Settings” refers to the settings and configuration page.
In the “File Manager” page, you can see the saved images (.jpg format) and the recorded videos.
The videos save in “.jp5” format and in the current firmware revision, you can only play the videos in this page.
Also you can access to another device’s memory in this page with setting the “Target” device in the settings page.
There are 3 buttons under the image:
The left button under the image (blue button) shows the file name and has the direct link of file (you can right click on it and copy the link).
The middle button shows the next file.
And the right button, removes the file.
You can download the images by tap or click on the image.
By click on the play button (middle of the JP5 file image), the video will be downloaded and played along with the audio and you can pause the video by tap or click on the image.
The web application’s settings menu has been divided to 5 parts:
For the programming, use the pre-defined functions in the files which start with “user”.
Add your start-up script to the “userInit()” function in user_init.ino file. No need to do wifi or server configuration. This configuration already have done in the firmware system files (e.g. systemInit() and setup()).
The “userLoop()” function (user_loop.ino) calls repeatedly (like arduino “loop()” function), If your program needs to execute a statement repeatedly (e.g. reading a sensor’s data), insert your script in this function.
The “webapp.h” file is the root page’s script. You can customize sWebApp variable in that file if you’re going to make changes in the Web UI.
Also you can customize the “userGetSettings()” function (user_settings.ino), for adding more settings to the firmware. The WebApp execute this function when you click on the Settings menu.
After you click on the SAVE button of the user-defined settings, the “userSetSettings()” functions will be called.
The “userMain()” in the “user_main.ino” file, calls once when you click on the “Streams” menu (or initially after loading the root page).
The “userSubInit()” in the “user_sub.ino” file, calls once when you click on the “Memory” menu and sends the available devices in the network back.
The “userGlobal()” function in the “user_global.ino” is not working in this revision.
In the AC.h file, if you remove “#define LOG_ENABLE”, the logs will not be shown and the log memory would be released. Also removing this line, enables the “GPIO 1” LED feature.
When LED blinks multiple times, that means an error occurred (either memory error or camera error).
During the recording, the “GPIO 1” LED turns on.
In the user_global.h file, you can change the motion detector image processing accurancy with the following “define” variable:
#define CAP_DIFF_ACCURACY%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp; 110
In The “espCamReset()” function in user_init.ino file you can change the default image sizes:
%26nbsp; /* Size and Quality
%26nbsp; FRAMESIZE_96x96,%26nbsp;%26nbsp;%26nbsp; // 96x96
%26nbsp; FRAMESIZE_QQVGA,%26nbsp;%26nbsp;%26nbsp; // 160x120
%26nbsp; FRAMESIZE_QQVGA2,%26nbsp;%26nbsp; // 128x160
%26nbsp; FRAMESIZE_QCIF,%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 176x144
%26nbsp; FRAMESIZE_HQVGA,%26nbsp;%26nbsp;%26nbsp; // 240x176
%26nbsp; FRAMESIZE_240x240,%26nbsp; // 240x240
%26nbsp; FRAMESIZE_QVGA,%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 320x240
%26nbsp; FRAMESIZE_CIF,%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 400x296
%26nbsp; FRAMESIZE_VGA,%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 640x480
%26nbsp; FRAMESIZE_SVGA,%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 800x600
%26nbsp; FRAMESIZE_XGA,%26nbsp;%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 1024x768
%26nbsp; FRAMESIZE_SXGA,%26nbsp;%26nbsp; %26nbsp;%26nbsp;// 1280x1024
%26nbsp; FRAMESIZE_UXGA,%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 1600x1200
%26nbsp; FRAMESIZE_QXGA,%26nbsp;%26nbsp;%26nbsp;%26nbsp; // 2048*1536*/
%26nbsp; if(ucVidQuality == VID_QUALITY_LOW) //Low
%26nbsp; {
%26nbsp;%26nbsp;%26nbsp; config.frame_size = FRAMESIZE_QVGA;
%26nbsp;%26nbsp;%26nbsp; config.jpeg_quality = 20; //0-63 lower means higher quality
%26nbsp; }
%26nbsp; else if(ucVidQuality == VID_QUALITY_MEDIUM) //Medium
%26nbsp; {
%26nbsp;%26nbsp;%26nbsp; config.frame_size = FRAMESIZE_VGA;
%26nbsp;%26nbsp;%26nbsp; config.jpeg_quality = 10; //0-63 lower means higher quality
%26nbsp; }
%26nbsp; else if(ucVidQuality == VID_QUALITY_HIGH) //High
%26nbsp; {
%26nbsp;%26nbsp;%26nbsp; config.frame_size = FRAMESIZE_SVGA;
%26nbsp;%26nbsp;%26nbsp; config.jpeg_quality = 5; //0-63 lower means higher quality
%26nbsp; }
%26nbsp; else //if(ucVidQuality == VID_QUALITY_NET) //Network Stream
%26nbsp; {
%26nbsp;%26nbsp;%26nbsp; config.frame_size = FRAMESIZE_QQVGA;
%26nbsp;%26nbsp;%26nbsp; config.jpeg_quality = 20; //0-63 lower means higher quality
%26nbsp; }
2.1
- Online Audio stream added
- Compatibility of WiFi Microphone devices for the Network feature
- Audio detector added for the auto recorder
- Selectable online stream mode
- Bugs fixed
2.0
- Faster online stream
- Faster network stream
- Time lapse added
- File manager added
- AVI file export added
- Bugs fixed
1.4
- The capacity of network increased up to 4 streams
- The quality of network stream increased
- Page loading speed increased
- Buffer size increased
- Connection secured with upgrading the secure link feature
- Settings bug fixed
- Auto network channel and target selector added
1.3
- Network Stream feature added.
- Network memory access added.
- Online signal scope added.
- The quality of sound increased.
- .jp5 file added.
- Video player upgraded.
- Bugs fixed.
1.2
- The WebApp appearance (Web UI) changed
- The audio decoding and record added
- The audio decoder added to the WebApp
- SPI mode added
- Supports FAT32 and newer microSD cards
- Flash light during recording
- PIR input added
- SecretLink bug fixed
- The Re-Build of IP Camera firmware rev 1.1 for SpyCam project
1.1
- Motion Sensor
- Recoding videos
- Playing videos and images
- Camera configuration
- Server option
- Internal pages secure link
- Server script
- Shop MAC and IP in config page
1.0
- Video stream
- Saving the images
- LED toggle on/off
- Set module hotspot and modem’s ssid and password
- Automatically connection to the modem
- Config page
- Hidden hotspot button
- Disable hotspot button