- Удлиняем HDMI с помощью витой пары
- IP KVM своими руками 3.0
- План мероприятия таков:
- LKV373A, предыстория
- Передатчик
- Ищем LKV373A в сети
- Прошиваем
- Подключаемся через телнет
- Веб интерфейс
- Приемник
- Windows
- Linux
- Выходим в прямой эфир!
- Передача управления
- Выбор комплектующих
- ESP8266
- Прошивка
- Подключение компонентов
- Финальная проверка
- Подведем итоги
- Плюсы:
- Минусы:
Удлиняем HDMI с помощью витой пары
Теоретически, hdmi кабель способен передавать сингал на расстояние 10-15 метров. При условии качественного провода и разъемов, разумеется. Но стоит такой кабель довольно больших денег. Покупать его, чтобы раз в год поднастроить «шайтан-коробку» в слаботочном щите, казалось нецелесообразным, и я притаскивал туда громоздкий монитор и мышь.
Устройств становится все больше — спутниковый ресивер, регистратор камер слежения, скоро появится файловая станция на платформе pc и сервачок на распбери пай. Использовать беспроводную мышку и клавиатуру вполне реально, а вот монитор таскать по всяким укромным местам, куда я расставил технику — не натаскаешься.
На Али я нашел казалось бы хороший вариант: удлинитель, который использует два отрезка витой пары. В принципе, понятно, что два — это лучше чем один. Частоты там 340 Мгц, так что помехи, взаимное влияние сигналов, эхо и вот это все должно сильно мешать при длинном кабеле. Отзывы о таких переходниках тоже были противоречивые. У кого-то работало, у кого-то нет.
Вот, первое, такое устройство, стоит 280 рублей и 130 за доставку.
Второй вариант более компактный и еще менее дорогой — 195 рублей за все.
Потом я нашел комплект адаптеров для передачи hdmi сигнала по одному кабелю — черыре витых пары. Это меня намного больше устравивало, потому что путаться с лишними проводами совсем не хочется, когда можно не путаться. И отзывы были превосходные. Короче, я купил. Вот что:
Вот что приехало: обыкновенный пакетик.
Не ошибешься: TX вставляем в источник сигнала, RX — в монитор.
Производитель заявляет поддержку видео до 4К, длину кабеля до 30 метров и рекомендует пользоваться экранированным кабелем категории не ниже 5e.
Пришло время пробовать. Первый тест оказался неудачным. Как потом выяснилось, крупный корпус переходника не позволял до конца соединиться папе с мамой, утыкаясь в платиковый корпус монитора. Пришлось монитор немного подрезать:
Далее все пошло как по маслу. В монитор переходник, в переходник патч-корд, второй конец в розетку, потом лезем искать другой конец провода.
… вот сюда добираемся. Находим нужную щупальцу этого ктулху, соединяем с TX частью переходника и вставляем в черную шайтан-коробку — ресивер спутникового тв.
Работает! Между источником сигнала и монитором метров 12-15 и прекрасно работает! Витая пара проложена шестой категории, экранированная, но проложена очень не очень: кое-где с силовыми проводами, кое-где с изгибами малого радиуса и всегда в пучке с другими проводами. Но сигнал на монитор приходит качественный и уверенный. Звук тоже, разумеется, есть.
Потом пробовал посмотреть на экран DVR — это еще один стык кабелей и еще метра 3 витой пары — снова работает прекрасно. Теперь можно управлять всем этим богатством не только через ssh и по веб-интерфейсу, но и непосредственно.
Можно смотреть на мониторе фильмы с удаленного устройства, выключив жужжащий комп.
Можно упрятать куда подальше файловый сервер и рулить не через ремот десктоп, а вот прямо непосредственно.
Первый вариант, я такое не покупал, но у некоторых работает. Стоит 280 рублей и 130 за доставку.
Второй вариант, самый дешевый — 195 руб.
Герой обзора — стоит около 300 рублей и у меня работает безупречно.
Источник
IP KVM своими руками 3.0
Это уже третья вариация на тему IP KVM’а, на этот раз концепт полностью пересмотрен, начнем строить нечто новенькое. Будет много интересного, не отходите от экрана. Появится еще один необычный девайс, отбросим почти все старые компоненты, вернемся обратно к родной ардуино и немножко поиграем в хакера.
Для тех, кто только что присоединился, краткое содержание предыдущих серий:
- Первая статья
Собирали IP KVM на Arduino и Raspberry Pi, получилось дорого и с плохим качеством видео. - Вторая статья
OrangePI и Atmega16u2, поучилось дешево, но качество изображения всё также отвратительно.
И вот, наконец, в этой статье будут исправлены все минусы предыдущих. Особый упор будет сделан на максимальное снижение стоимости компонентов.
По традиции рассмотрим составные части собираемого устройства:
1. Наша старая знакомая Atmega16u2:
Это единственный компонент, который перейдет из предыдущих статей.
2. Небезызвестный ESP8266, в данном случае ESP8266-12e:
Можно использовать и другую версию ESP8266, только необходимо учитывать количество и расположение портов.
3. И, собственно, виновник торжества LKV373A
Благодаря этому устройству стало возможным передавать видео по локальной сети, с высоким
разрешением вплоть до full-HD.
План мероприятия таков:
LKV373A, предыстория
Итак, приступим! LKV373A или HDMI Extender устройство для захвата изображения прямо с порта hdmi и трансляции в локальную сеть, эти устройства еще называют hdmi удлинителями. По задумке производителей комплект подобных устройств должен состоять из transmitter (передатчика) и receiver (приемника), обозначение TX и RX соответственно. Использоваться они должны, вероятно, для того, чтобы приносить производителю больше прибыли, только в паре. Но нашелся человек, под ником Danman вот ссылка на его блог, которому стало интересно как это работает. Открыл он Wireshark, поснифал трафик передаваемый TX устройством, что же оказалось?
Видеопоток передается без какого-либо шифрования, и при помощи VLC Player’a можно посмотреть его без лишних усилий. Но на этом он не остановился, «пощупал»: и веб интерфейс, и TTL, и телнет, и даже прошивку программатором стянул. Об этом он в подробностях рассказал в своем блоге. Там же была выложена прошивка, которая интересует нас в первую очередь: IPTV_TX_PKG_v4_0_0_0_20160427.PKG. В этой прошивке веб интерфейс с расширенными настройками, а не как у стандартной только кнопка обновить. К тому же, в этой прошивке есть телнет с множеством команд для настройки. Именно при помощи этой прошивки мы перенастроим HDMI Extender под наши задачи. Прошивку и все необходимое я выложил на github вот ссылка, она понадобится нам позднее, а пока заканчиваем с теорией. Переходим к практике.
Передатчик
Ищем LKV373A в сети
Мне попался в руки такой же extender что и Danman(у). Все что будет изложено далее подходит именно для HDMI Extender LKV373A версии V3.0!
Подключаем LKV373A к локальной сети, включаем питание. Теперь попробуем удостовериться, что устройство видно в сети ping 192.168.1.238 .
192.168.1.238 это IP-адрес по умолчанию. Если на extender’ре старая прошивка адрес не изменится, независимо от того, присутствует DHCP сервер в сети или нет. Более новые версии прошивки используют IP по умолчанию только, если устройство не смогло получить адрес от DHCP. Если на ping запрос получили ответ, продолжаем дальше. Если нет, не отчаивайтесь, попробуйте подключить extender напрямую к LAN порту компьютера и воспользоваться сниффером.
Прошиваем
HDMI Extender нашли, перейдем к прошивке. Зайдем на гитхаб и скачаем все, что там выложено. Теперь откроем веб интерфейс extender’а через браузер и увидим такую картину:
Нажимаем «Browse…», выбираем прошивку, файл с названием IPTV_TX_PKG_v4_0_0_0_20160427.PKG, и нажимаем «Upgrade». Тадам! Прошивка завершена, теперь подключимся к LKV373A по телнету, чтобы сбросить пароль.
Команда для подключения будет выглядеть примерно так Telnet 192.168.1.238 9999, где 9999 — это порт для подключения. КЭП предупреждает: адрес полученный от DHCP можно узнать при помощи сканера сети.
Подключаемся через телнет
При подключении должно появиться следующее сообщение:
Пишем list . В ответ получаем список команд:
Для сброса всех настроек и пароля используем команду factory_reset . Пишем команду, нажимаем enter и получаем такую картину:
Веб интерфейс
Теперь мы можем настраивать устройство как нужно нам. Зайдем в веб интерфейс. Используем стандартные логин:admin пароль:123456 и вот он, «желанный» веб интерфейс с дополнительными пунктами настройки:
Хотя возможностей в веб интерфейсе прибавилось, но их всё же для наших целей недостаточно. Особенно не хватает более свободных настроек в части стриминга, там жестко задан, далеко не самый удобный, список ip-адресов на которые можно стримить. Есть конечно мультикаст, но это лучше оставить для телевидения. Ограничения можно обойти, об этом немного позднее.
Вот, устройство в сети нашли, прошивку «накатили», пароли сбросили. Передатчик почти готов перейдем к приемнику.
Приемник
Давайте определимся, на устройство, под управлением какой операционной системы, будем передавать поток. Муки выбора думаю испытывать не будете, варианта всего два:
Windows
Для виндовс попробовал несколько плееров, но результаты получились так себе. При захвате и последующем воспроизведении видеопотока появляется задержка, которая в первую очередь зависит от плеера воспроизводящего поток. На различных плеерах задержка варьировалась от одной секунды, до пяти и даже больше. Лучше всех, на виндовс, показал себя VLC Player.
Перейдем к делу. Запустим VLC Player, сверху в выпадающем меню «Медиа» выбираем пункт «Открыть URL…» в поле сетевого адреса пишем udp://@:5004 , ставим галку в чекбоксе «Показать дополнительные параметры» и в поле «Кэширование» ставим свое значение, этот параметр определяется индивидуально. Чем меньше значение в этом поле, тем меньше задержка, но слишком малое значение может привести к «артефактам» и выпадениям кадров, все будет зависеть от инфраструктуры локальной сети. Лучшие результаты, которых смог добиться, это задержка около одной секунды. На линуксе же, результаты получились гораздо лучше около 200-300 миллисекунд.
Linux
Как показывает практика, лучшие результаты получаются при использовании связки программ socat и mplayer. На моем компьютере установлена Ubuntu, поэтому команда для установки socat будет выглядеть так:
Mplayer устанавливается аналогично:
Ну, и прислушаемся совету Danman’а:
Эта команда нужна для того что бы убрать из потока так называемые «Zero Length UDP Packets» — пакеты нулевого размера, которые «засоряют» поток.
Выходим в прямой эфир!
Приемник готов, можно запускать трансляцию! Набираем в консоли принимающего компьютера ifconfig или ipconfig в зависимости от операционной системы, Запоминаем IP-адрес приемника и вернемся к веб интерфейсу передатчика. Откроем веб-интерфейс, если вдруг уже закрыли, введем логин, пароль и прямо в адресной строке браузера пишем:
Подставляем свои IP-адреса и нажимаем enter. Эта строка настроит HDMI Extender для трансляции захваченного видео на выбранный вами ip и выключит мультикаст.
Запускаем VLC в Windows. Или в терминале Linux пишем:
Абра кадабра! И вот наш, или не наш, рабочий стол в прямом эфире.
Вот так, при помощи немного хакерских методов, мы заставили устройство выполнять то, что нам требуется.
С передачей видео разобрались, переходим к удаленному управлению.
Передача управления
Выбор комплектующих
Т.к. стоимость HDMI Extender’а невысока, около 1800 рублей, а так же из-за комментариев что, мол, дороговато, выдвигаю лозунг: «Даешь IP KVM за 2000 рублей!». На верность этого утверждения будет сильно влиять курс рубля, но не будем о грустном, хочется верить в светлое будущее. Для достижения цели нам понадобятся очень дешевые элементы, мой выбор пал: на ESP8266 в качестве контроллера, и все того же Atmega(8/16/32)u2 в качестве исполнительного устройства.
Можно конечно рассмотреть и другие кандидатуры на роль исполнительного устройства(клавиатуры). Прошивка, эмулирующая клавиатуру, написана на библиотеке LUFA(вроде как). Эта библиотека может использоваться для всего семейства AVR с возможностью подключения к USB. Из этого следует, что в качестве эмулятора клавиатуры можно подобрать, возможно более дешевый, микроконтроллер. Это информация к размышлению, а сейчас продолжим.
Приобрести ESP8266 можно примерно за 90 рублей, Atmega(8/16/32)u2 примерно за 100 рублей, и даже дешевле, если брать небольшими партиями по 5, или больше штук. Конечно, нужны будут расходные материалы для обвязки микроконтроллеров, но стоимость их крайне мала, поэтому рассматривать их не буду.
ESP8266
Это чудо китайской промышленности не нуждается в представлении, посему скажу только, что в этом проекте я использовал версию ESP8266-12e. Использовать другие версии конечно можно, только нужно учитывать расположение портов, т.к. в данном варианте один из портов ESP8266 используется для включения питания на Atmega(8/16/32)u2, ниже будет указано на схеме.
Прошивка
Прошивка для ESP8266 написана в среде ArduinoIDE так что давайте скачаем свежую версию с сайта разработчика. Далее нужно добавить поддержку ESP8266 — самый простой способ можете найти по этой ссылке. На той же странице можно найти много полезной информации, например схема подключения к питанию и TTL. Для тех, кто не в курсе ESP8266 использует строго 3.3 вольта! Если не уверены в собственных силах, лучше использовать вариант платы адаптированный для USB, вроде NodeMCU:
Если все готово открываем ArduinoIDE и копируем мой скетч:
Подключим нужную библиотеку:
Выбираем вкладку «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку» Выбираем библиотеку под названием «UNO-HIDKeyboard-Library-master(mod).zip», которую скачали с гитхаба. Компилируем и заливаем прошивку. Для загрузки прошивки подключаем ESP8266 TTL, выставляем нужный порт в ArduinoIDE. Настройки должны выглядеть примерно так:
Чтобы загрузить прошивку, нужно порт GPIO0 замкнуть на землю, и перезагрузить микроконтроллер кратковременно замкнув порт Reset так же на землю. Подробно расписывать не буду, чтоб не раздувать статью, гугл вам в помощь.
Логика работы ESP8266 такова: При подаче питания микроконтроллер в течении примерно тридцати секунд пытается подключиться к Wi-Fi точке доступа:
Если подключение удалось: открывает 23 порт, к которому можно подключиться, используя telnet и передавать нажатия клавиш. Кроме клавиш можно передавать комбинации, построенные на «Ctrl + key» которые будут нажимать определенные сочетания. Например, если передать «Ctrl + d», на управляемом компьютере будет нажато сочетание CTRL+ALT+DELETE.
Также имеются комбинации для управления портами ESP8266, можно, например, подсоединить реле и при помощи комбинации «Ctrl+q» включать и отключать реле, тем самым удаленно включать и отключать управляемый компьютер. Эти и другие комбинации можете посмотреть в исходниках.
Если не удалось: ESP8266 переходит в режим точки доступа, с названием «TD», Паролем «testtest» и открывает небольшой веб интерфейс, доступный по адресу 192.168.4.1, в котором можно задать настройки для подключения по WI-FI.
Таким образом, устройство можно легко подключить к другой точке доступа. Да, тут скрывается ложка дегтя, для работы нашего IP KVM’а потребуется и LAN кабель и Wi-Fi. Такова будет плата за дешевизну устройства.
С ESP8266 разобрались, с Atmega16u2 все как в предыдущих статьях, прошиваем программой Flip, прошивка есть в архиве скачанном с гитхаба.
Подключение компонентов
Для правильного подключения компонентов прикладываю схему. Только учтите, это условная схема, она служит для наглядности и не претендует на звание идеальной. Каждый волен «обставить» её как ему нравится.
Поясню некоторые моменты: Транзистор на схеме нужен для того, что бы включать Atmega16u2 уже после загрузки ESP8266 т.к при включении ESP8266 на все TX порты передается отладочная информация, и если Atmega16u2 включен и подключен к компьютеру, ему передается поток данных, с объемом которых не справляется драйвер. Доподлинно неизвестно что происходит в этот момент, предположительно переполняется буфер драйвера, эффект получается крайне неприятным: происходит нажатие(программное) сотен клавиш, если открыт текстовой редактор туда высыпает кучу тарабарщины, при этом залипают все служебные клавиши и в итоге работа с клавиатурой становится не возможной. Что бы избежать этого, питание на Atmega16u2 нужно подавать после загрузки ESP8266. В прошивке этот момент учтен.
Есть, конечно, альтернатива схеме, но это вариант для богатых, или ленивых. И кстати этот вариант не отменяет вышеизложенное:
На снимке Arduino UNO без чипа Atmega328p подключенный к китайскому аналогу NodeMCU. Линия 3.3 вольта подключена к линии того же уровня напряжения на Arduino, а так же подключена земля и контакт GPIO2(ESP8266) к контакту TX на Arduino.
Финальная проверка
Подключаемся по телнету на 23 порт и проверяем работоспособность. Сделать это можно: На Windows командой telnet [ip-адрес ESP8266] .
На Linux будет немного сложнее:
Команда telnet [ip-адрес ESP8266] далее нужно нажать управляющий символ, по умолчанию «Ctrl + ]», телнет должен перейти в командный режим, далее нажимаем «l» и «Enter». Этими действиями переключим телнет в символьный режим.
Все готово, можем проверять работу созданного нами устройства. Напомню возможные комбинации для нажатий «Alt + Tab», «Ctrl + Alt + Del» и д.р. можете посмотреть в скетче. Вот и все, третья инкарнация DIY IP KVM’а готова.
Подведем итоги
Плюсы:
Минусы:
- Необходимость в подключении и по Wi-Fi, и по Lan кабелю
- При использовании с VGA необходим переходник, что естественно отразится на себестоимости
В общем и целом, устройство получилось достойное внимания, конечно, оно не конкурент серийным IP KVM’ам со всеми их «плюшками», но зато сильно выигрывает в цене. И для домашнего использования, а может и не только, вполне подходит.
Пользуясь случаем хотел поблагодарить пользователя DaylightIsBurning! Этот добрый человек подсказал верное направление, в котором нужно вести раскопки.
Источник