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


    Компания 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
    • 3,5k
    • 8
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 8

      0
      Молодец! Да, пульт не так просто купить, новые пульты конечно отличаются, еще имеют Bluetooth для управления питания и прочими настройками, и вроде говорят по нему тоже картинка передается.
        0
        С картинкой вроде не очень сложно
        Там включается режим LiveView и по определенному URL получается видеопоток
        Только это задача не для ESP8266
        В принципе, ESP32 можно попробовать и кадров 10 в секунду. Для просмотра вполне достаточно.
        Или вообще Raspberry/Orange — но тогда цена пульта с экраном будет уже совсем не бюджетной.
        0
        спасибо за ссылку на API
        Давно хотел заставить свою Х3000 снимать по событию
          0
          Очень интересно и полезно.
          Правда для экшен камеры вся эта возня с пультом мало нужна. Учитывая опять же прожорливость wi-fi.
          Брал as300R с родным пультом, по факту включал его два раза, один из них при покупке.
            0

            Интересный проект. Однако я бы сделал другой корпус, компактнее и разместил бы кнопку сбоку, так было бы удобнее нажимать, имхо. На дисплей так же можно выводить какую-то информацию, кроме текущего режима работы — например, заряд батареи (как пульта так и камеры), остаток памяти.
            Можно еще добавить конвертер usb-uart для прошивки ESP без открытия корпуса.


            Но мы не привыкли отступать — объединяю все платы обще рамкой на шелкографии

            Можете подробнее про это написать?

              0
              Батарея выводится «баром»
              А вот другую информацию не получилось — моя камера не поддерживает все это богатство (((

              Про JLCPCB можно писать и писать. Там с каждым заказом что-то новое. В нюансах.
              Раньше делал несколько платок в одном заказе и фрезеровку между ними. Иди много дырочек. Последний заказ завернули — написали, что там несколько дизайнов.

              На слое маркировке нарисовал общую рамку, да еще и пару контактов у разных плат соединил. Прокатило )))
                0

                А какой софт для объединения использовали?

                  0
                  Я платы в DipTrace проектирую. В нем и объединенную плату потом рисую
                  Только исходную плату нужно сгруппировать перед копированием, и галку поставить, чтобы нумерация компонентов на плате не менялось

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое