Lorsque le PineCube a été annoncé par le projet Pine64 en 2020, cela a suscité beaucoup d’intérêt. La plupart de cela était dû à l’attrait d’un ordinateur monocarte (SBC) dans un format de caméra réseau (IP) avec module de caméra intégré, pour seulement 29,99 $. Ajoutez-y un boîtier et vous obtiendrez un petit ensemble soigné combinant un module de caméra 5 MP avec 100 Mbit Ethernet et WiFi. En prime, le système peut être alimenté soit via une batterie optionnelle, soit via PoE passif, en plus de MicroUSB.

Il y a quelques semaines, j’ai acheté deux de ces cartes, dans le cadre d’un projet client, et j’ai décidé de les utiliser pour une implémentation de caméra IP personnalisée. Avec l’expérience de caméra Linux-on-SBC et MIPI (CSI) existante de mon côté, allant du Raspberry Pi aux cartes Odroid, Orange Pi et Banana Pi, je me sentais assez confiant de pouvoir le faire fonctionner avec un minimum de tracas.

Malheureusement, mes expériences ont été tout sauf positives. Après avoir passé de nombreuses heures avec le PineCube, je ne suis pas en mesure de le recommander à ceux qui recherchent une caméra IP. Il y a de nombreuses raisons à cela, que je vais essayer d’expliquer dans cet article.

Premières impressions

L’avant du PineCube, avec le capuchon d’objectif retiré.

La commande de ces deux planches PineCube (PineCubes?) A été une expérience quelque peu curieuse, même si l’on est habitué à commander du matériel en ligne. Après avoir cliqué sur les boîtes de dialogue du Pine64 Store et payé la commande (en sélectionnant la livraison standard), j’ai reçu un e-mail de confirmation. Il n’y avait pas de date d’expédition estimée, mais après avoir attendu quelques semaines et me demander si je recevrais un jour une mise à jour, j’ai reçu une notification indiquant que ma commande avait été expédiée, ainsi qu’un lien de suivi.

Ce suivi s’est terminé quelque part au bureau des douanes, de sorte qu’un jour j’ai soudainement reçu le colis avec les PineCubes. À l’intérieur de la boîte en carton ordinaire se trouvaient les deux petites boîtes blanches, chacune contenant une planche PineCube dans un petit sac. Pendant le déballage, je craignais de déchirer des fils ou des câbles flexibles lors de l’extraction de l’engin du sac souple.

L’enceinte du PineCube que l’on ne peut pas obtenir. Encore.

Le module de haut-parleur est suspendu au bout de ses deux fils assez longs, et j’ai jugé nécessaire de vérifier le flex plat qui relie les deux cartes qui composent le système (est-ce que Dual-Board Computer est encore un terme?), Au cas où il s’était délogé. Cela ne ressemble pas au type de carte que vous voulez manipuler trop souvent, comme on le ferait avec un Raspberry Pi ou similaire. Il semble fragile et vous souhaitez pouvoir le mettre dans une enceinte tout de suite pour le garder en sécurité, sans orientation vraiment stable pour le poser sur un bureau.

Étant donné que la page PineCube Wiki contient un lien vers ce qui devrait être un fichier STL de l’affaire qui serait mis en vente plus tard – selon un récent article de blog – j’avais pensé que j’imprimerais une copie sur l’imprimante 3D que j’ai debout par ici avant que les planches n’arrivent. Malheureusement, comme l’ont noté les personnes dans les commentaires de cet article de blog, aucun fichier STL n’a été publié, mais des fichiers de CAO SolidWorks propriétaires. Trois mois plus tard, aucun fichier STL n’est toujours disponible (Mettre à jour: une «conversion STL rapide et sale» a été ajoutée entre la rédaction et la publication de cette critique). Aucun boîtier n’est encore disponible à la vente.

Capteurs EoL et support Linux

Il existe un en-tête GPIO qui fournit un UART, SPI, I2C et autres.

L’enceinte étant simplement un détail «  agréable à avoir  » dans une vue d’ensemble (jeu de mots), je me suis ensuite concentré sur les parties fonctionnelles du matériel que j’avais reçues. Il est plutôt décevant de voir que l’appareil photo est un OV5640, un capteur d’environ 9 ans qui est en fin de vie depuis un certain temps maintenant. C’est ce qui rend l’avenir du PineCube plutôt douteux et probablement de courte durée.

Du bon côté, cela signifie également que sa prise en charge sous Linux n’est pas un problème, avec Video4Linux (v4l) l’acceptant volontiers comme source d’entrée lors de la configuration d’un flux RTMP à l’aide de ffmpeg. Ceci est cependant assez différent de la situation avec le GPU dans le SoC S3. Comme on peut le voir sur la page «Linux mainlining effort» sur Linux-sunxi, le noyau Linux 5.11 est le premier à lister le support S3 comme ayant été fusionné. Le support S3 dans le noyau 5.10 se fait via le support SoC V3s, comme on peut le voir en regardant le fichier de superposition matérielle dans Armbian pour PineCube, qui utilise le noyau 5.10. Les SoC S3 et Allwinner V3 sont dérivés, donc une certaine compatibilité est logique.

Un regard à l’intérieur du PineCube. Remarquez les fils facilement endommagés.

À ce stade, l’encodage vidéo est toujours WIP (travail en cours). Cela signifie que ffmpeg, gstreamer ou tout autre cadre graphique utilisé pour l’encodage vidéo doit faire tout cela dans un logiciel, en utilisant le seul cœur de processeur Cortex-A7 et les extensions de progression vectorielle NEON. Avec un simple flux RTMP de la caméra, cela semblait suffisamment performant.

Le PineCube dispose également d’un haut-parleur, comme mentionné précédemment. Malheureusement, cela ne peut pas être utilisé actuellement, aucun périphérique audio n’étant enregistré. Il semble que le support pour cela puisse arriver avec la prochaine version d’Armbian, cependant, grâce à un correctif amélioré de superposition matérielle qui a récemment été apporté.

Utiliser comme appareil photo

En utilisation générale, le PineCube ressemble beaucoup à n’importe quel autre SBC. Vous téléchargez l’image de la carte cible, l’écrivez sur une carte MicroSD et l’insérez dans le lecteur de carte MicroSD de la carte avant d’allumer le système. Étant donné que le PineCube n’a pas de sorties vidéo, les méthodes d’interaction sont limitées à une connexion série ou SSH (si connecté à Ethernet). Après avoir établi une connexion à la console en utilisant l’une ou l’autre méthode, la connexion à Armbian est aussi simple que 1234. (C’est le mot de passe root par défaut.)

Une fois connecté à Armbian, arriver au point où il est possible de configurer un flux RTMP ne prend guère plus que d’installer media-ctl (package v4l-utils) et ffmpeg, avant d’exécuter les commandes suivantes pour configurer un encodage FLV 640 × 480 diffuser sur un serveur RTMP:

$ media-ctl --set-v4l2 '"ov5640 1-003c":0[fmt:UYVY8_2X8/640x480@1/15]'
$ ffmpeg -s 640x480 -r 15 -i /dev/video0 -vcodec flv -f flv rtmp://<rtmp_server>/live/pinecube

Après avoir exécuté cette commande et connecté au serveur RTMP avec un lecteur à partir d’un système de bureau, la vidéo du PineCube peut maintenant être observée en 640 × 480 à 15 FPS, avec quelques secondes de retard. Le FPS peut être augmenté à 30 FPS à 1080p, mais sans prise en charge de l’encodage matériel, cela peut entraîner des bégaiements et des problèmes.

Lors de la configuration du système, j’ai remarqué qu’il se bloquait de manière fiable lors du téléchargement de certaines ressources via HTTP et ne reprenait qu’une fois le téléchargement HTTP expiré. Quand j’ai gardé top ouvert dans un autre terminal SSH, je pouvais voir que la charge du système allait jusqu’à 12 et au-delà, car les 111 Mo de RAM du système (sur un total de 128 Mo) se remplissaient, avec le swap.

Ce même modèle s’est répété lorsque j’ai essayé de configurer un flux RTMP qui a ajouté plus de traitement local (codage h.264) et une couche de sécurité personnalisée (cryptage). Sans prise en charge de l’encodage matériel, je pouvais voir la charge du système monter en flèche jusqu’à ce que le système cesse de répondre. L’envoi de Ctrl + C via le terminal SSH a finalement fonctionné après un délai d’environ dix minutes.

Le SoC S3

Le SoC S3 peut être repéré profondément à l’intérieur de la pile PineCube.

Lorsque je compare le PineCube à d’autres SBC avec lesquels j’ai travaillé, le SoC S3 sur cette carte particulière semble être le principal facteur limitant, et en particulier la faible quantité de RAM et le manque continu de support matériel. Il semble que ce soit avant tout un SoC destiné aux caméras IP à bas prix, ce qui signifie qu’essayer de dépasser les limites associées à cette mise au point aura des répercussions.

À cet égard, il est fascinant de voir qu’Olimex envisage également de sortir une carte basée sur S3 cette année, sous la forme de la S3-OLinuXino. Peut-être qu’avoir plus de cartes open source comme celle-ci aide à augmenter la prise en charge de ces SoC plus obscurs. Ce qui est clair pour moi, c’est que sans support matériel complet, en particulier pour l’encodage vidéo, les utilisations de ces plates-formes seront limitées.

Emballer

Pour l’utilisateur plus occasionnel, je pourrais comparer le PineCube à 30 $ avec les considérations ci-dessus, et quelque chose comme le Raspberry Pi Zero W (18 $) ou le Banana Pi M2 Zero (Allwinner H2 + SoC, 25 $), avec quelque chose comme la caméra Raspberry Pi V2 module avec module de caméra Sony IMX219 8 MP (25 $). Pour moins de 50 $, on aurait une carte avec plus de RAM (même le RPi Zero a 512 Mo), un meilleur appareil photo, ainsi que l’option de boîtiers prêts à acheter ou à imprimer (y compris avec module caméra).

Les SoC BCM2835 d’Allwinner H2 + et de Raspberry Pi Zero prennent en charge Linux depuis des années, y compris des choses comme l’encodage vidéo. Tout cela amène à se demander ce que raison d’être du PineCube est, avec celle de la présence du SoC S3 dans des paramètres plus généraux.

En ce qui concerne le paramètre plus spécialisé pour lequel j’ai acheté ces cartes PineCube, je suis assez confiant qu’il peut être fait pour fonctionner, et très probablement, la plupart des problèmes persistants et des lacunes dans le support matériel seront résolus avec le temps. Après cette expérience, je pense cependant que ce n’est pas la bonne plateforme pour quiconque ne se sent pas enclin à consacrer beaucoup de temps à faire fonctionner même les choses les plus élémentaires.