Télécommande avec déclencheur externe pour caméras SONY HDR sur ESP8266


SONY, ayant décidé de se montrer sur le marché des caméras d'action, sort une gamme d'appareils HDR. Attirant les clients avec un remplissage attrayant - une bonne matrice, un processeur rapide, une optique Zeiss et un stabilisateur d'image électronique de faible poids, la société montre son "vrai visage du capitalisme".

Pour contrôler la caméra, une télécommande avec visualisation vidéo sur WiFi est libérée. La télécommande est assez chère et en pénurie - maintenant, elle ne peut être achetée que sur divers marchés aux puces électroniques.


Mais il y a le WiFi, vous pouvez donc le contrôler depuis votre téléphone? Avez-vous essayé le ski ou le wakeboard avec un smartphone entre les mains? Mais cet inconvénient n'est pas encore suffisant:

SONY, ne se souciant absolument pas de ses clients, supprime l'application PlayMemories Mobile de Google Play pour contrôler ses caméras d'action via WiFi à partir de n'importe quel téléphone mobile, en la remplaçant par une application smartwatch. Au lieu de cela, il lance Imaging Edge Mobile - terriblement inconfortable et tombant constamment de la caméra. La même chanson pour les applications iPhone.

En tant que contributeur fraudé , l'utilisateur de la caméra HDR AS100, j'ai décidé de chercher une solution alternative et suis tombé sur une archive plutôt intéressante - Sony Camera Remote API beta SDK

Le SDK est écrit pour développer des applications de contrôle de caméra SONY sur WiFi à partir d'appareils Android et iOS.

À l'intérieur de l'archive, il y a deux répertoires avec des exemples de développement d'applications Java pour Android et iOS. Le plus intéressant est les références API de document PDF pour la version bêta de l'API Camera Remote . C'est décidé - je ferai la télécommande de mes propres mains

Que contient votre API?


Tout d'abord, il existe un tableau des appareils pris en charge pour février 2017.

Sur la base du tableau, l'API avec différents degrés de fonctionnalité est compatible avec presque toutes les caméras d'action HDR d'AS15 à AS300, les caméras FDR, les caméras des séries DSC, ILCE et NEX avec interface WiFi.

Ensuite, je vais décrire comment travailler avec la caméra HDR AS100 avec le dernier firmware 2.0.0, ce qui implique qu'il doit y avoir une compatibilité avec d'autres appareils.

Deuxièmement, le protocole de contrôle de la caméra. Chaque appareil SONY de cette liste est un serveur HTTP qui exécute les demandes et émet également des images distinctes au format JPEG et en streaming vidéo.

Mon objectif est de développer une télécommande compacte et la moins chère pour les caméras SONY

Pour commencer, vous devez vous assurer que le WiFi est activé dans le menu de l'appareil photo:

[CONFIG.] -> [CONFG] -> [Wi-Fi] -> [ON]

L'identifiant et le mot de passe doivent figurer sur un autocollant séparé dans le mode d'emploi de la caméra. Si cet autocollant est perdu, vous pouvez connecter l'appareil photo via MicoUSB à un ordinateur exécutant Microsoft Windows et l'allumer. [USB] apparaît sur l'écran et deux lecteurs réseau sur l'ordinateur - avec une carte mémoire insérée dans l'appareil photo et la mémoire interne de l'appareil photo PMHOME. Nous sommes intéressés par le deuxième disque

Le fichier: \\ INFO \ WIFI_INF.TXT contient l'identifiant et le mot de passe pour accéder à la caméra via WiFi, et le fichier \\ INFO \ WPS_PIN.TXT contient le code PIN pour la connexion via WPS. L'accès aux informations est en lecture seule, il n'est donc pas possible de changer l'identifiant, le mot de passe ou le code PIN.

Vous pouvez maintenant vous connecter à la caméra avec ces données. L'adresse IP de la caméra après la connexion est 192.168.122.1. Pour contrôler la caméra, vous devez envoyer des requêtes HTTP POST à ​​l'adresse 192.168.122.1 : 10000 / sony / camera.

Les adresses suivantes peuvent être utilisées pour différents modèles de caméras:

10.0.0.1 : 10000 / caméra
10.0.0.1 : 10000 / sony / caméra
192.168.122.1 : 8080 / sony / appareil photo
192.168.122.1 : 10000 / sony / appareil photo

Troisièmement, la structure de la demande et de la réponse. Chaque requête contient une commande au format JSON et retourne également une réponse au format JSON. Une liste complète des commandes, ainsi que des exemples d'utilisation, sont contenus dans le même fichier PDF.

De plus, via le protocole HTTP, les fichiers finis avec des images et un flux vidéo pour la visualisation depuis la caméra sont retournés.

Le protocole le plus difficile est la demande d'informations. Selon la version de la demande (1.0 - 1.3), il produit un tableau de 34 à 62 paramètres au format JSON, qui à son tour peut également être des tableaux, et a deux modes de fonctionnement - avec une réponse immédiate pour compléter les informations sur l'état de la caméra et avec une réponse pour tout événement sur l'appareil photo (par exemple, changer de mode ou démarrer l'enregistrement)

La première crêpe ... LUTOM


Le cœur de l'appareil sera un moteur fougueux - le MK le moins cher avec WiFi - l'ESP8266 chinois. Certes, en regardant le redessin terne de l'image sur un écran graphique 240 × 320 en utilisant SPI, j'ai décidé de reporter la production d'une copie de mon panneau de contrôle à distance Sonykovsky avec prévisualisation vidéo en temps réel, et j'ai opté pour la fonctionnalité d'un interrupteur marche / arrêt ordinaire avec un choix de mode. L'écran était OLED monochrome de 0,91 ″ avec une résolution de 32 × 128, qui est généralement utilisé dans les bracelets de fitness bon marché.

Schéma de prototype:



Conception de la carte:





Eh bien, la victime même de LUT:





Firmware


Je recommande de sauter cette partie pour les haduino, car j'ai développé le firmware en Arduino IDE avec ESP8266 Core installé. Pour plus de commodité, j'ai utilisé des bibliothèques supplémentaires:


Avec les bibliothèques graphiques, tout est clair. Ils sont nécessaires pour fonctionner avec l'écran OLED. WiFiManager est une bibliothèque très pratique pour configurer des connexions WiFi dans ESP. Dans le cas de l'entrée en mode réglages, il lève le point d'accès à ESP et à son serveur WEB minimaliste, vers lequel il redirige lorsqu'il est connecté. Vous pouvez démarrer en mode automatique, mais le mode paramètres démarre à chaque fois qu'il n'y a pas de connexion de caméra. J'ai choisi d'entrer en mode réglages en appuyant longuement sur le bouton «BOOT / MODE» et de sortir par timeout de 120 secondes.

