🛠 Caméra DVP 8 bits sur le connecteur CSI et vision OpenCV
Objectifs
Le connecteur CSI 24 broches du BPI-M2 Zero est une rareté dans ce format : un bus caméra parallèle 8 bits DVP/CCIR656 (D0-D7, PCLK, HSYNC, VSYNC, MCLK, I2C de contrôle sur PE12/PE13, alim commandée par CSI-PWR-EN sur PD14) pour capteurs type OV5640 jusqu'à ~5 MP. Attention au piège de vocabulaire repris par certains articles : c'est du DVP parallèle, PAS du MIPI — les caméras MIPI ne conviennent pas. Vous allez câbler la nappe, vérifier le pipeline vidéo côté noyau et dérouler une détection de visage OpenCV.
Matériel
- BPI-M2 Zero + image vendor Debian kernel 4.4 (couverture CSI la plus complète ; la prise en charge mainline sun6i-csi pour cette carte reste partielle)
- Module caméra OV5640 (ou compatible DVP 8 bits) avec nappe FPC 24 broches
- Écran HDMI ou flux réseau pour visualiser
- Dissipateur optionnel : la capture + OpenCV chauffe les 4 Cortex-A7
Code complet
# 1) Le pipeline vidéo est-il présent ?
v4l2-ctl --list-devices 2>/dev/null || sudo apt install -y v4l-utils
v4l2-ctl -d /dev/video0 --all | head -25 # formats supportés (YUYV 1280x720...)
# 2) Capture d'une image de contrôle
ffmpeg -f video4linux2 -i /dev/video0 -ss 1 -frames:v 1 test.jpg 2>/dev/null
# 3) Détection de visage OpenCV (léger, adapté aux 512 Mo)
sudo apt install -y python3-opencv
python3 - <<'EOF'
import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
face = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
while True:
ok, frame = cap.read
if not ok:
print('pas de trame — vérifier nappe et alimentation capteur')
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
for x, y, w, h in face.detectMultiScale(gray, 1.2, 5):
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('BPI-M2 Zero CSI', frame)
if cv2.waitKey(1) == 27:
break
EOF
Vérification attendue
v4l2-ctl liste le périphérique de capture avec des formats YUYV ; la photo de contrôle est nette et correctement exposée ; la fenêtre OpenCV affiche le flux et encadre les visages. En cas de trame entièrement noire ou verte, commencer par vérifier le sens de la nappe FPC.
Erreurs fréquentes
- Brancher une caméra MIPI (nappe identique, protocole différent) : le connecteur est DVP parallèle, seul un capteur DVP 8 bits convient.
- Inverser la nappe FPC : contact partiel, image bruitée ou capteur absent du bus I2C.
- Exiger la CSI sous Armbian mainline récent : la couverture du contrôleur pour cette carte est incomplète, l'image vendor 4.4 reste la voie sûre.
- Viser 5 MP en pleine fréquence OpenCV : avec 512 MB, rester en 640×480 pour la vision temps réel.
- Oublier CSI-PWR-EN (PD14) : sans l'autorisation d'alimenter le capteur, aucun 2e périphérique I2C n'apparaît sur le bus caméra.
Autres tutoriels pour cette carte
- Flasher Armbian et premier boot du BPI-M2 Zero
- LED et bouton avec libgpiod sur le port 40 broches
- Wi-Fi AP6212 : le piège de l'antenne U.FL non fournie
- Console série sur USB-OTG : dépanner sans réseau ni câble UART
- Activer le bus SPI0 et piloter un petit écran TFT
- Survivre avec 512 Mo : zram, swap compressé et services légers
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash