Хабрахабр

ДУ с внешним триггером для камер SONY HDR на ESP8266


Компания SONY, решив показать себя на рынке экшен камер, выпускает линейку устройств HDR. Поманив клиентов привлекательной начинкой — хорошая матрица, быстрый процессор, цейсовская оптика и электронный стабилизатор изображения при маленьком весе, компания показывает свое «истинное лицо капитализма».

Пульт довольно дорогой и дефицитный — сейчас его можно купить только на различных электронных барахолках.

Но ведь есть WiFi, значит можно управлять с телефона? Для управления камерой выпускается пульт с просмотром видео по WiFi. Но этого неудобства еще мало: А вы пробовали кататься на горных лыжах или на вейкборде со смартфоном в руках?

Вместо него выпускает Imaging Edge Mobile — жутко неудобное и постоянно отваливающее от камеры. Компания SONY, совершенно не заботясь о своих клиентах, убирает из Google Play приложение PlayMemories Mobile для управления своими экшен камерами по WiFi с любого мобильного телефона, заменив его на приложение для умных часов. Та же песня и для приложений по iPhone.

Как обманутый вкладчик пользователь камеры HDR AS100 я решил поискать альтернативное решение и наткнулся на довольно интересный архив — Sony Camera Remote API beta SDK

SDK написан для разработки приложений управления камерами SONY по WiFi с устройств под управлением Android и iOS.

Самое интересное, это PDF документ API references for Camera Remote API beta. Внутри архива два каталога с примерами для разработки приложения на Java под Android и под iOS. Решено — буду делать ДУ пульт своими руками

Что в API твоем?

Во первых, там есть таблица поддерживаемых устройств на февраль 2017.

Исходя из таблицы, API с разной степенью функциональности совместим с практически всеми экшен камерами HDR от AS15 до AS300, камерами FDR, фотоаппаратами серий DSC, ILCE и NEX имеющих WiFi интерфейс.

0. Далее я буду описывать работу с камерой HDR AS100 с последней прошивкой 2. 0, подразумевая, что с другими устройствами должна быть совместимость.

Каждое устройство SONY из данного списка представляет собой HTTP сервер, который выполняет запросы, а также выдает отдельные кадры в формате JPEG и потоковое видео. Во вторых, протокол управления камерами.

Моя же цель разработать компактный и максимально дешевый пульт дистанционного управления для камер SONY

Для начала, нужно убедиться, что в меню камеры включен WiFi:

Если данная наклейка утеряна, то можно подключить камеру по MicoUSB к компьютеру под управлением Microsoft Windows и включить ее. Идентификатор и пароль должны быть на отдельной наклейке в инструкции по эксплуатации к камере. Нас интересует второй диск На экране появится [USB], а на компьютере два сетевых диска — с карточкой памяти, вставленной в камеру и внутренней памятью камеры PMHOME.

TXT содержится идентификатор и пароль доступа к камере по WiFi, а в файле \\INFO\WPS_PIN. В файле: \\INFO\WIFI_INF. Доступ к информации возможен только на чтение, так что изменить идентификатор, пароль или пин не представляется возможным. TXT ключевой пин для подключения по WPS.

IP-адрес камеры после подключения — 192. Теперь можно с этими данными подключиться к камере. 122. 168. Для управления камерой необходимо послать HTTP POST запросы по адресу 192. 1. 122. 168. 1:10000/sony/camera.

Для разных моделей камер могут быть использованы следующие адреса:

0. 10. 1:10000/camera
10. 0. 0. 0. 168. 1:10000/sony/camera
192. 1:8080/sony/camera
192. 122. 122. 168. 1:10000/sony/camera

Каждый запрос содержит команду в формате JSON и возвращает ответ также в формате JSON. В третьих, структуру запроса и ответа. Полный список команд, а также примеры использования содержатся все в том же PDF файле.

Так же по HTTP протоколу возвращаются готовые файлы со снимками и видеопоток для просмотра с камеры.

В зависимости от версии запроса (1. Наиболее сложным в протоколе является запрос на выдачу информации. 3) выдает массив от 34 до 62 параметров в формате JSON, которые тоже в свою очередь могут быть массивами, и имеет два режима работы — с немедленным ответом полной информации по состоянию камеры и с ответом по любому событию на камере (например переключению режима или включению записи) 0 — 1.

Первый блин … ЛУТом

В качестве сердца устройства будет пламенный мотор — самый дешевый МК с WiFi — китайский ESP8266. Правда глядя на унылую перерисовку картинки на графическом экране 240×320 по SPI я решил отложить изготовлении копии родного соньковского пульта с предпросмотром видео в реальном времени, а остановился на функционале обычной включалки/выключалки с выбором режима. В качестве дисплея взял 0.91″ одноцветный OLED с разрешением 32×128, какой обычно применяется в недорогих фитнес браслетах.

