
SONY, después de haber decidido presentarse en el mercado de las cámaras de acción, lanza una línea de dispositivos HDR. Al hacer señas a los clientes con un relleno atractivo: una buena matriz, un procesador rápido, una óptica Zeiss y un estabilizador de imagen electrónico de bajo peso, la compañía muestra su "verdadera cara del capitalismo".
Para controlar la cámara, se libera un control remoto con visualización de video a través de WiFi. El control remoto es bastante costoso y escaso: ahora solo se puede comprar en varios mercados de pulgas electrónicos.

Pero hay WiFi, ¿así que puedes controlarlo desde tu teléfono? ¿Has probado el esquí o el wakeboard con un teléfono inteligente en tus manos? Pero este inconveniente aún no es suficiente:
SONY, que no se preocupa por sus clientes por completo, elimina la aplicación PlayMemories Mobile de Google Play para controlar sus cámaras de acción a través de WiFi desde cualquier teléfono móvil, reemplazándola por una aplicación de reloj inteligente. En su lugar, lanza
Imaging Edge Mobile , terriblemente incómodo y que se cae constantemente de la cámara. La misma canción para aplicaciones de iPhone.
Como
colaborador defraudado , el usuario de la cámara HDR AS100, decidí buscar una solución alternativa y encontré un archivo bastante interesante:
Sony Camera Remote API beta SDKEl SDK está escrito para desarrollar aplicaciones de control de cámara SONY a través de WiFi desde dispositivos Android e iOS.
Dentro del archivo hay dos directorios con ejemplos para desarrollar aplicaciones Java para Android e iOS. Lo más interesante son las
referencias API de documentos PDF
para Camera Remote API beta . Está decidido: haré el control remoto con mis propias manos
¿Qué hay en tu API?
En primer lugar, hay una tabla de dispositivos compatibles para febrero de 2017.
Según la tabla, la API con diversos grados de funcionalidad es compatible con casi todas las cámaras de acción HDR desde AS15 a AS300, cámaras FDR, cámaras DSC, ILCE y NEX con interfaz WiFi.
A continuación, describiré cómo trabajar con la cámara HDR AS100 con el último firmware 2.0.0, lo que implica que debe haber compatibilidad con otros dispositivos.
En segundo lugar, el protocolo de control de la cámara. Cada dispositivo SONY de esta lista es un servidor HTTP que ejecuta solicitudes y también emite fotogramas separados en formato JPEG y transmisión de video.
Mi objetivo es desarrollar un control remoto compacto y el más barato para cámaras SONY
Para comenzar, debe asegurarse de que WiFi esté activado en el menú de la cámara:
[CONFIGURACIÓN] -> [CONFG] -> [Wi-Fi] -> [ACTIVADO]
El identificador y la contraseña deben estar en una etiqueta separada en las instrucciones de funcionamiento de la cámara. Si se pierde esta etiqueta, puede conectar la cámara a través de MicoUSB a una computadora con Microsoft Windows y encenderla. [USB] aparece en la pantalla y dos unidades de red en la computadora, con una tarjeta de memoria insertada en la cámara y la memoria interna de la cámara PMHOME. Nos interesa el segundo disco
El archivo: \\ INFO \ WIFI_INF.TXT contiene el identificador y la contraseña para acceder a la cámara a través de WiFi, y el archivo \\ INFO \ WPS_PIN.TXT contiene el pin clave para conectarse a través de WPS. El acceso a la información es de solo lectura, por lo que no es posible cambiar el identificador, la contraseña o el pin.
Ahora puede conectarse a la cámara con estos datos. La dirección IP de la cámara después de conectarse es 192.168.122.1. Para controlar la cámara, debe enviar solicitudes HTTP POST a la dirección
192.168.122.1 : 10000 / sony / camera.
Las siguientes direcciones se pueden usar para diferentes modelos de cámara:
10.0.0.1 : 10000 / cámara
10.0.0.1 : 10000 / sony / cámara
192.168.122.1 : 8080 / sony / cámara
192.168.122.1 : 10000 / sony / cámara
En tercer lugar, la estructura de la solicitud y la respuesta. Cada solicitud contiene un comando en formato JSON y devuelve una respuesta también en formato JSON. Una lista completa de comandos, así como ejemplos de uso, están contenidos en el mismo archivo PDF.
Además, a través del protocolo HTTP, se devuelven los archivos terminados con imágenes y una transmisión de video para ver desde la cámara.
El protocolo más difícil es la solicitud de información. Dependiendo de la versión de la solicitud (1.0 - 1.3), produce una matriz de 34 a 62 parámetros en formato JSON, que a su vez también pueden ser matrices, y tiene dos modos de operación, con respuesta inmediata para completar la información sobre el estado de la cámara y con una respuesta para cualquier evento en la cámara (por ejemplo, cambiar de modo o comenzar a grabar)
El primer panqueque ... LUTOM
El corazón del dispositivo será un
motor ardiente , el MK más barato con WiFi, el ESP8266 chino. Es cierto que, al observar el aburrido rediseño de la imagen en una pantalla gráfica de 240 × 320 usando SPI, decidí posponer la producción de una copia de mi panel de control remoto Sonykovsky con vista previa de video en tiempo real, y me decidí por la funcionalidad de un interruptor de encendido / apagado ordinario con una opción de modo. La pantalla era de 0.91 ″ OLED de un solo color con una resolución de 32 × 128, que generalmente se usa en pulseras de fitness económicas.
Esquema de prototipo:

Diseño de tablero:


Bueno, la misma víctima de LUT:


Firmware
Recomiendo omitir esta parte para los que odian a los arduino, ya que desarrollé el firmware en Arduino IDE con ESP8266 Core instalado. Por conveniencia, utilicé bibliotecas adicionales:
Con las bibliotecas gráficas, todo está claro. Son necesarios para trabajar con la pantalla OLED. WiFiManager es una biblioteca muy conveniente para configurar conexiones WiFi en ESP. En el caso de ingresar al modo de configuración, eleva el punto de acceso a ESP y su servidor WEB minimalista, al que redirige cuando está conectado. Puede comenzar en modo automático, pero luego el modo de configuración comenzará cada vez que no haya conexión de cámara. Elegí ingresar al modo de configuración presionando prolongadamente el botón "BOOT / MODE" y salir por tiempo de espera de 120 segundos.
La biblioteca WiFiManager también es conveniente porque puede agregar sus propios campos para la personalización (esto no fue útil para mí en este proyecto), así como procesar eventos: ingrese al modo de configuración y guarde la configuración.
Después de configurar los ajustes para conectarse a la cámara, el programa realiza una conexión, que se escribe en la pantalla. Si se establece una conexión, el programa envía una solicitud a la cámara del estado actual cada segundo y muestra los cambios en la pantalla. Esto se hace para que pueda rastrear los controles de la cámara directamente desde los botones.
Con el botón "BOOT / MODE", cambiamos cíclicamente los tres modos principales de la cámara: "VIDEO", "PHOTO" y "LAPSE". Use el botón PLAY / STOP para activar / desactivar la grabación en el modo VIDEO o LAPSE y grabar una sola foto en el modo PHOTO. Cuando la grabación está encendida, el LED rojo está encendido. Al grabar, la foto parpadea una vez.
También hay una entrada adicional en GPIO14, que esencialmente duplica el botón "PLAY / STOP". Esta entrada es necesaria para conectar un disparador externo, que puede sincronizar la captura de fotos para instantáneas de lapso de tiempo con un evento externo. Esta entrada planeo conectarme a una impresora 3D y grabar partes de impresión de video de lapso de tiempo.
De las funciones adicionales, el programa mide periódicamente los valores de la entrada ADC, a la cual el divisor está conectado directamente desde la batería, y muestra el estado de la batería con el icono. El programa está calibrado en divisores R12 = 1.6K y R11 = 10K y una batería de litio.
Desafortunadamente, AS100 no admite la salida en JSON del tiempo de grabación y el número de disparos en modo de lapso de tiempo. En los bocetos, estos parámetros se escriben en variables, si alguien repite, en otras cámaras también se pueden mostrar.
Muestra "industrial"
Recientemente, era un adicto
perezoso a los paneles de pedidos en
JLCPCB, y ahora, en el último pedido, 100x100, había espacio libre.
El diseño se finalizó para la instalación bidireccional, y en el circuito se agregó carga de litio en TP4056:



Los chinos trataron tímidamente de decirme que ordeno varias tablas en un solo pedido. Pero no estamos acostumbrados a la retirada: unimos todos los tableros con un marco común en serigrafía, conecto Zeil de diferentes tableros (cortados de todos modos) e incluso escribo en ruso que este es un tablero)))

Es cierto que debe cortar las tablas manualmente, hay buenas tijeras de metal para esto.
Como resultado, obtenemos dicho producto


El caso más simple en una impresora 3D:



Cómo funciona
Ahora una pequeña aplicación
Por qué se inició la entrada de un disparador externo. Quería intentar tomar impresiones de TimeLaps en una impresora 3D con mi cámara SONY HDR AS100. Para esto, estoy en el controlador e hice una entrada para un disparador externo. Hay varias formas de enviar una señal a esta entrada.
Conéctese al pin libre del controlador y cosa en el firmware de la impresora el control de esta entrada usando un comando adicional de código G.
Instale OctoPrint con el complemento
OptoLapse y conecte la entrada del controlador remoto al puerto gratuito Orange PI / Raspberry PI.
Instale un interruptor de límite adicional conectado al controlador y tome la cabeza de la impresora para tomar fotos de cada marco para que presione este interruptor.
Probé el tercer método:


Rápidamente escribió un script sobre su rodilla en PHP, que, después de imprimir cada capa, inserta el código de retracción del cabezal en la posición del interruptor de límite.
<?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); ?>
El código G después de cada capa se ve así:
;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
Desafortunadamente, no pude lidiar con la retracción de la impresora de inmediato, por lo que el primer video salió con el nombre "Impresión de mocos")))
"Pero esta es una historia completamente diferente" ©
Todo el proyecto OpenSource. La
fuente de firmware, los archivos de diseño de la placa, los circuitos y el modelo de caja
se pueden tomar en GITHUB .
Artículo original en mi blog.