WiFi модуль управления камерой Xiaomi Yi

Необходимость придумать модуль дистанционного управления камерой Xiaomi Yi (shutter, радиоспуск) возникла, когда я установил эту камеру на самодельный квадрокоптер. В самом деле, глупо и неудобно включать видеозапись при взлете и отключать только после посадки, снимая все подряд. Вдобавок, иногда нужно сделать несколько фотоснимков, управляя камерой с земли.

Но как это сделать? Для камеры Xiaomi Yi продают маленький пультик дистанционного управления, но он работает по Bluetooth на расстояние не более 10 метров. Для камеры, установленной на квадрокоптере, это никак не подходит. Вдобавок, когда у вас в руках обычный пульт радиоуправления, то и камерой удобнее управлять непосредственно с этого пульта. Но у камеры нет разъема управления. Зато есть возможность дистанционного управления по WiFi через фирменное приложение для смартфона.

Наш подход прост: “взламываем” протокол управления по WiFi и имитируем команды управления при помощи миниатюрного модуля на ESP8266. В свою очередь, этот модуль получает обычный сигнал радиоуправления с бортового приемника и переводит его на язык команд, понятных камере.

Протокол управления камерой

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

Камера работает, как точка доступа WiFi. Внутри камеры живет маленький Linux. Внешний модуль устанавливает WiFi соединение с точкой доступа, соединяется по telnet со встроенным сервером, получает от сервера простейший токен и с этого момента готов передавать команды в камеру и получать от камеры служебную информацию: текущий режим камеры, уровень уровень заряда батареи и т.д. Токен нужен для того, чтобы отличать команды “своего” модуля.

Формат и полный набор команд Android-приложения и ответов камеры получены при помощи сниффера IP-пакетов, установленного на смартфоне и работающего одновременно с фирменным приложением.

Применимость модуля к разным камерам

Я разрабатывал этот модуль для своей камеры с железом версии Z22L. С небольшими изменениями прошивки он подойдет для версий Z23L – Z25L. И наверняка для более поздних версий. Разумеется, модуль подойдет для управления камерами GoPro, Sony и другими, имеющими возможность управления по WiFi. Но для других камер нужно полностью переписать прошивку модуля. К сожалению, у меня есть только Xiaomi Yi, поэтому разработать свою прошивку для другой камеры я не могу.

Совместимость с бортовым оборудованием моделей

В обсуждении проекта на других ресурсах пользователи высказывали опасение, что модуль WiFi, работающий в диапазоне 2,4 ГГц, будет создавать помехи приемнику, который работает в этом же диапазоне. Опыт эксплуатации модуля множеством пользователей показал, что это не так. Прошивка переключает модуль в режим минимальной выходной мощности, антенна не используется. Поэтому модуль поддерживает связь с камерой на расстоянии не более 20-30 см и не создает помехи.

Аппаратная часть

Я использовал модуль ESP-09, установленный на небольшой плате. Это самый маленький и легкий из стандартных модулей ESP.

Модуль ESP-09

С одной стороны напаян модуль, с другой стороны располагается источник питания 3,3 вольта, индикаторный светодиод и согласующие резисторы.

После публикации проекта на форуме rcdesign.ru у меня часто просили продать готовый модуль, поэтому я заказал платы промышленного качества на заводе.

Вы можете приобрести пустую плату или собранный модуль. Обращайтесь через контактную форму сайта.

Архив файлов

Руководство по программированию и использованию. Прочтите его внимательно, прежде чем задавать вопросы.
Версия прошивки ESP8266 для выходного сигнала приемника PWM (стандартный сервосигнал)
Версия прошивки ESP8266 для PPM (последовательный сигнал, включающий в себя все каналы)
Прошивка для модуля MinimOSD, шрифты
Библиотека MAX7456 должна быть установлена в Arduino IDE перед компиляцией прошивки для minimOSD
Утилита для записи шрифта в OSD и его редактирования
Схема и чертеж печатной платы в формате DipTrace

Алгоритм использования модуля

– при включении модуля он соединяется с камерой по WiFi, при успешном соединении камера издает короткий звуковой сигнал.
– для управления камерой используется трехпозиционный переключатель пульта р/у или плавная “крутилка”. В среднем положении камера ждет команду. Одиночное фото делается переключением из центра в минимум. Переключение в максимум включает видеозапись, возврат в центр выключает.
– предусмотрена возможность подключения модуля к компьютеру через адаптер FTDI для программирования и отладки. В терминал можно выводить информацию о текущей работе, включая обмен с камерой. Уникальное имя камеры и пароль прописываются в коде прошивки.

