If you are a current student, please Log In for full access to the web site.
Note that this link will take you to an external site (https://shimmer.csail.mit.edu) to authenticate, and then you will be redirected back to this page.
1) Overview
A number of folks in the internets have integrated camera functionality with the ESP32. They're usually doing so using camera boards of this type, which while they can be very cheap, require significant processing on the side of the microcontroller. This often means that integrating additional equipment with the micrcontroller can be a hassle.
ArduCAM which makes the board above, also produces a series of cameras with additional onboard processing to simplify the integration. this camera here costs more, but is an attractive option since it has a CPLD (Complex Programmable Logic Device which is like an FPGA...a Field-Programmable-Gate-Array) that is a dedicated piece of hardware to do the heavy-lifting of image processing allowing the microcontroller to focus on other tasks...in other words it'll be much easier to have the ESP32 multi-task and to write non-blocking code.
2) Libraries
ArduCAM, the company which sells the modules above, does not have their libraries released separately to interface. Instead they sell an ESP32 Uno like board, but we aren't using that. What we can do instead is wire it up like the following:
Then download the entire repo here: ARDUCAM REPO and when it is downloaded, drag the following libraries into your standard Documents>Arduino>libraries folder:
- ESP32WebServer
- ArduCAM
Inside of ArduCAM, go into memorysaver.h
and make sure only:
#define OV2640_MINI_2MP
is defined and inside that if/else in that file do:
#define OV2640_CAM
Then download this slightly modified file and finally start at Step 4 here: http://www.arducam.com/knowledge-base/arducam-esp32/ to get it rendering images in a web-brower.
Chances are you'll probably want to POST your images that you take, in which case I'd recommend you figure out how to get the jpg data back from the camera object, then base-64 encode it, and send it up in json and then decode it in Python on the other end and write a jpg.