И так приступим, для прошивки потребуется утилита от производителя под названием Flip . Качаем, устанавливаем, запускаем и вот перед нами окно программы:
Сначала кнопки(галки) не активны, это нормально, подключаем ардуину к компьютеру и замыкаем – размыкаем два крайних контакта со стороны USB порта, RESET и GND.
В системе должно появиться новое устройство под названием, как ни странно, ATmega16u2 устанавливаем драйвер(в папке с программой), выбираем в программе flip вкладку «Settings» > «Communication» > «USB» > «open», кнопки должны стать активны. На всякий случай можно сделать бэкап прошивки, чтоб можно было все вернуть на место. В меню «File» нажимаем «Load HEX File», программа требовательна к путям, лучше всего положить файл прошивки в корень диска C:, выбираем нужный hex файл с прошивкой, проверяем стоят ли галки «Erase», «Program», «Verify» и нажимаем «Run». Отключаем - подключаем arduino и вуаля… Теперь мы больше не сможем загружать прошивки в ардуино через встроенный USB, зато получили отличную клавиатуру без кнопок.
Не переживайте по поводу прошивки arduino, прошивку можно будет загрузить из Arduino IDE через отдельный USB To TTL адаптер, хотя надо сказать, теперь это будет менее удобно.
Подключаем USB To TTL адаптер, например такой:
Нам понадобятся Белый, зеленый и черный контакты это RX, TX и GND соответственно, подключаем их к пинам с такими же обозначениями на ардуине, только наоборот RX к TX, а TX к RX. Красный контакт использовать не следует!
Подключаем USB To TTL к компьютеру, устанавливаем драйвера, в диспетчере устройств должен появиться новый COM Port. Открываем arduino IDE и выставляем: Плата - Arduino/Genuino Uno, Порт – наш новоиспеченный последовательный порт.
Подготовка закончена, переходим непосредственно к прошивке. Копируем мою писанину:
Arduino - Sketch
#include
Avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.34s
avrdude: verifying ...
avrdude: 2934 bytes of flash verified
avrdude done. Thank you.
Если после нескольких попыток загрузка прошивки так и не произошла, попробуйте поменять местами контакты RX и TX, а также проверьте надежно ли подключен контакт GND.
Sudo raspi-config
Откроется меню настройки распберри, выбираем «Advanced Options» > «Serial» и выбираем «No».
Возможно эти манипуляции и не понадобятся, так, перестраховка. Этот параметр определяет, будет ли ОС на малине взаимодействовать с serial портом, это взаимодействие нужно в основном для отладки, так что смело отключаем, нам оно будет только мешать, т.к. с ардуиной мы будем общаться именно через этот порт, а система будет засорять эфир.
Устанавливаем программу minicom.
Minicom - простенькая программа для работы с serial портом.
Sudo apt-get install minicom -y
Задаем права на доступ к устройству, /dev/ttyAMA0 - это тот самый сериал порт.
Sudo chown pi /dev/ttyAMA0
sudo chmod 744 /dev/ttyAMA0
Запускаем minicom:
Sudo minicom -s
Откроется меню программы, выбираем пункт «Serial port setup», откроется еще одно меню, выбираем «Serial Device» нажатием на клавишу A, прописываем /dev/ttyAMA0, нажимаем Enter, далее выбираем пункт Bps/Par/Bits под буквой E, появляется очередное меню нажимаем C и Q строчка Current: должна выглядеть вот так «9600 8N1» нажимаем Enter. Убедимся что в строчках F - Hardware Flow Control: и G - Software Flow Control: стоит No, в общем все должно быть как на скриншоте ниже, нажимаем Enter.
Сохраним эти настройки как настройки по умолчанию «Save setup as dfl» и закрываем «Exit from Minicom».
Здесь есть один момент, у ардуино и распберри разные уровни напряжения и по идее их нужно согласовать, советую ознакомиться со статьей .
Хотя у меня все заработало напрямую без согласования, не следует подражать плохому примеру и приобрести преобразователь логических уровней, самый простой выглядит так:
Или хотя бы собрать делитель напряжения на резисторах.
Проверяем все соединения, вкючаем raspberry pi, переходим в консоль малины, запускаем minicom. Сразу оговорюсь я подключался к малине через ssh, в качестве клиента использовал KiTTY(модифицированную версию PuTTY), это важно т.к. с другими терминалами значения передаваемых клавиш могут быть иными и соответственно нужно будет сделать поправку на ветер - поменять номер перехода switch case.
В общем передаю вам в руки как говорится «as is». Что ж на этом пожалуй закончу, самодельный IP KVM готов.
- Тонкая настройка
Можно перехватывать практически любые комбинации и назначать на них практически любые клавиши вплоть до KEYBOARDPOWER и VOLUMEUP, кстати возможные значения можно посмотреть в заголовочном файле HIDKeyboard.h, а можно и добавить свои.
Это уже третья вариация на тему IP KVM"а, на этот раз концепт полностью пересмотрен, начнем строить нечто новенькое. Будет много интересного, не отходите от экрана. Появится еще один необычный девайс, отбросим почти все старые компоненты, вернемся обратно к родной ардуино и немножко поиграем в хакера.
Для тех, кто только что присоединился, краткое содержание предыдущих серий:
И вот, наконец, в этой статье будут исправлены все минусы предыдущих. Особый упор будет сделан на максимальное снижение стоимости компонентов.
По традиции рассмотрим составные части собираемого устройства:
1. Наша старая знакомая Atmega16u2:
Это единственный компонент, который перейдет из предыдущих статей.
2. Небезызвестный ESP8266, в данном случае ESP8266-12e:
Можно использовать и другую версию ESP8266, только необходимо учитывать количество и расположение портов.
3. И, собственно, виновник торжества LKV373A
Благодаря этому устройству стало возможным передавать видео по локальной сети, с высоким
разрешением вплоть до full-HD.
Итак, приступим! 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 вот ссылка , она понадобится нам позднее, а пока заканчиваем с теорией. Переходим к практике.
Мне попался в руки такой же 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 можно узнать при помощи сканера сети.
При подключении должно появиться следующее сообщение:
============================== ========IPTV TX Server======== ============================== input>Пишем list . В ответ получаем список команд:
============================== ========IPTV TX Server======== ============================== input>list set_group_id get_group_id set_dhcp get_dhcp set_uart_baudrate get_uart_baudrate set_static_ip get_static_ip set_mac_address get_mac_address get_lan_status get_hdcp get_video_lock get_ip_config set_session_key set_device_name get_device_name set_video_bitrate get_video_bitrate set_downscale_mode get_downscale_mode set_video_out_mode get_video_out_mode set_streaming_mode get_streaming_mode get_fw_version get_company_id factory_reset reboot list exitДля сброса всех настроек и пароля используем команду factory_reset . Пишем команду, нажимаем enter и получаем такую картину:
Input>factory_reset Processing factory reset! System will reboot after few seconds! Connection closed by foreign host.
Теперь мы можем настраивать устройство как нужно нам. Зайдем в веб интерфейс. Используем стандартные логин:admin пароль:123456 и вот он, «желанный» веб интерфейс с дополнительными пунктами настройки:
Хотя возможностей в веб интерфейсе прибавилось, но их всё же для наших целей недостаточно. Особенно не хватает более свободных настроек в части стриминга, там жестко задан, далеко не самый удобный, список ip-адресов на которые можно стримить. Есть конечно мультикаст, но это лучше оставить для телевидения. Ограничения можно обойти, об этом немного позднее.
Вот, устройство в сети нашли, прошивку «накатили», пароли сбросили. Передатчик почти готов перейдем к приемнику.
Давайте определимся, на устройство, под управлением какой операционной системы, будем передавать поток. Муки выбора думаю испытывать не будете, варианта всего два:
Для виндовс попробовал несколько плееров, но результаты получились так себе. При захвате и последующем воспроизведении видеопотока появляется задержка, которая в первую очередь зависит от плеера воспроизводящего поток. На различных плеерах задержка варьировалась от одной секунды, до пяти и даже больше. Лучше всех, на виндовс, показал себя VLC Player.
Перейдем к делу. Запустим VLC Player, сверху в выпадающем меню «Медиа» выбираем пункт «Открыть URL…» в поле сетевого адреса пишем udp://@:5004 , ставим галку в чекбоксе «Показать дополнительные параметры» и в поле «Кэширование» ставим свое значение, этот параметр определяется индивидуально. Чем меньше значение в этом поле, тем меньше задержка, но слишком малое значение может привести к «артефактам» и выпадениям кадров, все будет зависеть от инфраструктуры локальной сети. Лучшие результаты, которых смог добиться, это задержка около одной секунды. На линуксе же, результаты получились гораздо лучше около 200-300 миллисекунд.
Как показывает практика, лучшие результаты получаются при использовании связки программ socat и mplayer. На моем компьютере установлена Ubuntu, поэтому команда для установки socat будет выглядеть так:
Sudo apt-get install socat
Mplayer устанавливается аналогично:
Sudo apt-get install mplayer
Ну, и прислушаемся совету Danman"а:
Sudo iptables -t raw -A PREROUTING -p udp -m length --length 28 -j DROP
Эта команда нужна для того что бы убрать из потока так называемые «Zero Length UDP Packets» - пакеты нулевого размера, которые «засоряют» поток.
Приемник готов, можно запускать трансляцию! Набираем в консоли принимающего компьютера ifconfig или ipconfig в зависимости от операционной системы, Запоминаем IP-адрес приемника и вернемся к веб интерфейсу передатчика. Откроем веб-интерфейс, если вдруг уже закрыли, введем логин, пароль и прямо в адресной строке браузера пишем:
Http://АйПиПередатчика/dev/info.cgi?action=streaminfo&udp=n&rtp=y&multicast=n&unicast=y&mcastaddr=АйПиПриемника&port=5004
Подставляем свои IP-адреса и нажимаем enter. Эта строка настроит HDMI Extender для трансляции захваченного видео на выбранный вами ip и выключит мультикаст.
Запускаем VLC в Windows. Или в терминале Linux пишем:
Socat UDP-RECV:5004 - | mplayer –
Абра кадабра! И вот наш, или не наш, рабочий стол в прямом эфире.
Вот так, при помощи немного хакерских методов, мы заставили устройство выполнять то, что нам требуется.
С передачей видео разобрались, переходим к удаленному управлению.
Т.к. стоимость 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-12e. Использовать другие версии конечно можно, только нужно учитывать расположение портов, т.к. в данном варианте один из портов ESP8266 используется для включения питания на Atmega(8/16/32)u2, ниже будет указано на схеме.
Прошивка для ESP8266 написана в среде ArduinoIDE так что давайте скачаем свежую версию с сайта разработчика . Далее нужно добавить поддержку ESP8266 - самый простой способ можете найти по этой ссылке . На той же странице можно найти много полезной информации, например схема подключения к питанию и TTL. Для тех, кто не в курсе ESP8266 использует строго 3.3 вольта! Если не уверены в собственных силах, лучше использовать вариант платы адаптированный для USB, вроде NodeMCU:
Если все готово открываем ArduinoIDE и копируем мой скетч:
Скетч
#include
";
content += "Firmware update UPDATE";
server.send(200, "text/html", content);
}
void handleNotFound(){
String message = "File Not Foundnn";
message += "URI: ";
message += server.uri();
message += "nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "nArguments: ";
message += server.args();
message += "n";
for (uint8_t i=0; i
Подключим нужную библиотеку:
Выбираем вкладку «Скетч» → «Подключить библиотеку» → «Добавить.ZIP библиотеку» Выбираем библиотеку под названием «UNO-HIDKeyboard-Library-master(mod).zip», которую скачали с гитхаба. Компилируем и заливаем прошивку. Для загрузки прошивки подключаем ESP8266 TTL, выставляем нужный порт в ArduinoIDE. Настройки должны выглядеть примерно так:
Чтобы загрузить прошивку, нужно порт GPIO0 замкнуть на землю, и перезагрузить микроконтроллер кратковременно замкнув порт Reset так же на землю. Подробно расписывать не буду, чтоб не раздувать статью, гугл вам в помощь.
Логика работы ESP8266 такова: При подаче питания микроконтроллер в течении примерно тридцати секунд пытается подключиться к FI-WI точке доступа:
Если подключение удалось : открывает 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) к контакту RX на Arduino(ошибка, следует подключать к TX ).
Подключаемся по телнету на 23 порт и проверяем работоспособность. Сделать это можно: На Windows командой telnet .
На Linux будет немного сложнее:
$ telnet 192.168.***.*** Trying 192.168.***.***... Connected to 192.168.***.***. Escape character is "^]". ^] telnet> l
Все готово, можем проверять работу созданного нами устройства. Напомню возможные комбинации для нажатий «Alt + Tab», «Ctrl + Alt + Del» и д.р. можете посмотреть в скетче. Вот и все, третья инкарнация DIY IP KVM"а готова.
В общем и целом, устройство получилось достойное внимания, конечно, оно не конкурент серийным IP KVM"ам со всеми их «плюшками», но зато сильно выигрывает в цене. И для домашнего использования, а может и не только, вполне подходит.
Пользуясь случаем хотел поблагодарить пользователя DaylightIsBurning ! Этот добрый человек подсказал верное направление, в котором нужно вести раскопки.
Благодарю за внимание. До новых встреч!
Эта статья написана под впечатлением от - большое спасибо автору! В этой статье почти удалось сделать собственный IP KVM Switch, и это круто! Но объясню, почему почти. Да, там все работает как и написал автор… До момента перезагрузки в биос - там вся магия рассеивается и сколько не старайся, ничего не происходит.
Решено было исправить это досадное недоразумение и как можно дешевле и компактней. Начнем со стереотипов Raspberry Pi и Arduino, а в следующей будет продолжение уже на другом железе.
Итак, что нам понадобится:
1.
Плата видеозахвата обязательно с поддержкой UVC драйвера, вроде этой.Вариантов
полно на алиекспрессе и других китайских магазинах.
UVC это стандартизированный открытый драйвер который по умолчанию входит в большинство линукс дистрибутивов, с другими драйверами могут быть проблемы.
2. VGA to AV Конвертер:
Обратите внимание! Нужен именно VGA to AV, а не наоборот.
3. Arduino UNO, именно UNO, так как на ней есть чип Atmega16u2, он нас интересует в первую очередь. Вот он рядом с USB портом, так же бывают ардуины с чипом Atmega8u2 подойдут и с тем и с тем.
4. Ну и конечно Raspberry Pi, у меня был версии 2 b поэтому все написанное в этой статье актуально именно для него, но в целом думаю не должно возникнуть особых сложностей и с другими моделями малины.
Подключаем плату видеозахвата к распберри, подключать лучше напрямую к USB не используя USB удлинителей особенно того что идет в комплекте с платой, иначе может возникнуть торможение видео, подвисания распберри и т.д.
Переходим в консоль, обновляем пакеты:
Sudo apt-get update && sudo apt-get upgrade –y
Ls /dev/video*
Должно выдать что-то вроде: /dev/video0.
Устанавливаем Motion, трансляцию захваченного изображения будем вести именно через него:
Sudo apt-get install motion -y
Редактируем конфиг автозапуска:
Sudo nano /etc/default/motion
В строке start_motion_daemon ставим ‘yes’. Сохраняем изменения Ctrl + x, y, Enter.
Редактируем конфиг самого motion(а):
Sudo nano /etc/motion/motion.conf
Меняем значения параметров как указано далее:
Параметр определяет запуск приложения в качестве службы:
Daemon on
Эти параметры определяют разрешение передаваемого изображения, смысла ставить большее разрешение нет, т.к. захват видео ограничен стандартами PAL или SECAM, разрешение коих 720х576. Это кстати досадный недостаток, но об этом позднее.
Width 800
height 600
Частота захвата кадров:
Framerate 25
Отключаем сохранение скриншотов:
Output_normal off
Качество передачи изображения:
Webcam_quality 100
Частота передачи кадров:
Webcam_maxrate 25
Отмена ограничения на подключение с других ip
Webcam_localhost off
Сохраняем изменения Ctrl + x, y, Enter.
Перезагружаем распберри:
Sudo reboot
Ждем пару минут если все сделали правильно должен загореться светодиод на плате видео захвата.
Подключаемся браузером к порту 8081 распберри и видим серый или синий прямоугольник с бегущим снизу временем.
Процесс пошел, ищем жертву для захвата сигнала с VGA порта, подключаем к порту “VGA IN” конвертера, а плату видеозахвата к “VIDEO OUT”. Должна получиться примерно такая картинка, не пугайтесь у меня плохой кабель поэтому изображение «двоит», пробовал с другим изображение было лучше, но разрешение не изменить. 720х576 это ограничение конвертера и платы видео захвата, которое при всем желании не преодолеть.
Что ж передавать изображение научились, осталось дело за малым - передать управление.
Инструкция в данной статье написана для windows, линуксоиды же могут воспользоваться этой .
И так приступим, для прошивки потребуется утилита от производителя под названием Flip . Качаем, устанавливаем, запускаем и вот перед нами окно программы:
Сначала кнопки(галки) не активны, это нормально, подключаем ардуину к компьютеру и замыкаем – размыкаем два крайних контакта со стороны USB порта, RESET и GND.
В системе должно появиться новое устройство под названием, как ни странно, ATmega16u2 устанавливаем драйвер(в папке с программой), выбираем в программе flip вкладку «Settings» → «Communication» → «USB» → «open», кнопки должны стать активны. На всякий случай можно сделать бэкап прошивки, чтоб можно было все вернуть на место. В меню «File» нажимаем «Load HEX File», программа требовательна к путям, лучше всего положить файл прошивки в корень диска C:, выбираем нужный hex файл с прошивкой, проверяем стоят ли галки «Erase», «Program», «Verify» и нажимаем «Run». Отключаем - подключаем arduino и вуаля… Теперь мы больше не сможем загружать прошивки в ардуино через встроенный USB, зато получили отличную клавиатуру без кнопок.
Не переживайте по поводу прошивки arduino, прошивку можно будет загрузить из Arduino IDE через отдельный USB To TTL адаптер, хотя надо сказать, теперь это будет менее удобно.
Подключаем USB To TTL адаптер, например такой:
Нам понадобятся Белый, зеленый и черный контакты это RX, TX и GND соответственно, подключаем их к пинам с такими же обозначениями на ардуине, только наоборот RX к TX, а TX к RX. Красный контакт использовать не следует!
Подключаем USB To TTL к компьютеру, устанавливаем драйвера, в диспетчере устройств должен появиться новый COM Port. Открываем arduino IDE и выставляем: Плата - Arduino/Genuino Uno, Порт – наш новоиспеченный последовательный порт.
Подготовка закончена, переходим непосредственно к прошивке. Копируем мою писанину:
Arduino - Sketch
#include
Avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.34s
avrdude: verifying ...
avrdude: 2934 bytes of flash verified
avrdude done. Thank you.
Если после нескольких попыток загрузка прошивки так и не произошла, попробуйте поменять местами контакты RX и TX, а также проверьте надежно ли подключен контакт GND.
Sudo raspi-config
Откроется меню настройки распберри, выбираем «Advanced Options» → «Serial» и выбираем «No».
Возможно эти манипуляции и не понадобятся, так, перестраховка. Этот параметр определяет, будет ли ОС на малине взаимодействовать с serial портом, это взаимодействие нужно в основном для отладки, так что смело отключаем, нам оно будет только мешать, т.к. с ардуиной мы будем общаться именно через этот порт, а система будет засорять эфир.
Устанавливаем программу minicom.
Minicom - простенькая программа для работы с serial портом.
Sudo apt-get install minicom -y
Задаем права на доступ к устройству, /dev/ttyAMA0 - это тот самый сериал порт.
Sudo chown pi /dev/ttyAMA0
sudo chmod 744 /dev/ttyAMA0
Запускаем minicom:
Sudo minicom -s
Откроется меню программы, выбираем пункт «Serial port setup», откроется еще одно меню, выбираем «Serial Device» нажатием на клавишу A, прописываем /dev/ttyAMA0, нажимаем Enter, далее выбираем пункт Bps/Par/Bits под буквой E, появляется очередное меню нажимаем C и Q строчка Current: должна выглядеть вот так «9600 8N1» нажимаем Enter. Убедимся что в строчках F - Hardware Flow Control: и G - Software Flow Control: стоит No, в общем все должно быть как на скриншоте ниже, нажимаем Enter.
Сохраним эти настройки как настройки по умолчанию «Save setup as dfl» и закрываем «Exit from Minicom».
Здесь есть один момент, у ардуино и распберри разные уровни напряжения и по идее их нужно согласовать, советую ознакомиться со статьей .
Хотя у меня все заработало напрямую без согласования, не следует подражать плохому примеру и приобрести преобразователь логических уровней, самый простой выглядит так:
Или хотя бы собрать делитель напряжения на резисторах.
Проверяем все соединения, вкючаем raspberry pi, переходим в консоль малины, запускаем minicom. Сразу оговорюсь я подключался к малине через ssh, в качестве клиента использовал KiTTY(модифицированную версию PuTTY), это важно т.к. с другими терминалами значения передаваемых клавиш могут быть иными и соответственно нужно будет сделать поправку на ветер - поменять номер перехода switch case.
В общем передаю вам в руки как говорится «as is». Что ж на этом пожалуй закончу, самодельный IP KVM готов.
- Тонкая настройка
Можно перехватывать практически любые комбинации и назначать на них практически любые клавиши вплоть до KEYBOARDPOWER и VOLUMEUP, кстати возможные значения можно посмотреть в заголовочном файле HIDKeyboard.h, а можно и добавить свои.
Теги:
Здравствуйте друзья! Для подключения двух компьютеров к одному интерфейсу, я приобрёл на Aliexpress-е за 4$ вот такой, самый простой KVM VGA переключатель.
Выбор пал на VGA, так как мой монитор не имел HDMI входа, а по входу DVI не захотел работать через адаптер.
Предположение, что на печатной плате хватит места на ещё два переключателя для коммутации аудио и USB разъёмов, полностью оправдалось.
Конечно, можно было бы приобрести уже готовый переключатель, но я не нашёл ни одной полностью удовлетворяющей моим запросам модели. Это касалось, как расположения кабелей, так и необходимости использования, либо специальных кабелей, либо USB и аудио кабелей с двумя разъёмами.
Так что, я решил, что будет проще и дешевле переделать именно вот этот девайс под свои запросы.
Правда, пришлось заменить переключатель мониторов, так как мне попался усечённый вариант KVM VGA, где не хватало одной группы контактов. Как потом выяснилось, нужно было выбирать вариант, где в технических данных было прописано разрешение Full HD. Но, и тут трудностей не возникло, так как необходимые дорожки были проложены на плате и осталось просто заменить П2К.
Два дополнительных переключателя распаял в пистонах, запрессованных в печатную плату.
Для дополнительных кнопок пришлось просверлить в лицевой панели два отверстия.
Ещё шесть отверстий просверлил в задней стенке для соединительных кабелей.
USB кабели тоже изготовил самостоятельно.
Для усиления резьбы, соединяющей половинки корпуса, запрессовал две буксы, чтобы с помощью дополнительных угольников можно было надёжно закрепить переключатель.
Вот что у меня получилось в результате.
С помощью этого KVM переключателя, я коммутировал интерфейсы двух ноутбуков, работающих десктопами.
Переключатель закрепил на полке, расположенной над столом. На этой фотографии видно, что кнопки переключения мониторов были заменены. Оригинальные кнопки оказались слишком короткими и их было неудобно нажимать.
Эта статья написана под впечатлением от другой - большое спасибо автору! В этой статье почти удалось сделать собственный IP KVM Switch, и это круто! Но объясню, почему почти. Да, там все работает как и написал автор… До момента перезагрузки в биос - там вся магия рассеивается и сколько не старайся, ничего не происходит.
Решено было исправить это досадное недоразумение и как можно дешевле и компактней. Начнем со стереотипов Raspberry Pi и Arduino, а в следующей статье будет продолжение уже на другом железе.
Итак, что нам понадобится:
1.
Плата видеозахвата обязательно с поддержкой UVC драйвера, вроде этой.Вариантов
полно на алиекспрессе и других китайских магазинах.
UVC это стандартизированный открытый драйвер который по умолчанию входит в большинство линукс дистрибутивов, с другими драйверами могут быть проблемы.
2. VGA to AV Конвертер:
Обратите внимание! Нужен именно VGA to AV, а не наоборот.
3. Arduino UNO, именно UNO, так как на ней есть чип Atmega16u2, он нас интересует в первую очередь. Вот он рядом с USB портом, так же бывают ардуины с чипом Atmega8u2 подойдут и с тем и с тем.
4. Ну и конечно Raspberry Pi, у меня был версии 2 b поэтому все написанное в этой статье актуально именно для него, но в целом думаю не должно возникнуть особых сложностей и с другими моделями малины.
Подключаем плату видеозахвата к распберри, подключать лучше напрямую к USB не используя USB удлинителей особенно того что идет в комплекте с платой, иначе может возникнуть торможение видео, подвисания распберри и т.д.
Переходим в консоль, обновляем пакеты:
Sudo apt-get update && sudo apt-get upgrade –y
Ls /dev/video*
Должно выдать что-то вроде: /dev/video0.
Устанавливаем Motion, трансляцию захваченного изображения будем вести именно через него:
Sudo apt-get install motion -y
Редактируем конфиг автозапуска:
Sudo nano /etc/default/motion
В строке start_motion_daemon ставим ‘yes’. Сохраняем изменения Ctrl + x, y, Enter.
Редактируем конфиг самого motion(а):
Sudo nano /etc/motion/motion.conf
Меняем значения параметров как указано далее:
Параметр определяет запуск приложения в качестве службы:
Daemon on
Эти параметры определяют разрешение передаваемого изображения, смысла ставить большее разрешение нет, т.к. захват видео ограничен стандартами PAL или SECAM, разрешение коих 720х576. Это кстати досадный недостаток, но об этом позднее.
Width 800
height 600
Частота захвата кадров:
Framerate 25
Отключаем сохранение скриншотов:
Output_normal off
Качество передачи изображения:
Webcam_quality 100
Частота передачи кадров:
Webcam_maxrate 25
Отмена ограничения на подключение с других ip
Webcam_localhost off
Сохраняем изменения Ctrl + x, y, Enter.
Перезагружаем распберри:
Sudo reboot
Ждем пару минут если все сделали правильно должен загореться светодиод на плате видео захвата.
Подключаемся браузером к порту 8081 распберри и видим серый или синий прямоугольник с бегущим снизу временем.
Процесс пошел, ищем жертву для захвата сигнала с VGA порта, подключаем к порту “VGA IN” конвертера, а плату видеозахвата к “VIDEO OUT”. Должна получиться примерно такая картинка, не пугайтесь у меня плохой кабель поэтому изображение «двоит», пробовал с другим изображение было лучше, но разрешение не изменить. 720х576 это ограничение конвертера и платы видео захвата, которое при всем желании не преодолеть.
Что ж передавать изображение научились, осталось дело за малым - передать управление.
Инструкция в данной статье написана для windows, линуксоиды же могут воспользоваться этой .
И так приступим, для прошивки потребуется утилита от производителя под названием Flip . Качаем, устанавливаем, запускаем и вот перед нами окно программы:
Сначала кнопки(галки) не активны, это нормально, подключаем ардуину к компьютеру и замыкаем – размыкаем два крайних контакта со стороны USB порта, RESET и GND.
В системе должно появиться новое устройство под названием, как ни странно, ATmega16u2 устанавливаем драйвер(в папке с программой), выбираем в программе flip вкладку «Settings» → «Communication» → «USB» → «open», кнопки должны стать активны. На всякий случай можно сделать бэкап прошивки, чтоб можно было все вернуть на место. В меню «File» нажимаем «Load HEX File», программа требовательна к путям, лучше всего положить файл прошивки в корень диска C:, выбираем нужный hex файл с прошивкой, проверяем стоят ли галки «Erase», «Program», «Verify» и нажимаем «Run». Отключаем - подключаем arduino и вуаля… Теперь мы больше не сможем загружать прошивки в ардуино через встроенный USB, зато получили отличную клавиатуру без кнопок.
Не переживайте по поводу прошивки arduino, прошивку можно будет загрузить из Arduino IDE через отдельный USB To TTL адаптер, хотя надо сказать, теперь это будет менее удобно.
Подключаем USB To TTL адаптер, например такой:
Нам понадобятся Белый, зеленый и черный контакты это RX, TX и GND соответственно, подключаем их к пинам с такими же обозначениями на ардуине, только наоборот RX к TX, а TX к RX. Красный контакт использовать не следует!
Подключаем USB To TTL к компьютеру, устанавливаем драйвера, в диспетчере устройств должен появиться новый COM Port. Открываем arduino IDE и выставляем: Плата - Arduino/Genuino Uno, Порт – наш новоиспеченный последовательный порт.
Подготовка закончена, переходим непосредственно к прошивке. Копируем мою писанину:
Arduino - Sketch
#include
Avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.34s
avrdude: verifying ...
avrdude: 2934 bytes of flash verified
avrdude done. Thank you.
Если после нескольких попыток загрузка прошивки так и не произошла, попробуйте поменять местами контакты RX и TX, а также проверьте надежно ли подключен контакт GND.
Sudo raspi-config
Откроется меню настройки распберри, выбираем «Advanced Options» → «Serial» и выбираем «No».
Возможно эти манипуляции и не понадобятся, так, перестраховка. Этот параметр определяет, будет ли ОС на малине взаимодействовать с serial портом, это взаимодействие нужно в основном для отладки, так что смело отключаем, нам оно будет только мешать, т.к. с ардуиной мы будем общаться именно через этот порт, а система будет засорять эфир.
Устанавливаем программу minicom.
Minicom - простенькая программа для работы с serial портом.
Sudo apt-get install minicom -y
Задаем права на доступ к устройству, /dev/ttyAMA0 - это тот самый сериал порт.
Sudo chown pi /dev/ttyAMA0
sudo chmod 744 /dev/ttyAMA0
Запускаем minicom:
Sudo minicom -s
Откроется меню программы, выбираем пункт «Serial port setup», откроется еще одно меню, выбираем «Serial Device» нажатием на клавишу A, прописываем /dev/ttyAMA0, нажимаем Enter, далее выбираем пункт Bps/Par/Bits под буквой E, появляется очередное меню нажимаем C и Q строчка Current: должна выглядеть вот так «9600 8N1» нажимаем Enter. Убедимся что в строчках F - Hardware Flow Control: и G - Software Flow Control: стоит No, в общем все должно быть как на скриншоте ниже, нажимаем Enter.
Сохраним эти настройки как настройки по умолчанию «Save setup as dfl» и закрываем «Exit from Minicom».
Здесь есть один момент, у ардуино и распберри разные уровни напряжения и по идее их нужно согласовать, советую ознакомиться со статьей .
Хотя у меня все заработало напрямую без согласования, не следует подражать плохому примеру и приобрести преобразователь логических уровней, самый простой выглядит так:
Или хотя бы собрать делитель напряжения на резисторах.
Проверяем все соединения, вкючаем raspberry pi, переходим в консоль малины, запускаем minicom. Сразу оговорюсь я подключался к малине через ssh, в качестве клиента использовал KiTTY(модифицированную версию PuTTY), это важно т.к. с другими терминалами значения передаваемых клавиш могут быть иными и соответственно нужно будет сделать поправку на ветер - поменять номер перехода switch case.
В общем передаю вам в руки как говорится «as is». Что ж на этом пожалуй закончу, самодельный IP KVM готов.
- Тонкая настройка
Можно перехватывать практически любые комбинации и назначать на них практически любые клавиши вплоть до KEYBOARDPOWER и VOLUMEUP, кстати возможные значения можно посмотреть в заголовочном файле HIDKeyboard.h, а можно и добавить свои.
Теги: Добавить метки