Comment faire apparaître la caméra et l'écran sur une carte de support de module de calcul
Nous avons développé notre propre Compute Module Carrier Board, appelée PCCB. Elle est compatible avec les Raspberry Pi Compute Modules 1 - 3 Plus, et possède un certain nombre de fonctionnalités très utiles pour une utilisation industrielle (RS232, CAN Bus, RS485, TPM, DC/DC Stepdown).
Aujourd'hui, j'ai vérifié la caméra et l'interface d'affichage 7'' que nous fournissons également sur la carte.
Notez les connecteurs DISP1 et CAM1.
Connaissances de base sur la caméra
Le module caméra possède deux broches GPIO supplémentaires. Elles sont désignées :
- CAM_IO0 ou CAM_GPIO / CAMERA_0_SHUTDOWN
- CAM_IO1 ou Ligne LED / CAMERA_0_LED
CAM_IO0 est utilisée pour piloter la caméra, et l'allumer ou l'éteindre, lorsque cela est nécessaire. Cela ne peut pas être fait manuellement en mettant la broche en haut au moment de l'exécution - le Blob VideoCore doit être capable de le faire.
(il est éventuellement possible de le mettre en permanence en position haute, mais cela laissera la caméra sous tension et augmentera la consommation d'énergie).
Le CAM_IO1 (LED Line) était utilisé sur la caméra v1 précédemment pour piloter la LED. Elle n'est pas utilisée sur la caméra Raspberry Pi v2, selon les ingénieurs de Raspberry Pi.
Le brochage du connecteur de la caméra (à la fois sur la caméra Raspberry Pi et sur notre carte) est le suivant :
- GND
- CAM_D0_N
- CAM_D0_P
- GND
- CAM_D1_N
- CAM_D1_P
- GND
- CAM_CK_N
- CAM_CK_P
- GND
- CAM_IO0
- CAM_IO1
- CAM_SCL
- CAM_SDA
- CAM_3V3
La caméra utilise généralement le bus I2C interne (SDA0 et SCL0 disponibles, par exemple, sur GPIO0 et GPIO1).
Schémas
Voici les schémas de notre disposition matérielle :
Comme vous pouvez le voir (et comme discuté précédemment), nous utilisons GPIO_27 comme CAM_IO0 et GPIO_26 comme CAM_IO1.
L'écran n'a pas besoin de broches GPIO supplémentaires.
L'écran et la caméra utilisent le bus I2C interne, sur les broches GPIO_1 et GPIO_0.
dt-blob.bin
Ce fichier est une partie optionnelle des fichiers de démarrage du Raspberry Pi. Il est placé dans /boot et remplace un dt-blob.bin intégré qui est compilé dans start.elf.
Il communique la configuration des broches GPIO au firmware fonctionnant sur le VideoCore (VCOS, Video Core OS). Comme les cartes porteuses de modules de calcul, telles que la nôtre, auront des configurations de broches personnalisées, fréquemment, ce dt-blob.bin doit être fourni.
Voici plus d'informations sur ce fichier, y compris un processus de démarrage étape par étape :
- https://www.raspberrypi.org/documentation/hardware/computemodule/cm-peri-sw-guide.md
- https://www.raspberrypi.org/documentation/configuration/pin-configuration.md
Raspberry Pi fournit la source de plusieurs configurations possibles avec le fichier dt-blob.bin ici :
J'ai sélectionné le fichier dt-blob-disp1-cam1.dts comme source et l'ai renommé en dt-blob-disp1-cam1_pccb.dts.
Vous pouvez télécharger le fichier source original de Raspberry Pi ici :
Ce fichier doit être modifié pour refléter notre choix de broches GPIO (ce qui permettra au Firmware de VideoCore d'alimenter la caméra et de lui parler).
Ce fichier source comprend des configurations pour de nombreux modèles de Pi différents. Nous sommes intéressés par les configurations du module de calcul uniquement : pins_cm3 et pins_cm
(Notez que vos numéros de ligne peuvent être décalés de quelques compteurs, car j'ai inclus des éléments supplémentaires dans le fichier qui ne sont pas pertinents pour notre discussion ici).
Ici, vous devez modifier quatre lignes. Dans notre configuration matérielle spécifique ( !), j'ai modifié :
à
et
à :
Les mêmes modifications doivent être appliquées pour le CM3 et le CM.
pin@p26 { function = "output" ; termination = "no_pulling" ; } ; // CAMERA 0 LED
pin@p27 { function = "output" ; termination = "no_pulling" ; } ; // CAMERA 0 SHUTDOWN(...)
pin_define@CAMERA_0_LED {
type = "interne" ;
nombre = ;
};
pin_define@CAMERA_0_SHUTDOWN {
type = "interne" ;
nombre = ;
};
pin_define@CAMERA_0_UNICAM_PORT {
type = "interne" ;
nombre = ;
};
Notez que vous avez également la possibilité d'utiliser une CAMERA_0_I2C_PORT et un CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN différents si votre configuration matérielle le nécessite.
Il en va de même pour l'affichage, il existe des entrées DISPLAY_SDA, DISPLAY_SCL, DISPLAY_I2C_PORT qui peuvent être modifiées.
Dans notre cas, je les ai laissés par défaut, car c'est ainsi que notre tableau est conçu.
Compiler ce fichier
Sur le pi, exécutez :
sudo dtc -I dts -O dtb -o dt-blob-disp1-cam1_pccb.dtb dt-blob-disp1-cam1_pccb.dts
Cela vous donnera un mur d'avertissements, que vous pouvez ignorer sans risque.
Installer dt-blob.bin
sudo cp dt-blob-disp1-cam1_pccb.dtb /boot/dt-blob.bin
Et rebooter.
Test
les broches 26 et 27 sont maintenant configurées en tant que broches de sortie, et sont pilotées à bas niveau :
vcgencmd get_camera
rendements :
supporté=1 détecté=1
Vous pouvez prendre une photo en utilisant :
raspistill -v -o test.jpg
(N'oubliez pas d'activer la caméra en utilisant raspi-config aussi !)
Streaming vidéo
Un petit conseil bonus. Sur votre Pi, vous pouvez démarrer un flux en utilisant :
raspivid -o - -t 0 -hf -w 800 -h 400 -fps 24 |cvlc -vvv -h264-fps=24 stream:///dev/stdin -sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264
Notez le -fps 24 et -h264-fps=24 à raspivid et cvlc, pour synchroniser leurs framerates !
utiliser VLC pour visionner le flux (en utilisant l'IP de votre compute board) :
Afficher
L'affichage nécessite également le dt-blob.bin.
J'ai utilisé une source d'alimentation externe pour alimenter l'écran, dans une révision du PCCB nous aurons une alimentation +5 V sur un header pour une utilisation avec l'écran.
Veuillez noter que je n'ai pas pu utiliser le câble flexible de la caméra pour faire fonctionner l'écran ; il a dû être connecté à l'aide de son propre câble (court).
Je séquence l'alimentation d'abord vers l'écran, puis vers le PCCB.
Le toucher fonctionne.
Écran et caméra réunis
Cela fonctionne également, le flux de la caméra est également affiché en direct sur l'écran.
Erreurs
en cours d'exécution
raspistill -v -o test.jpg
vous obtiendrez :
mmal_vc_component_create : échec de la création du composant 'vc.ril.camera' (1:ENOMEM)
également
vcgencmd get_camera
affichera soit :
supporté=0 détecté=0
ou
supporté=1 détecté=0
Si supporté=0, vous devriez vérifier si votre dt-blob.bin est installé correctement dans /boot.
Si détecté=0, vous devez vérifier que les broches GPIO sont configurées correctement dans le dt-blob.bin.
Assurez-vous également que la caméra est activée à l'aide de raspi-config.
Orientation correcte des flexibles
Les câbles flexibles doivent être orientés correctement pour établir la connexion. Vous pouvez jeter un coup d'oeil au brochage, et voir si les broches GND et +3V3 se comportent comme prévu, ou s'il n'y a pas de connexion / pas de tension.
Service par pi3g
Nous pouvons installer votre matériel pour vous, offrir des services de conseil ou développer du matériel et des logiciels Raspberry Pi sur mesure. contactez-nous dès aujourd'hui.
Réf.
- https://raspberrypi.stackexchange.com/questions/95420/raspivid-es-out-set-group-pcr-is-called-too-late-stream-keeps-freezing
- https://www.raspberrypi.org/documentation/hardware/display/
- https://raw.githubusercontent.com/raspberrypi/documentation/master/hardware/computemodule/dt-blob-disp1-cam1.dts
- https://www.raspberrypi.org/forums/viewtopic.php?t=164987 (il y a une explication sur l'utilisation des lignes CAM_IO0 et CAM_IO1).
- https://raspberrypi.stackexchange.com/questions/72549/how-can-i-enable-both-the-cameras-on-the-compute-module-3