Не забывайте, что камера срабатывает не мгновенно. Например, на то, чтобы сделать фото и сохранить его на карточку, камере нужно до 3-х секунд. Аналогично, при остановке видеозаписи около секунды уходит на выгрузку буфера в файл. Поэтому не дергайте переключатель пульта слишком быстро туда-сюда!!!

Применимость модуля к разным камерам

Я разрабатывал этот модуль для своей камеры с железом версии Z22L. С небольшими изменениями прошивки он подойдет для версий Z23L – Z25L. И наверняка для более поздних версий. Разумеется, модуль подойдет для управления камерами GoPro, Sony и другими, имеющими возможность управления по WiFi. Но для других камер нужно полностью переписать прошивку модуля. К сожалению, у меня есть только Xiaomi Yi, поэтому разработать свою прошивку для другой камеры я не могу.

Когда появились новые версии камеры, некоторые пользователи стали жаловаться, что модуль не может установить связь с камерой. Путем многочисленных тестов и совещаний удалось установить, что одна из причин (возможно даже единственная) состоит в том, что изменилась длина строки ответа камеры, из которой модуль извлекает номер токена (подпрограмма ask_for_token()). Недавно один из энтузиастов прислал мне исправленную подпрограмму для Xiaomi Yui 4K:

Изменению подлежит только одна строка получения токена, выделенная в листинге.

Также есть подозрения по поводу зависимости от версии Arduino IDE, потому что встречалась ситуация, когда в случае камеры версии Z23L у одного пользователя модуль работает с исходной прошивкой, а у другого не может соединиться с точно такой же камерой. Посовещавшись, мы предположили, что причина может крыться в разных версиях компилятора. При работе над проектом я использовал Arduino IDE 1.6.5 и 1.6.8.

Пользователи обнаружили, что камера версии Z25L отвечает на запрос токена двумя строками, а не одной. Причем вторая строка идет с некоторой задержкой. Поэтому рекомендуют в подпрограмму ask_for_token()  вставить небольшую задержку и чтение второй строки:

Подключение OSD и наложение надписей на изображение

Пользователи просили сделать так, чтобы информация о режиме камеры и уровне заряда батареи выводилась поверх изображения, которое поступает на видеомонитор или очки FPV. Для этого нам потребуется любой стандартный модуль OSD на основе микросхемы MAX7456. Я использовал модуль MinimOSD, для которого разработал отдельную прошивку.

Первым делом загрузите нужный шрифт в микросхему MAX7456. Я выбрал из имеющихся у меня готовых шрифтов наиболее, на мой взгляд, подходящий. При желании можете отредактировать его при помощи визуального редактора или записать другой. Имейте в виду, что при этом наверняка придется соответственно подредактировать коды символов в исходном коде прошивки OSD, чтобы эти коды указывали на нужный символ в таблице знакогенератора.

Из папки “Max7456_Font_Update_v1” возьмите скетч с таким же названием и залейте его в minimOSD.  Запустите утилиту, откройте в ней шрифт OSD_Charset.mcm
Залейте этот шрифт в OSD через меню OSD -> Write All…
Теперь закройте утилиту и залейте в OSD рабочую прошивку. Беспроводной модуль прошивается уже известным вам способом через Arduino IDE, ссылки на руководство даны выше. Соедините линии данных ESP и OSD перекрестно: Rx – Tx, Tx – Rx. Не забывайте: модуль ESP питается от 3.3V если нет встроенного источника.

Так это выглядит на экране:




В левом нижнем углу напоминалка положения трехпозиционного переключателя пульта. В среднем положении ожидание (idle). Кстати, в этом режиме при наличии подключения WiFi картинка разворачивается на весь экран. Это такой забавный баг камеры. Чтобы сделать одиночный снимок, переведите движок в минимум, дождитесь, пока изображение мигнет и появится слово CAPTURED. Верните движок в среднее положение. Запись включается движком в максимум. Останов – обратно в среднее положение. Картинка при смене режимов всегда мигает, это такое свойство камеры.

При разряде аккумулятора ниже 10% значок батареи с восклицательным знаком начинает мигать. Если модуль не смог соединиться с камерой, появится надпись “Camera not found”. Помните, что мощность зажата в ноль и связь с камерой работает на очень малом расстоянии. Если надо большую дистанцию, измените значение мощности в прошивке модуля.

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

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