🛠 Capturer une image avec la caméra GC2145 (DCMI)
Objectifs
Initialiser la caméra couleur 2 Mpx GalaxyCore GC2145 embarquée, capturer des images QVGA 320×240 en RGB565 via le bus parallèle DCMI du STM32H747, et les streamer sur USB.
Matériel
- Arduino Nicla Vision (capteur GC2145 intégré — pas de Himax HM01B0, réservé à d'autres cartes)
- Core « Arduino Mbed OS Nicla Boards » (la bibliothèque Camera est fournie avec le core, pas en dépôt séparé)
- PC avec un visualiseur d'images brutes RGB565 (ex. le sketch Processing CameraRawBytesVisualizer officiel)
- Contrainte clé : au-delà de 320×240 il faudrait une RAM externe (SDRAM) que la Nicla Vision n'a PAS — rester en QVGA
Code complet
// 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
}
Vérification attendue
Au téléversement, 5 clignotements de la LED verte confirment l'initialisation du GC2145. Le visualiseur (Processing, mode RGB565 320×240) affiche un flux fluide. Un clignotement infini dès le setup = le capteur ne répond pas sur le bus (vérifier core à jour).
Erreurs fréquentes
- Viser plus que QVGA : les résolutions supérieures à 320×240 nécessitent SDRAM.h et la RAM externe d'une Portenta ; sur Nicla Vision le tampon tient pile en RAM interne — sinon erreurs d'allocation ou trames corrompues.
- Frames corrompues dans le visualiseur : bug connu (arduino/ArduinoCore-mbed#559, série/endianess) ; vérifier le baudrate élevé (921600 ou plus) et le mode d'octet ordering du visualiseur.
- Chercher un HM01B0 global shutter : le pilote HM01B0/HM0360 de la lib Camera ne concerne PAS cette carte ; ici c'est bien
GC2145 galaxyCore. - Oublier le timeout :
grabFrame(fb)sans délai peut bloquer ; passer 3000 ms comme ci-dessus. - Baudrate USB : sur Mbed, le CDC ignore souvent la valeur ; garder 115200 côté visualiseur et limiter le débit en amont.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_rgb.inoArduinoimu_lsm6dsox.inoArduinotof_distance.inoArduinomicro_pdm.inoArduinocamera_capture.inoArduinowifi_scan.inoArduino