La bibliothèque WiFiManager est également pratique en ce sens que vous pouvez ajouter vos propres champs pour la personnalisation (cela ne m'a pas été utile dans ce projet), ainsi que gérer les événements - entrer dans le mode de configuration et enregistrer les paramètres.

Une fois les paramètres de connexion à la caméra configurés, le programme établit une connexion, qui est écrite à l'écran. Si une connexion est établie, le programme envoie à la caméra une demande de statut actuel toutes les secondes et affiche les modifications à l'écran. Ceci est fait pour que vous puissiez suivre les commandes de la caméra directement à partir des boutons.

En utilisant le bouton "BOOT / MODE", nous commutons cycliquement les trois modes principaux de l'appareil photo - "VIDEO", "PHOTO" et "LAPSE". Utilisez le bouton PLAY / STOP pour activer / désactiver l'enregistrement en mode VIDEO ou LAPSE et enregistrer une seule photo en mode PHOTO. Lorsque l'enregistrement est activé, la LED rouge est allumée. Lors de l'enregistrement, la photo clignote une fois.

Il existe également une entrée supplémentaire sur GPIO14, qui duplique essentiellement le bouton "PLAY / STOP". Cette entrée est nécessaire pour connecter un déclencheur externe, qui peut synchroniser la capture de photos pour des instantanés en accéléré avec un événement externe. Cette entrée, je prévois de me connecter à une imprimante 3D et de filmer des pièces d'impression vidéo en accéléré.

Parmi les fonctions supplémentaires, le programme mesure périodiquement les valeurs de l'entrée ADC, à laquelle le diviseur est connecté directement à partir de la batterie, et affiche l'état de la batterie avec l'icône. Le programme est calibré sur des diviseurs R12 = 1,6K et R11 = 10K et une batterie au lithium.

Malheureusement, AS100 ne prend pas en charge la sortie en JSON de la durée d'enregistrement et le nombre de prises de vue en mode time-lapse. Dans les croquis, ces paramètres sont écrits dans des variables, si quelqu'un se répète, puis sur d'autres caméras, ils peuvent également être affichés.

Échantillon "industriel"


Récemment, j'étais accro paresseux aux commandes de cartes sur JLCPCB. Et maintenant, dans le dernier ordre 100x100, il y avait de l'espace libre.

La conception a été finalisée pour une installation bidirectionnelle et, dans le circuit, a ajouté une charge de lithium sur TP4056:







Les Chinois ont timidement essayé de me dire que je commandais plusieurs planches en une seule commande. Mais nous n'avons pas l'habitude de battre en retraite - j'unis toutes les planches avec un cadre commun sur sérigraphie, je connecte Zeil de planches différentes (coupées quand même) et j'écris même en russe qu'il s'agit d'une seule planche))))



Certes, vous devez couper les planches manuellement, il y a de bons ciseaux métalliques pour cela.
En conséquence, nous obtenons un tel produit





Le cas le plus simple sur une imprimante 3D:







Comment ça marche:



Maintenant une petite application


Pourquoi l'entrée d'un déclencheur externe a été lancée. Je voulais essayer de réaliser des tirages TimeLaps sur une imprimante 3D à l'aide de mon appareil photo SONY HDR AS100. Pour cela, je suis dans le contrôleur et j'ai fait une entrée pour un déclencheur externe. Il existe plusieurs façons d'envoyer un signal à cette entrée.

Connectez à la broche libre du contrôleur et cousez dans le micrologiciel de l'imprimante le contrôle de cette entrée à l'aide d'une commande de code G supplémentaire.

Installez OctoPrint avec le plugin OptoLapse et connectez l'entrée de la télécommande au port libre Orange PI / Raspberry PI.

Installez un interrupteur de fin de course supplémentaire connecté au contrôleur et prenez la tête de l'imprimante pour prendre des photos de chaque cadre afin qu'il appuie sur cet interrupteur.

J'ai essayé la 3ème méthode:





Il a rapidement écrit un script sur son genou en PHP qui, après avoir imprimé chaque couche, insère le code de rétraction de la tête dans la position du fin de course.

<?php $file1 = $argv[1]; $file2 = $argv[2]; if (!file_exists($file1)) { printf("Can't open %s\n",$file1); exit(1); } $flag = 0; $f1 = fopen($file1,"r"); $f2 = fopen($file2,"w"); while( !feof($f1) ){ $s = fgets($f1, 1024); $n = strpos($s,";LAYER:"); if( $n !== false )$flag = 1; if( $flag == 1 ){ $n1 = strpos($s,"G0 "); if( $n1 !== false ){ fprintf($f2, ";TIMELAPSE BEGIN\n"); fprintf($f2,"G10\n"); fprintf($f2, "G91\n"); fprintf($f2, "G0 F1000 Z10\n"); fprintf($f2, "G90\n"); fprintf($f2, "G0 F5000 Y230\n"); fprintf($f2, "G0 F5000 X178 Y230\n"); fprintf($f2, "G4 P1000\n"); fprintf($f2,"%s",$s); fprintf($f2,"G11\n"); fprintf($f2, ";TIMELAPSE END\n"); $flag = 0; } else { fprintf($f2,"%s",$s); } } else { fprintf($f2,"%s",$s); } } fclose($f1); fclose($f2); ?> 

Le code G après chaque couche ressemble à ceci:

 ;TIMELAPSE BEGIN G91 G0 F1000 Z10 G90 G0 F5000 Y230 G0 F5000 X178 Y230 G4 P1000 G0 F6000 X93.168 Y92.836 Z0.3 ;TIMELAPSE END 

Malheureusement, je ne pouvais pas gérer le retrac de l'imprimante tout de suite, donc la première vidéo est sortie avec le nom "Printing snot"))))


«Mais c'est une histoire complètement différente» ©

L'ensemble du projet OpenSource. La source du micrologiciel, les fichiers de conception de carte, les circuits et le modèle de boîtier peuvent être pris sur GITHUB .

Article original sur mon blog

Source: https://habr.com/ru/post/fr475458/


All Articles