🛠 Capturer une image avec la caméra GC2145 (DCMI)
Objetivos
Inicializar la cámara a color de 2 Mpx GalaxyCore GC2145 integrada, capturar imágenes QVGA 320×240 en RGB565 a través del bus paralelo DCMI del STM32H747 y transmitirlas por USB.
Hardware
- Arduino Nicla Vision (sensor GC2145 integrado — no usar Himax HM01B0, reservado para otras tarjetas)
- Núcleo « Arduino Mbed OS Nicla Boards » (la biblioteca Camera viene incluida con el núcleo, no como repositorio separado)
- PC con un visualizador de imágenes brutas RGB565 (p. ej., el sketch oficial Processing CameraRawBytesVisualizer)
- Restricción clave: por encima de 320×240 se necesitaría una RAM externa (SDRAM) que la Nicla Vision NO tiene — mantenerse en QVGA
Código completo
// Adapte de l'exemple officiel CameraCaptureRawBytes (ArduinoCore-mbed)
#include "camera.h"
#include "gc2145.h"
GC2145 galaxyCore; // capteur couleur 2MP embarque
Camera cam(galaxyCore); // API Camera commune
#define IMAGE_MODE CAMERA_RGB565
FrameBuffer fb; // tampon par defaut 320x240x2
void blinkLED(uint32_t count) {
pinMode(LED_BUILTIN, OUTPUT);
while (count--) { digitalWrite(LED_BUILTIN, LOW); delay(50);
digitalWrite(LED_BUILTIN, HIGH); delay(50); }
}
void setup {
// QVGA 30 FPS ; clignotement infini si le capteur ne repond pas
if (!cam.begin(CAMERA_R320x240, IMAGE_MODE, 30)) blinkLED(0xFFFFFFFF);
blinkLED(5); // 5 clignotements = camera OK
}
void loop {
if (!Serial) { Serial.begin(115200); while (!Serial); }
if (cam.grabFrame(fb, 3000) == 0) // timeout 3 s
Serial.write(fb.getBuffer, cam.frameSize); // frame RGB565 brute
else
blinkLED(20); // erreur de capture
}
Verificación esperada
Al cargar el programa, 5 parpadeos del LED verde confirman la inicialización del GC2145. El visualizador (Processing, modo RGB565 320×240) muestra un flujo fluido. Un parpadeo infinito desde la configuración inicial (setup) indica que el sensor no responde en el bus (verificar que el núcleo esté actualizado).
Errores frecuentes
- Apuntar a más de QVGA: las resoluciones superiores a 320×240 requieren SDRAM.h y la RAM externa de una Portenta; en la Nicla Vision el búfer cabe justo en la RAM interna — de lo contrario, errores de asignación o tramas corruptas.
- Tramas corruptas en el visualizador: bug conocido (arduino/ArduinoCore-mbed#559, serie/endianess); verificar una tasa de baudios alta (921600 o más) y el modo de orden de bytes del visualizador.
- Buscar un HM01B0 con obturador global: el controlador HM01B0/HM0360 de la librería Camera NO corresponde a esta tarjeta; aquí es correctamente
GC2145 galaxyCore. - Olvidar el tiempo de espera (timeout):
grabFrame(fb)sin demora puede bloquear; pasar 3000 ms como se muestra arriba. - Tasa de baudios USB: en Mbed, el CDC a menudo ignora el valor; mantener 115200 en el lado del visualizador y limitar el caudal en origen.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_rgb.inoArduinoimu_lsm6dsox.inoArduinotof_distance.inoArduinomicro_pdm.inoArduinocamera_capture.inoArduinowifi_scan.inoArduino