ESP32 Remote Camera

Work in progress

Hardware

Adafruit HUZZAH32 ESP32 Feather

Manufacturer Site

Digi-Key

ThePiHut

Adafruit HUZZAH32 ESP32 Feather

A very high quality, and feature-rich ESP32 board with a built-in Lithium-Ion/Polymer battery charger. It's on the expensive side, but the built-in battery charger (and the pre-soldered versions from ThePiHut) make it worthwhile, especially if used for multiple or complex projects.

Arducam 5MP OV5642 Mini SPI Camera Module

Manufacturer Site

Digi-Key

ThePiHut

Arducam 5MP OV5642 Mini SPI Camera Module

This is an excellent, high-quality, simple camera module that uses SPI (and I2C for commands) for communicating with any microcontroller. You can attach any M12 Lens on the camera for different viewing angles.

MicroSD Card Module

Manufacturer Site

Digi-Key

ThePiHut

MicroSD Card Module

High quality feature-rich (somewhat expensive), MicroSD Card Module. MicroSD Card Modules are known to be fussy about signal integrity, so I recommend using tight and secure wires, and soldering the included headers. Of course, you need a microSD card which should be using the FAT filesystem, most come with this by default but if not then simply format it using your tool of choice, this will erase all data on it.

3.7V Lipo Battery

3.7V Lipo Battery

I used the Seamuing 3.7V 3000mAh Lipo Battery (bought from amazon but no longer sold as of writing), however any 3.7V Lipo battery will suffice as long as it uses a JST-PH 2.0 2-Pin Connector, otherwise you will need to solder the wires to an adapter, which is what I needed to do as the battery I used uses a JST 1.25 connector. The black (negative?) wire is the one adjacent to the micro-USB port, be careful to not get this wrong as Adafruit claim doing so could fry your board. As always, be careful and cautious with batteries, most batteries nowadays are very safe and smart but always act and behave as if they are not (and they all secretly want to explode), just in case.

Software

Software Setup

Follow the ESP-IDF installation guide before starting. You'll need to have the following in your ~/.bashrc file in order to use ESP-IDF tools from any shell:

addPath() {
    export PATH="$*:$PATH"
}

addPath "/home/$(echo $USER)/data/ESP32-IDF/xtensa-esp32-elf"
export IDF_PATH="/home/$(echo $USER)/data/ESP-IDF/esp-idf"
export IDF_PYTHON_ENV_PATH="/usr/bin/python3.8"

alias esp-export=". $IDF_PATH/export.sh"

Change the above appropriately if needed, you will need to call esp-export once per terminal session before any ESP-IDF operations such as idf.py build

CLion

Add the environment script ./setup-env.sh to the current toolchain so that CLion loads the path variables correctly, this solves the issue with unknown C, CXX and ASM compilers as well as any "missing dependencies" problems that CMake would otherwise exclaim, see JetBrains' guide for how to do this and read more about ESP-IDF setup on CLion here.

Multi-root CMake Project

CLion is not yet capable of functioning with multiple root CMake projects. This project has 2 CMake roots, ./main/ (the main component with the actual application) and ./test/ (the test component for running unit tests on device). The IDE will only "be aware" of 1 of these after right-clicking "Load CMake Project" on ./CMakeLists.txt for main or ./test/CMakeLists.txt for test. When one is loaded the other will have errors in the IDE despite being able to build and run both from idf.py or cmake directly from the command-line. It is a minor inconvenience that you will need to "Load CMake Project" when switching between editing either of these components, but at least it makes sense as these are the only 2 "applications" that can be run on the device and only one can be run at a given time.