Как стать автором
Обновить

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

Время на прочтение6 мин
Количество просмотров5.1K

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

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


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

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

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

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

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

Что в API твоем?


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

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

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

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

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

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

[SETUP] -> [CONFG] -> [Wi-Fi] -> [ON]

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

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

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

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

10.0.0.1:10000/camera
10.0.0.1:10000/sony/camera
192.168.122.1:8080/sony/camera
192.168.122.1:10000/sony/camera

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

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

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

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


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

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



Дизайн платы:





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





Прошивка


Ардуиноненавистникам рекомендую пропустить эту часть, так как прошивку я разрабатывал в Arduino IDE с установленным ESP8266 Core. Для удобства я воспользовался дополнительными библиотеками:


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

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

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

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

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

Из дополнительных функций, программа периодически мерит значения входа ADC, куда подключен делитель напрямую от батареи питания, и выдает значком состояние батареи. Программа откалибрована на делители R12=1.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) ){
   $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);
?>

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.

Оригинал статьи в моем блоге
Теги:
Хабы:
Всего голосов 31: ↑31 и ↓0+31
Комментарии8

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн