ESP32 Cam & EZB

ESP32 Cam
Hardware Platform
ESP32 Cam

This firmware converts an ESP32 Cam module into an EZB with a built-in ARC cam. 

1) For servos in EZB mode with the camera at the same time, only pins D2, D12, D13, D14, D15 are recommended.

2) Check the <a href="/Support/Hardware/ESP32-Cam">ESP32 Cam hardware page</a> for instructions to program the firmware.


About this version
Version Information

- Added editable definitions at the top of the ino source file for enabling/disabling features
Supported Capabilities
  • 12 Byte Unique Identifier
    Each controller has a unique identifier that can be referenced. This is to keep track in EZ-Builder projects which controller is being used and user logic specific to the ID.
  • ADC with 12 bit Resolution
    The ADC captures analog voltage at 8 bit resolution. This means the native value will be an 8 bit (0-4095) from the controller.
  • Can stream video v4 codec
    The controller supports the streaming Video v4 codec on a TCP or UART or USB connection.
  • Hardware UART TX/RX with DMA buffer and adjustable baud rate
    Contains 1 or more hardware UARTs with TX/RX functionality and DMA RX buffering.
  • Native WiFi Connectivity from ARC
    Controller supports WiFi connectivity using TCP between your computer with ARC.
  • PWM Duty on digital ports
    Digital ports can output a PWM between 0% and 100%.
  • PWM servos on digital ports
    The controller supports PWM Servos on digital ports. These are also called Hobby servos.
  • PWM servos on digital ports can release their position
    PWM servo driver on digital ports support the feature to release their holding position.
  • Read/Write Digital I/O Ports
    The ports marked as being digital will respond to Read and Write commands of boolean logic. The status of the digital port will be either TRUE or FALSE when voltage is detected or not, respectively.
  • Transmit Uart TX on all digital ports
    All digital ports support the ability to transmit (TX) serial/uart data at various pre-determined baud rates.

About this version
Version Information

- Increase the auto compression adjustment jump from 1 to 5 so it responds quicker.
Click to show supported capabilities
Supported Capabilities
  • 12 Byte Unique Identifier
    Each controller has a unique identifier that can be referenced. This is to keep track in EZ-Builder projects which controller is being used and user logic specific to the ID.
  • ADC with 12 bit Resolution
    The ADC captures analog voltage at 8 bit resolution. This means the native value will be an 8 bit (0-4095) from the controller.
  • Can stream video v4 codec
    The controller supports the streaming Video v4 codec on a TCP or UART or USB connection.
  • Hardware UART TX/RX with DMA buffer and adjustable baud rate
    Contains 1 or more hardware UARTs with TX/RX functionality and DMA RX buffering.
  • Native WiFi Connectivity from ARC
    Controller supports WiFi connectivity using TCP between your computer with ARC.
  • PWM Duty on digital ports
    Digital ports can output a PWM between 0% and 100%.
  • PWM servos on digital ports
    The controller supports PWM Servos on digital ports. These are also called Hobby servos.
  • PWM servos on digital ports can release their position
    PWM servo driver on digital ports support the feature to release their holding position.
  • Read/Write Digital I/O Ports
    The ports marked as being digital will respond to Read and Write commands of boolean logic. The status of the digital port will be either TRUE or FALSE when voltage is detected or not, respectively.
  • Transmit Uart TX on all digital ports
    All digital ports support the ability to transmit (TX) serial/uart data at various pre-determined baud rates.

About this version
Version Information

