
Arduino Quick Start
Example program for StackChan Camera usage.
#include "M5Unified.h"
#include "esp_camera.h"
class GC0308 {
private:
public:
camera_fb_t* fb;
sensor_t* sensor;
camera_config_t* config;
bool begin();
bool get();
bool free();
};
static camera_config_t camera_config = {
.pin_pwdn = -1,
.pin_reset = -1,
.pin_xclk = -1,
.pin_sscb_sda = 12,
.pin_sscb_scl = 11,
.pin_d7 = 47,
.pin_d6 = 48,
.pin_d5 = 16,
.pin_d4 = 15,
.pin_d3 = 42,
.pin_d2 = 41,
.pin_d1 = 40,
.pin_d0 = 39,
.pin_vsync = 46,
.pin_href = 38,
.pin_pclk = 45,
.xclk_freq_hz = 20000000,
.ledc_timer = LEDC_TIMER_0,
.ledc_channel = LEDC_CHANNEL_0,
.pixel_format = PIXFORMAT_RGB565,
.frame_size = FRAMESIZE_QVGA,
.jpeg_quality = 0,
.fb_count = 2,
.fb_location = CAMERA_FB_IN_PSRAM,
.grab_mode = CAMERA_GRAB_WHEN_EMPTY,
.sccb_i2c_port = -1,
};
bool GC0308::begin()
{
M5.In_I2C.release();
esp_err_t err = esp_camera_init(&camera_config);
if (err != ESP_OK) {
return false;
}
sensor = esp_camera_sensor_get();
return true;
}
bool GC0308::get()
{
fb = esp_camera_fb_get();
if (!fb) {
return false;
}
return true;
}
bool GC0308::free()
{
if (fb) {
esp_camera_fb_return(fb);
return true;
}
return false;
}
GC0308 Camera;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
if (!Camera.begin()) {
Serial.println("Camera Init Fail");
}
Serial.println("Camera Init Success");
Camera.sensor->set_framesize(Camera.sensor, FRAMESIZE_QVGA);
}
void loop() {
if (Camera.get()) {
M5.Display.pushImage(0, 0, M5.Display.width(),
M5.Display.height(),
(uint16_t *)Camera.fb->buf);
Camera.free();
}
}After flashing successfully, the StackChan screen will display the camera feed in real time.