Схема прототипа

Дизайн платы


Ну и сама жертва ЛУТа

Прошивка

Ардуиноненавистникам рекомендую пропустить эту часть, так как прошивку я разрабатывал в Arduino IDE с установленным ESP8266 Core. Для удобства я воспользовался дополнительными библиотеками:
С графическими библиотеками все понятно. Они нужны для работы с OLED дисплеем. WiFiManager — очень удобная библиотечка для настройки подключения WiFi в ESP. В случае входа в режим настроек поднимает на ESP точку доступа и свой минималистичный WEB-сервер, на который переадресует при подключении. Можно запускать в автоматическом режиме, но тогда режим настроек будет запускаться каждый раз, когда нету соединения камерой. Я выбрал вход в режим настроек по длинному нажатию кнопки «BOOT/MODE» и выход по таймауту в 120 сек.

Библиотека WiFiManager удобна еще и тем, что можно добавлять свои поля для настройки (в этом проекте мне не пригодилось), а также обрабатывать события — вход в режим настройки и сохранение параметров настройки.

В случае установки соединения программа каждую секунду шлет камере запрос на текущее состояние и отображает на экране изменения. После того как параметры подключения к камере настроены, программа выполняет соединение, о чем пишет а экранчике. Это сделано для того чтобы можно было отслеживать управления камерой непосредственно с кнопочек на ней.

Кнопкой «PLAY/STOP» включаем/отключаем запись в режиме «VIDEO» или «LAPSE» и делает запись одиночного фото в режиме «PHOTO«. По кнопке «BOOT/MODE» циклически переключаем три основных режима камеры — «VIDEO«, «PHOTO» и «LAPSE». При записи фото однократно моргает. При режиме включения записи горит красный светодиод.

Этот вход нужен для подключения внешнего триггера, которым можно синхронизировать съемку фото для таймлапс снимков с внешним событием. Также существует дополнительный вход на GPIO14, который по сути дублирует кнопку «PLAY/STOP«. Этот вход я планирую для подключения к 3D принтеру и съемке таймлапс видео печати деталей.

Программа откалибрована на делители R12=1. Из дополнительных функций, программа периодически мерит значения входа ADC, куда подключен делитель напрямую от батареи питания, и выдает значком состояние батареи. 6К и R11=10К и литиевую батарею.

В скетчи эти параметры записываются в переменные, если кто то будет повторять, то на других камерах их также можно выводить на дисплей. К сожалению AS100 не поддерживает выдачу в JSON времени записи и количество снимков в режиме таймлапс.

«Промышленный» образец

Последнее время обленился пристрастился заказывать платы на JLCPCB Вот и сейчас, в последнем заказе 100x100 оставалось свободное место.
Дизайн доработал под двухсторонний монтаж, а в схеме добавил зарядку лития на TP4056



Китаец робко пытался мне сказать, что я заказываю несколько плат в одном заказе. Но мы не привыкли отступать — объединяю все платы обще рамкой на шелкографии, соединяю зеили разных плат (все равно разрезать) и даже пишу по русски, что это одна плата )))

Правда разрезать платы приходится вручную, го для этого есть хорошие ножницы по металлу.
В итоге получаем такое изделие


Простейший корпус на 3D-принтере


Как это в работе

Теперь немного применении

Для чего затевался вход внешнего триггера. Захотелось мне попробовать снимать TimeLaps печати на 3D-принтере при помощи моей камеры SONY HDR AS100. Для этого я в контроллере и сделал вход для внешнего триггера. Подавать сигнал на этот вход можно несколькими способами

Подключить к свободному пину контроллера и зашить в прошивку принтера управление этим входом при помощи дополнительной команды G-кода.

Установить OctoPrint с плагином OptoLapse и подключить вход контроллера ДУ к свободному порту Orange PI/Raspberry PI.

Установить дополнительный концевой выключатель, подключенный к контроллеру и отводить для фотографирования каждого кадра головку принтера, чтобы она нажимала на этот выключатель.

Я попробовал 3-й способ:


Быстро на коленке написал скрипт на PHP, который после печати каждого слоя вставляет код отвода головки в позицию концевого выключателя.

<?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) ) else { fprintf($f2,"%s",$s); } } else { fprintf($f2,"%s",$s); }
}
fclose($f1);
fclose($f2);
?>

G-код после каждого слоя выглядит так:

;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

К сожалению, с ходу разобраться с ретраком принтера не получилось, поэтому первое видео получилось с названием «Печатаем сопли» )))

«Но это уже совсем другая история» ©
Весь проект OpenSource. Исходник прошивки, файлы дизайна платы, схемы и модель корпуса можно взять на GITHUB
Оригинал статьи в моем блоге

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть