5db6db0128
This uses the esp32-camera code instead of our own homebrewed camera code. In theory it supports esp32, esp32-s2 and esp32-s3, as long as they have PSRAM. This is very basic and doesn't support changing any camera parameters, including switching resolution or pixelformat. This is tested on the Kaluga (ESP32-S2) and ESP32-S3-Eye boards. First, reserve some PSRAM by putting this line in `CIRCUITPY/_env`: ``` CIRCUITPY_RESERVED_PSRAM=524288 ``` and hard-reset the board for it to take effect. Now, the following script will take a very low-resolution jpeg file and print it in the REPL in escape coded form: ```python import board import esp32_camera c = esp32_camera.Camera( data_pins=board.CAMERA_DATA, external_clock_pin=board.CAMERA_XCLK, pixel_clock_pin=board.CAMERA_PCLK, vsync_pin=board.CAMERA_VSYNC, href_pin=board.CAMERA_HREF, pixel_format=esp32_camera.PixelFormat.JPEG, i2c=board.I2C(), external_clock_frequency=20_000_000) m = c.take() if m is not None: print(bytes(m)) ``` Then on desktop open a python repl and run something like ```python >>> with open("my.jpg", "wb") as f: f.write(<BIG PASTE FROM REPL>) ``` and open my.jpg in a viewer.
56 lines
2.4 KiB
C
56 lines
2.4 KiB
C
#include "py/objtuple.h"
|
|
#include "shared-bindings/board/__init__.h"
|
|
|
|
STATIC const mp_rom_obj_tuple_t camera_data_tuple = {
|
|
{&mp_type_tuple},
|
|
8,
|
|
{
|
|
MP_ROM_PTR(&pin_GPIO11),
|
|
MP_ROM_PTR(&pin_GPIO9),
|
|
MP_ROM_PTR(&pin_GPIO8),
|
|
MP_ROM_PTR(&pin_GPIO10),
|
|
MP_ROM_PTR(&pin_GPIO12),
|
|
MP_ROM_PTR(&pin_GPIO18),
|
|
MP_ROM_PTR(&pin_GPIO17),
|
|
MP_ROM_PTR(&pin_GPIO16),
|
|
}
|
|
};
|
|
|
|
|
|
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
|
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
|
|
|
|
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO0) },
|
|
{ MP_ROM_QSTR(MP_QSTR_BUTTONS), MP_ROM_PTR(&pin_GPIO1) },
|
|
{ MP_ROM_QSTR(MP_QSTR_MIC_SDO), MP_ROM_PTR(&pin_GPIO2) },
|
|
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, // LCD
|
|
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO4) },
|
|
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO5) },
|
|
{ MP_ROM_QSTR(MP_QSTR_CAMERA_DATA), MP_ROM_PTR(&camera_data_tuple) },
|
|
{ MP_ROM_QSTR(MP_QSTR_CAMERA_VSYNC), MP_ROM_PTR(&pin_GPIO6) },
|
|
{ MP_ROM_QSTR(MP_QSTR_CAMERA_HREF), MP_ROM_PTR(&pin_GPIO7) },
|
|
{ MP_ROM_QSTR(MP_QSTR_CAMERA_PCLK), MP_ROM_PTR(&pin_GPIO13) },
|
|
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_GPIO14) },
|
|
{ MP_ROM_QSTR(MP_QSTR_CAMERA_XCLK), MP_ROM_PTR(&pin_GPIO15) },
|
|
{ MP_ROM_QSTR(MP_QSTR_LCD_SCK), MP_ROM_PTR(&pin_GPIO21) }, // LCD
|
|
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO38) },
|
|
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO39) },
|
|
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO40) },
|
|
{ MP_ROM_QSTR(MP_QSTR_MIC_SCK), MP_ROM_PTR(&pin_GPIO41) },
|
|
{ MP_ROM_QSTR(MP_QSTR_MIC_WS), MP_ROM_PTR(&pin_GPIO42) },
|
|
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO43) }, // LCD
|
|
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO44) }, // LCD
|
|
// { MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) }, // LCD -- unused?
|
|
// { MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) }, // LCD -- unused?
|
|
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO47) }, // LCD
|
|
{ MP_ROM_QSTR(MP_QSTR_BACKLIGHT), MP_ROM_PTR(&pin_GPIO48) }, // LCD
|
|
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO48) }, // LCD
|
|
|
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
|
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
|
|
|
|
// TODO
|
|
// { MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)},
|
|
};
|
|
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|