- Works with servo & Camera at the same time
- Added a note that the default IP address in AP Mode is (192.168.50.1)
Click to show supported capabilities
Supported Capabilities
  • 12 Byte Unique Identifier
    Each controller has a unique identifier that can be referenced. This is to keep track in EZ-Builder projects which controller is being used and user logic specific to the ID.
  • ADC with 12 bit Resolution
    The ADC captures analog voltage at 8 bit resolution. This means the native value will be an 8 bit (0-4095) from the controller.
  • Can stream video v4 codec
    The controller supports the streaming Video v4 codec on a TCP or UART or USB connection.
  • Hardware UART TX/RX with DMA buffer and adjustable baud rate
    Contains 1 or more hardware UARTs with TX/RX functionality and DMA RX buffering.
  • Native WiFi Connectivity from ARC
    Controller supports WiFi connectivity using TCP between your computer with ARC.
  • PWM Duty on digital ports
    Digital ports can output a PWM between 0% and 100%.
  • PWM servos on digital ports
    The controller supports PWM Servos on digital ports. These are also called Hobby servos.
  • PWM servos on digital ports can release their position
    PWM servo driver on digital ports support the feature to release their holding position.
  • Read/Write Digital I/O Ports
    The ports marked as being digital will respond to Read and Write commands of boolean logic. The status of the digital port will be either TRUE or FALSE when voltage is detected or not, respectively.
  • Transmit Uart TX on all digital ports
    All digital ports support the ability to transmit (TX) serial/uart data at various pre-determined baud rates.

About this version
Version Information
- Works with servos & camera at the same time
Click to show supported capabilities
Supported Capabilities
  • 12 Byte Unique Identifier
    Each controller has a unique identifier that can be referenced. This is to keep track in EZ-Builder projects which controller is being used and user logic specific to the ID.
  • ADC with 12 bit Resolution
    The ADC captures analog voltage at 8 bit resolution. This means the native value will be an 8 bit (0-4095) from the controller.
  • Can stream video v4 codec
    The controller supports the streaming Video v4 codec on a TCP or UART or USB connection.
  • Hardware UART TX/RX with DMA buffer and adjustable baud rate
    Contains 1 or more hardware UARTs with TX/RX functionality and DMA RX buffering.
  • Native WiFi Connectivity from ARC
    Controller supports WiFi connectivity using TCP between your computer with ARC.
  • PWM Duty on digital ports
    Digital ports can output a PWM between 0% and 100%.
  • PWM servos on digital ports
    The controller supports PWM Servos on digital ports. These are also called Hobby servos.
  • PWM servos on digital ports can release their position
    PWM servo driver on digital ports support the feature to release their holding position.
  • Read/Write Digital I/O Ports
    The ports marked as being digital will respond to Read and Write commands of boolean logic. The status of the digital port will be either TRUE or FALSE when voltage is detected or not, respectively.
  • Transmit Uart TX on all digital ports
    All digital ports support the ability to transmit (TX) serial/uart data at various pre-determined baud rates.

About this version
Version Information

- added dynamic camera compression 

- mapped Dx to GPIOx (i.e. ARC D4 = GPIO4, which is the FLASH LED)
Click to show supported capabilities
Supported Capabilities
  • 12 Byte Unique Identifier
    Each controller has a unique identifier that can be referenced. This is to keep track in EZ-Builder projects which controller is being used and user logic specific to the ID.
  • ADC with 12 bit Resolution
    The ADC captures analog voltage at 8 bit resolution. This means the native value will be an 8 bit (0-4095) from the controller.
  • Can stream video v4 codec
    The controller supports the streaming Video v4 codec on a TCP or UART or USB connection.
  • Hardware UART TX/RX with DMA buffer and adjustable baud rate
    Contains 1 or more hardware UARTs with TX/RX functionality and DMA RX buffering.
  • Native WiFi Connectivity from ARC
    Controller supports WiFi connectivity using TCP between your computer with ARC.
  • PWM Duty on digital ports
    Digital ports can output a PWM between 0% and 100%.
  • PWM servos on digital ports
    The controller supports PWM Servos on digital ports. These are also called Hobby servos.
  • PWM servos on digital ports can release their position
    PWM servo driver on digital ports support the feature to release their holding position.
  • Read/Write Digital I/O Ports
    The ports marked as being digital will respond to Read and Write commands of boolean logic. The status of the digital port will be either TRUE or FALSE when voltage is detected or not, respectively.
  • Transmit Uart TX on all digital ports
    All digital ports support the ability to transmit (TX) serial/uart data at various pre-determined baud rates.

About this version
Version Information
- First check-in of the ESP32 Cam firmware

*Note: For servo use with EZ-Cam, only pins 2,4,12-19,21-23,25-27,32-33 are recommended.
Click to show supported capabilities
Supported Capabilities
  • 12 Byte Unique Identifier
    Each controller has a unique identifier that can be referenced. This is to keep track in EZ-Builder projects which controller is being used and user logic specific to the ID.
  • ADC with 12 bit Resolution
    The ADC captures analog voltage at 8 bit resolution. This means the native value will be an 8 bit (0-4095) from the controller.
  • Can stream video v4 codec
    The controller supports the streaming Video v4 codec on a TCP or UART or USB connection.
  • Hardware UART TX/RX with DMA buffer and adjustable baud rate
    Contains 1 or more hardware UARTs with TX/RX functionality and DMA RX buffering.
  • Native WiFi Connectivity from ARC
    Controller supports WiFi connectivity using TCP between your computer with ARC.
  • PWM Duty on digital ports
    Digital ports can output a PWM between 0% and 100%.
  • PWM servos on digital ports
    The controller supports PWM Servos on digital ports. These are also called Hobby servos.
  • PWM servos on digital ports can release their position
    PWM servo driver on digital ports support the feature to release their holding position.
  • Read/Write Digital I/O Ports
    The ports marked as being digital will respond to Read and Write commands of boolean logic. The status of the digital port will be either TRUE or FALSE when voltage is detected or not, respectively.
  • Transmit Uart TX on all digital ports
    All digital ports support the ability to transmit (TX) serial/uart data at various pre-determined baud rates.

ARC Pro

Upgrade to ARC Pro

Your robot can be more than a simple automated machine with the power of ARC Pro!

PRO
Canada
#27  
Now I just need to work out how to get GPIO working with ARC and servos / sensors.  So far I managed to get one servo to vibrate on GPIO0 but that is as good as it gets.
PRO
USA
#28   — Edited
Hi Nink,

DJ has a video of how to use a servo with the esp32's GPIOs

Step 1:
First download version 3 DJ's ESP32 DOIT DevKit v1 - Firmware - Synthiam
https://synthiam.com/Firmware/DJ-s-ESP32-DOIT-DevKit-v1-YGHLAL0K4JE

then get the IP to connect to ARC from the serial monitor

Step 2:
read Esp32 Devkit V1 - Compatible EZB Robot Hardware - Support - Synthiam
Watch this video

Near the end of this video, DJ show how to add a servo - : no vibrating servo here:
https://youtu.be/CbMffZfq5cc

for a test, I first used the Led, then the servo, I used a micro servo (a little off, but), works well

remember the GPIO pins on the esp32 are the D pins in ARC servo controls

Auto-position works great

User-inserted image



EzAng
PRO
Canada
#29  
Hi @EzAng Yes ESP32  works fine. What doesn’t work is the ESP32-CAM with servos.  Finding a free GPIO and making work is the problem.
PRO
USA
#30   — Edited
All I see on this site is:

The pins in ARC are labeled D0 - D23. The ESP32 has GPIO labeled pins, which are not in any ordered sequence. This translation chart below shows the mapping of the ESP GPIO to ARC Dx pins.

User-inserted image



I noticed the DATA2 is a D3 and DATA3 is D4

either the cam works or the servo but not together, you are right, seems like a question for DJ

EzAng
PRO
Synthiam
#31   — Edited
It’s most likely due to the timer or resources that are shared between the servo and camera. Must be a conflict of some sort between those two libraries.
PRO
USA
#32  
Agree

I just used an IoTiny on connection 1  for a servo

esp32 cam on connection 0

that works

esp32 cam can't do it alone

I guess Nink will have to go this rout for now

Thanks

EzAng
PRO
Canada
#33  
Timing is always fun. My first computer was a zx80 and the only way you could get code to run without the screen flickering was to time the execution of the code exactly between the update of the screen frames so the screen wouldn't flicker.  Several people on the interwebs are using ESP32-Cam for servos and cameras at same time so I am sure it is possible.
PRO
USA
#34   — Edited
It was long time ago but I got two servos (pan & tilt) working with the ESP32-CAM.

https://github.com/madhephaestus/ESP32Servo
recommended pins: pins 2,4,12-19,21-23,25-27,32-33

ESP32-CAM SD Card:
User-inserted image


