🛠 Caméra MIPI CSI : brancher une Raspberry Pi Camera (OV5647/IMX219) sur la ZERO 3W
Objectifs
Un des atouts inhabituels de la ZERO 3W : son port caméra MIPI CSI (4 lanes, connecteur FPC 22 broches 0,5 mm) accepte les modules Raspberry Pi Camera V1.3 (OV5647) et V2 (IMX219) — rare sur une carte non-Raspberry. Vous allez câbler correctement la nappe, activer le driver de capteur, et capturer une image via V4L2. C'est la brique de base des projets caméra IP, vision NPU et robotique de la fiche projets (voiture IPC, KVM, etc.).
Matériel
- 1 Radxa ZERO 3W (Radxa OS bookworm b1 recommandée : c'est l'image officiellement fully tested)
- 1 module Raspberry Pi Camera V1.3 (OV5647) ou V2 (IMX219)
- 1 nappe CSI 22 broches (attention au sens des contacts !)
- Tuto GPIO : le connecteur 40 broches n'est pas requis ici, seul le port CSI compte
Procédure
- Carte éteinte, ouvrez le loquet du connecteur FPC, insérez la nappe contacts vers la carte (sens à vérifier sur le silk du connecteur), refermez. Sur les caméras Pi, la nappe est plus courte du côté objectif — repérez-vous.
- Activez l'overlay du capteur. Sous Radxa OS, l'outil
rsetup(menu overlays) expose les device trees des capteurs supportés ; pour OV5647/IMX219, activez l'overlay correspondant puis redémarrez.
sudo rsetup # Menu > Overlay > caméra (ov5647 ou imx219)
sudo reboot
- Après reboot, vérifiez la chaîne capteur → pipeline :
dmesg | grep -iE 'ov5647|imx219|mipi|isp' # le driver a-t-il répondu sur I2C2 ?
v4l2-ctl --list-devices # apparaît : /dev/video-csi ou rkcif
# Capture d'une frame :\nsudo apt install v4l-utils
v4l2-ctl -d /dev/video-csi --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap --stream-count=1 --stream-to=frame.raw
# Ou via ffmpeg si présent (nom du périphérique selon l'image) :
ffmpeg -f v4l2 -video_size 1920x1080 -i /dev/video-csi -frames:v 1 frame.jpg
- Le capteur est piloté par I2C (I2C2_SCL/SDA_M1 sur le connecteur CSI) :
i2cdetect -lpuis le bus concerné doit montrer l'adresse du capteur (0x10/0x36 typiques OV5647/IMX219).
Vérification attendue
dmesg affiche la sonde réussie du capteur (ov5647 found / imx219 x:x) ; v4l2-ctl --list-devices liste un pipeline vidéo lié au CSI ; une frame .raw est produite de taille cohérente (1920×1080 NV12 ≈ 3,1 MB). Une image floue au premier plan est normale : ces modules focusent de série à l'infini, tournez doucement l'objectif.
Erreurs fréquentes
- Nappe insérée à l'envers : rien sur le bus I2C, aucun message capteur dans dmesg — éteignez et retournez-la.
- Loquet FPC mal refermé : contact partiel, image bruitée ou détection aléatoire.
- Activer l'overlay ET un autre périphérique sur I2C2 en conflit : le CSI occupe I2C2_M1, tenez-en compte dans vos overlays.
- Attendre libcamera/rpicam comme sur un Raspberry Pi : ici le pipeline est Rockchip (rkcif/rkisp sur BSP) — les outils rpicam-* ne s'appliquent pas.
- Chercher la caméra sur le connecteur 40 broches : le CSI est un connecteur dédié 22 broches, distinct du GPIO.
- Image mainline : le support capteur y est moins mûr que sur le BSP Radxa — pour un projet caméra fiable, restez sur l'image officiellement testée (bookworm b1).
Autres tutoriels pour cette carte
- Premiers pas avec la Radxa ZERO 3W : flasher Radxa OS et démarrer
- Wi-Fi 6 et Bluetooth 5.4 : se connecter, choisir l'antenne, connaître sa révision
- GPIO avec libgpiod : faire clignoter une LED et lire un bouton
- Installer le système sur l'eMMC : rkdeveloptool, MaskROM et gain de fiabilité
- Noyau mainline avec Armbian : vérifier le device tree, ajouter un overlay, lire le SARADC
- NPU 0,8 TOPS : inférence RKNN (YOLO, Whisper) sur la ZERO 3W
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash