- 30
Aug - 2020M5Stack, MicroPython
2 min | 19052#MicroPython: OV2640 camera module extended (M5Camera, ESP32-CAM, etc.)
M5Stack, MicroPython | 2 min | 19052
Table of contentShowI've just upgraded the MicroPython camera module for ESP32. The OV2640 uses I2S and two months ago, I wrote/updated the I2S connector to support more boards (check the hardware and software section below).
This time with the help of @joerggollnick, the driver was extended to include the following camera settings:
frame size,white balance,saturation,brightness,contrastspecial effects,image quality,vertical flip, andhorizontal flip.Hardware and Software
DIY: Instructions
I've included a compiled MicroPython firmware that supports camera and BLE (check the firmware folder). The firmware was compiled using esp-idf 4.x with hash version 4c81978 and MicroPython with hash version 836bca9.
To flash it to the board, you need to type the following:
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 micropython_836bca9_esp32_idf4.x_ble_camera.binMore information is available in this tutorial.
If you want to compile your driver from scratch follow the section
DIY (from Scratch)from this article: MicroPython: Support for cameras: M5CAMERA, ESP32-CAM etc..Application Example
I've included an application to test the camera and its settings. To deploy the app on your ESP board, follow these steps:
- Clone the repository:
git clone https://github.com/lemariva/uPyCam.git - Rename the file
config.py.sampletoconfig.pyand configure: a. Your WI-FI credentials, b. The camera that you have (M5CAMERA/ESP32-CAM). If you have another camera, you need to configure the pins in the filewebserver.py. - Upload the code using VSCode and the PyMark extension. If you need the instructions, follow this article for more information: MicroPython: Visual Studio Code (VSCode) as IDE
- Open a browser and type the URL that your board publishes in the terminal:
I (4380) network: GOT_IP network config: ('192.168.178.165', '255.255.255.0', '192.168.178.1', '192.168.178.1')In my case, it is
http://192.168.178.165and you will get something like Fig. 1.
![Camera webserver]()
Fig. 1: Camera webserver.The new camera settings are the following:
Setting Description Values camera.saturation(int value)image saturation from -2to2(0default)camera.brightness(int value)image brightness from -2to2(0default)camera.contrast(int value)image contrast from -2to2(0default)camera.quality(int value)image quality from 10(high) to63(low)camera.flip(int value)vertical flip 0or1camera.mirror(int value)horizontal flip 0or1camera.framesize(int value)image size FRAME_96X96FRAME_QQVGAFRAME_QCIF
FRAME_HQVGAFRAME_240X240FRAME_QVGA
FRAME_CIFFRAME_HVGAFRAME_VGA
FRAME_SVGAFRAME_XGAFRAME_HD
FRAME_SXGAFRAME_UXGAFRAME_FHD
FRAME_P_HDFRAME_P_3MPFRAME_QXGA
FRAME_QHDFRAME_WQXGAFRAME_P_FHDFRAME_QSXGAcamera.speffect(int value)color effects for the image EFFECT_NONE (default)EFFECT_NEGEFFECT_BW
EFFECT_REDEFFECT_GREENEFFECT_BLUEEFFECT_RETROcamera.whitebalance(int value)white balance WB_NONE (default)WB_SUNNYWB_CLOUDYWB_OFFICEWB_HOMEThat's all you need. If you have any questions, please leave them in the comment section below! :)
- Clone the repository:
We use cookies to improve our services. Read more about how we use cookies and how you can refuse them.









Empty