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

10005984bКомпания 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 запросы по адресу http://192.168.122.1:10000/sony/camera.

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

  • http://10.0.0.1:10000/camera
  • http://10.0.0.1:10000/sony/camera
  • http://192.168.122.1:8080/sony/camera
  • http://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, какой обычно применяется в недорогих фитнес браслетах.

Накидываю схему для прототипа

Схема-0

и дизайн платы с односторонним монтажом под ЛУТ технологию

3d-0-1 3d-0-2

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

100 101

Прошивка

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

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

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

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

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

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

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

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

Первое включение или перенастройка камеры производится длинным (более 5 сек) удержанием кнопки BOOT/OPER. По этому действию запускается WiFiManager в режиме настройки WiFi. Он поднимает точку доступа (без пароля!) и, после соединения, позволяет выбрать или прописать имя и пароль соединения к камере SONY. После этого подключение будет всегда происходить в автоматическом режиме после включения камеры.

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

Не удержался. Заказывал платки на JLCPCB и на свободное место вставил и для ДУ. Немного доработал схему на основании «опытной эксплуатации». Уменьшил размеры, а на обратной стороне добавил зарядку для лития на TP4056

Схема

Дизайн платы получился таким

3d-1 3d-2

Вид без дисплей OLED

3d-3

Спецификация компонентов

Что получилось

200 201 202 203 204

206

 

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

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

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

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

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

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

301

300

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

G-код выглядит так:

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

Но «это уже другая история» …

Исходные тексты, схемотехнику и дизайн плат можно взять на GITHUB

Вы можете оставить отзыв или трекбек со своего сайта.

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

  1. EUGENIY:

    Хм..Извиняюсь-а где статья?

  2. Roma:

    Привет Алексей! А ещё можешь такой мультик сделать за денюшку?

  3. Алексей:

    Прикольно!
    В симплифае есть сценарий смены слоя… то есть можно без php обойтись.
    А чем собирал отдельные картинки в видео?

  4. Dima:

    Ищу способ управлять видеоплеером в винде через вайфай. Половина уже есть, осталось написать сервер под винду, хотя можно слушать порты через повершелл по идее?

  5. Yuriy:

    Спасибо, очень помогла твоя статья. Искал способ записи бесконечного таймлапса на видеокамере Sony HDR-CX625 (в камере есть встроенный режим на 300 снимков). (К камере нет TimeRemoteSwitch, хотя у камеры есть Sony Multiport и есть TimeRemoteSwitch JJC TM-F2, но он как и обещал производитель с ней не заработал, хотя я думал что мог бы и работать). Все работает и должно работать на других камерах серии в которых есть WiFi.
    В моей версии все проще мне нужно делать снимок раз в минуту.
    #include
    #include
    #include
    WiFiMulti WiFiMulti;
    void setup() {
    Serial.begin(115200);
    while (!Serial) continue;
    // We start by connecting to a WiFi AP
    WiFiMulti.addAP(«DIRECT-KEH3:HDR-CX625», «pass»);
    Serial.println(«Waiting for WiFi… «);
    while(WiFiMulti.run() != WL_CONNECTED) {
    Serial.print(«.»);
    delay(500);
    }
    Serial.println(«WiFi connected»);
    Serial.println(«IP address: «);
    Serial.println(WiFi.localIP());
    delay(500);
    HTTPClient http;
    http.begin(«http://192.168.122.1:10000/sony/camera»);
    http.addHeader(«Content-Type», «application/json»);
    http.POST(«{ \»method\»: \»setShootMode\», \»params\»: [\»still\»], \»id\»: 1, \»version\»: \»1.0\» }»);
    }
    void loop() {
    HTTPClient http;
    http.begin(«http://192.168.122.1:10000/sony/camera»);
    http.addHeader(«Content-Type», «application/json»);
    http.POST(«{ \»method\»: \»actTakePicture\», \»params\»: [], \»id\»: 1, \»version\»: \»1.0\» }»);
    delay(60000);
    }

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.