Controle remoto com gatilho externo para câmeras SONY HDR no ESP8266


A SONY, tendo decidido se mostrar no mercado de câmeras de ação, lança uma linha de dispositivos HDR. Atendendo clientes com um preenchimento atraente - uma boa matriz, processador rápido, óptica Zeiss e estabilizador eletrônico de imagem com baixo peso, a empresa mostra sua "verdadeira face do capitalismo".

Para controlar a câmera, um controle remoto com visualização de vídeo por WiFi é liberado. O controle remoto é bastante caro e escasso - agora só pode ser comprado em vários mercados de pulgas eletrônicos.


Mas há WiFi, para que você possa controlá-lo pelo telefone? Você já tentou esquiar ou praticar wakeboard com um smartphone em suas mãos? Mas esse inconveniente ainda não é suficiente:

A SONY, que não se importa totalmente com seus clientes, remove o aplicativo PlayMemories Mobile do Google Play para controlar suas câmeras de ação via Wi-Fi de qualquer telefone celular, substituindo-o por um aplicativo smartwatch. Em vez disso, lança o Imaging Edge Mobile - extremamente desconfortável e caindo constantemente da câmera. A mesma música para aplicativos do iPhone.

Como colaborador fraudulento , o usuário da câmera HDR AS100, decidi procurar uma solução alternativa e me deparei com um arquivo bastante interessante - SDK beta da API de câmera remota da câmera da Sony

O SDK foi desenvolvido para desenvolver aplicativos de controle de câmera SONY por WiFi de dispositivos Android e iOS.

Dentro do arquivo morto, existem dois diretórios com exemplos para o desenvolvimento de aplicativos Java para Android e iOS. O mais interessante são as referências da API do documento PDF para a API remota da câmera beta . Está decidido - farei o controle remoto com minhas próprias mãos

O que há na sua API?


Em primeiro lugar, há uma tabela de dispositivos suportados para fevereiro de 2017.

Com base na tabela, a API com graus variados de funcionalidade é compatível com quase todas as câmeras de ação HDR das câmeras AS15 a AS300, FDR, DSC, ILCE e NEX das séries com interface WiFi.

A seguir, descreverei como trabalhar com a câmera HDR AS100 com o firmware mais recente 2.0.0, o que implica que deve haver compatibilidade com outros dispositivos.

Em segundo lugar, o protocolo de controle da câmera. Cada dispositivo SONY desta lista é um servidor HTTP que executa solicitações e também emite quadros separados no formato JPEG e no streaming de vídeo.

Meu objetivo é desenvolver um controle remoto compacto e mais barato para as câmeras SONY

Para começar, verifique se o Wi-Fi está ativado no menu da câmera:

[CONFIGURAÇÃO] -> [CONFIG] -> [Wi-Fi] -> [LIGADO]

O identificador e a senha devem estar em um adesivo separado nas instruções de operação da câmera. Se esse adesivo for perdido, você poderá conectar a câmera via MicoUSB a um computador executando o Microsoft Windows e ligá-lo. [USB] aparece na tela e duas unidades de rede no computador - com um cartão de memória inserido na câmera e a memória interna da câmera PMHOME. Estamos interessados ​​no segundo disco

O arquivo: \\ INFO \ WIFI_INF.TXT contém o identificador e a senha para acessar a câmera via WiFi, e o arquivo \\ INFO \ WPS_PIN.TXT contém o pino da chave para conexão via WPS. O acesso às informações é somente leitura, portanto, não é possível alterar o identificador, a senha ou o PIN.

Agora você pode conectar-se à câmera com esses dados. O endereço IP da câmera após a conexão é 192.168.122.1. Para controlar a câmera, você precisa enviar solicitações HTTP POST para o endereço 192.168.122.1 : 10000 / sony / camera.

Os seguintes endereços podem ser usados ​​para diferentes modelos de câmera:

10.0.0.1 : 10000 / câmera
10.0.0.1 : 10000 / sony / camera
192.168.122.1 : 8080 / sony / camera
192.168.122.1 : 10000 / sony / câmera

Em terceiro lugar, a estrutura da solicitação e resposta. Cada solicitação contém um comando no formato JSON e retorna uma resposta também no formato JSON. Uma lista completa de comandos, bem como exemplos de uso, estão contidos no mesmo arquivo PDF.

Além disso, através do protocolo HTTP, os arquivos finalizados com fotos e um fluxo de vídeo para visualização da câmera são retornados.

O protocolo mais difícil é o pedido de informações. Dependendo da versão da solicitação (1.0 - 1.3), ela produz uma matriz de 34 a 62 parâmetros no formato JSON, que também pode ser matrizes e possui dois modos de operação - com resposta imediata para obter informações completas sobre o estado da câmera e com resposta para qualquer evento na câmera (por exemplo, alternando um modo ou iniciando a gravação)

A primeira panqueca ... LUTOM


O coração do dispositivo será um motor de fogo - o MK mais barato com WiFi - o ESP8266 chinês. É verdade que, olhando para o redesenho monótono da imagem em uma tela gráfica de 240 × 320 usando SPI, decidi adiar a produção de uma cópia do meu painel de controle remoto Sonykovsky com visualização de vídeo em tempo real e decidi pela funcionalidade de um botão liga / desliga comum com uma opção de modo. O display era OLED de uma cor de 0,91 ″ com uma resolução de 32 × 128, que geralmente é usada em pulseiras de fitness baratas.

Esquema de protótipo:



Design da placa:





Bem, a própria vítima da LUT:





Firmware


Eu recomendo pular esta parte para arduino-haters, pois desenvolvi o firmware no Arduino IDE com o ESP8266 Core instalado. Por conveniência, usei bibliotecas adicionais:


Com bibliotecas gráficas, tudo está claro. Eles são necessários para trabalhar com a tela OLED. O WiFiManager é uma biblioteca muito conveniente para configurar conexões WiFi no ESP. No caso de entrar no modo de configurações, ele eleva o ponto de acesso ao ESP e seu servidor WEB minimalista, para o qual é redirecionado quando conectado. Você pode iniciar no modo automático, mas o modo de configurações será iniciado sempre que não houver conexão da câmera. Optei por entrar no modo de configurações pressionando longamente o botão "BOOT / MODE" e sair por tempo limite de 120 segundos.

A biblioteca WiFiManager também é conveniente, pois você pode adicionar seus próprios campos para personalização (isso não foi útil para mim neste projeto), além de manipular eventos - entrando no modo de configuração e salvando as configurações.

Após a configuração das configurações de conexão com a câmera, o programa faz uma conexão, que é gravada na tela. Se uma conexão for estabelecida, o programa envia uma solicitação à câmera para o status atual a cada segundo e exibe as alterações na tela. Isso é feito para que você possa rastrear os controles da câmera diretamente dos botões nela.

Usando o botão "BOOT / MODE", alternamos ciclicamente os três modos principais da câmera - "VIDEO", "PHOTO" e "LAPSE". Use o botão PLAY / STOP para ativar / desativar a gravação no modo VIDEO ou LAPSE e gravar uma única foto no modo PHOTO. Quando a gravação está ligada, o LED vermelho acende. Ao gravar, a foto pisca uma vez.

Há também uma entrada adicional no GPIO14, que basicamente duplica o botão "PLAY / STOP". Essa entrada é necessária para conectar um gatilho externo, que pode sincronizar a captura de fotos para capturas instantâneas de lapso de tempo com um evento externo. Esta entrada pretendo conectar a uma impressora 3D e gravar partes de impressão de vídeo com lapso de tempo.

Das funções adicionais, o programa mede periodicamente os valores da entrada ADC, à qual o divisor está conectado diretamente da bateria, e exibe o status da bateria com o ícone. O programa é calibrado nos divisores R12 = 1,6K e R11 = 10K e em uma bateria de lítio.

Infelizmente, o AS100 não suporta a saída em JSON do tempo de gravação e o número de fotos no modo de lapso de tempo. Nos esboços, esses parâmetros são gravados em variáveis; se alguém repetir, em outras câmeras, eles também podem ser exibidos.

Amostra "industrial"


Recentemente, eu era preguiçoso viciado em encomendar placas no JLCPCB e agora, na última ordem 100x100, havia espaço livre.

O design foi finalizado para instalação bidirecional e, no circuito, foi adicionado o carregamento de lítio no TP4056:







Os chineses tentaram timidamente me dizer que eu encomendo várias pranchas em uma ordem. Mas não estamos acostumados a recuar - uno todas as placas com uma moldura comum em serigrafia, conecto Zeil de placas diferentes (corte de qualquer maneira) e até escrevo em russo que essa é uma placa)))



É verdade que você tem que cortar as tábuas manualmente, existem boas tesouras de metal para isso.
Como resultado, obtemos esse produto





O caso mais simples em uma impressora 3D:







Como funciona:



Agora uma pequena aplicação


Por que a entrada de um acionador externo foi iniciada. Eu queria tentar fotografar as impressões TimeLaps em uma impressora 3D usando minha câmera SONY HDR AS100. Para isso, estou no controlador e fiz uma entrada para um gatilho externo. Existem várias maneiras de enviar um sinal para esta entrada.

Conecte ao pino livre do controlador e costure no firmware da impressora o controle desta entrada usando um comando adicional de código G.

Instale o OctoPrint com o plug- in OptoLapse e conecte a entrada do controle remoto à porta PI PI / Raspberry PI gratuita.

Instale uma chave limitadora adicional conectada ao controlador e leve a cabeça da impressora para tirar fotos de cada quadro, de forma que ela pressione essa chave.

Eu tentei o terceiro método:





Ele rapidamente escreveu um script em seu joelho em PHP, que, após imprimir cada camada, insere o código de retração da cabeça na posição do interruptor de limite.

<?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); ?> 

O código G após cada camada se parece com isso:

 ;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 

Infelizmente, não consegui lidar com o retraimento da impressora imediatamente, então o primeiro vídeo saiu com o nome "Imprimindo ranho")))


“Mas essa é uma história completamente diferente” ©

Todo o projeto OpenSource. A fonte do firmware, os arquivos de design da placa, os circuitos e o modelo do gabinete podem ser obtidos no GITHUB .

Artigo original no meu blog

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


All Articles