Safe pins:
DATA2 = 12 (DJ implementation = 4)
CLK= 14 (DJ implementation = 3)
DATA0 = 2 (Not mapped in DJ Implementation)

Please try:

Servos:
EZB Port 3 = Board HS2_CLK (Gpio 14)
EZB Port 4 = Board HS2_DATA2 (Gpio 12)
PRO
USA
#35  
can you point me to a website?
PRO
USA
#36   — Edited

Quote:

can you point me to a website?
@EzAng can you be more specific ?

Regarding ARC->ESP32CAM everything you need is in this thread.
EZB port mapping to ESP32 GPIO 
ESP32-CAM pinout.

Schematic is here: (ESP32_CAM_V1.6.pdf)
https://github.com/SeeedDocument/forum_doc/tree/master/reg#ESP32_CAM_V1.6

Recommend pins for ESP32 servo Library used in DJ's implementation:
https://github.com/madhephaestus/ESP32Servo

ESP32 Documentation about SDCARD/SDIO implementation:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/sdio_slave.html
I picked the Gpio 14, Gpio 12 because they are safe, for example GPIO13 is a SPI/CS So will activate the SDCARD when low so not safe.

PRO
USA
#37   — Edited
sorry I was talking to Nink
he said Several people on the interwebs are using ESP32-Cam for servos and cameras at same time so I am sure it is possible.

However I will try what you proposed

still think my best solution for me is:

an IoTiny on connection 1 for many servos

esp32 cam on connection 0 - camera

that works for me
PRO
Canada
#38  
If you install the standard ESP32 code on the ESP32 CAM all works fine with Servo's
PRO
Synthiam
#39  
Maybe the boards differ between what I have and you.. There's a portion of the code that translates arduino pin index to gpio. You can edit it here...

User-inserted image
PRO
Canada
#40  
I am probably doing something wrong but this is what I had on the ESP32-CAM 
ARC  ESP32-CAM
D16 -GPIO 0 - Nothing
D5  - GPIO 13 - Crashes
D3  - GPIO 14 - Move servo wait 1 minute it moves sometimes just vibrates
D4  - GPIO 12 - servo just gets hot but release actually works :-)
PRO
Synthiam
#41  
I think what would help is a better way to I’d identify the mapping of ports. I wanted d0 to be gpio0, for example. 

a breakout with an led on each gpio. And without the camera running, turn on each io to find the mapping correlation. 

I can’t seem to find a mapping document online though. Seems like someone must have thought of this you’d think?
PRO
Synthiam
#42  
Updated with new version that has dynamic camera quality and mapped gpio correctly

Digital ports work fine (on/off), Read

Also, D4 == FLASH LED

Servo still doesn't work - seems the servo library uses resources of the camera. Needs more look'n at
PRO
Synthiam
#43  
Updated to work with servos and camera at the same time
PRO
Canada
#44   — Edited
Hi Thanks for this, Ports D2, D12, D13, D14, D15 all work now with a servo. D4 also works but only with flash :-)
D0, D1, D3, D16 don't work but thats fine.  5 is great and we still have TX RX

Questions
I have some servo's that work on the ESP32  but don't work on ESP32-CAM? I copied the ESP32 servo and pwm files over to ESP32-CAM but still same problem. I officially hate this module.

The Camera distortion takes a while to recover would it be a better option to put in ranges
Example
If image size is > 5000 and < 5999 compression =10
If image size is > 6000 and < 6999 compression = 12
etc
this way it recovers straight away and doesn't increment 1 at a time. When my camera looks at a solid image and moves to a complex image it takes a while to recover and when it goes the other way it takes a while to get the best quality again. 

Thanks again I really appreciate you making this. 
Nink
PRO
USA
#45   — Edited
Ez Esp32 cam v4  works good also with Arc
PRO
Synthiam
#46   — Edited
@Nink great to hear it works. Probably a better idea to increase the step from 1 to 5 or something. It's impossible to relate a compression value to image sizes.

Also, feel free to modify the code in the firmware. You can upload your own firmware for the esp32 as well. Just go to your account and click My Content -> Firmwares -> Create a Firmware

If it's based on my firmware, check the capabilities that are the same in my firmware. Just add the same ones and you'll be golden.