Итак, о чём это? Сейчас для удалённого управления компьютером есть великое множество программ на любой цвет, вкус и запах. Но что, если мы хотим пойти немного дальше, и наши требования к удалённому управлению становятся немного жёстче:

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

Но как это сделать? Вот этим мы тут и будем заниматься...

▍ Как я к этому пришёл


Иногда мне приносят разное железо с просьбами переустановить винду/почистить вирусы и т. д. А я что? Я ж программист простой: мне приносят и просят сделать — я делаю. Но порой не очень удобно подключать к этому всему отдельную мышь/клавиатуру и монитор, а бывает, что там идёт долгий процесс, не требующий особого вмешательства, но периодически надо сделать пару кликов, что я мог бы сделать удалённо с работы, будь у меня такая возможность, и сэкономить кучу времени вечером. Я знаю, что такое удалённое управление бывает на серверных материнских платах, но в последний раз мне приносили сервер, чтобы я переустановил на нём Windows никогда, или даже ещё раньше.

В какой-то момент у меня возникла в голове идея: есть же недорогие устройства видеозахвата USB-HDMI, а ещё есть ESP32 S2/S3, которые умеют эмулировать USB. А что нам ещё надо? Изображение с компьютера мы можем получить, клавиатуру/мышь можем проэмулировать. Может быть, такие проекты даже уже есть, но когда мне в голову приходит идея, которая кажется мне интересной, я:


Ну что ж, проекту быть, и для него нам потребуется следующий минимум:


  • HDMI-плата захвата видео
  • Плата ESP32 S3 — у неё сразу есть 2 TypeC разъёма, что упростит нам жизнь
  • HDMI-кабель
  • 2 кабеля USB TypeA — TypeC
  • Компьютер с Windows, стоящий рядом

С железом условно всё, и если нам не нужно управлять аппаратной перезагрузкой/включением компьютера, то нам даже не придётся ничего паять. А если нужно, то всему своё время…

Итак, возможно, когда я написал пункт «Компьютер с Windows, стоящий рядом», я кого-то очень сильно огорчил. И я согласен, что решение не самое оптимальное, если бы всё работало под Linux, да ещё выводить всё в Web, то можно было бы взять Малинку/Апельсинку и… Но нет. Хотя, может и да, ведь проект открытый, и если у кого-нибудь будет время, желание и умение, то он может переделать под Линукс мой проект, сделанный на .Net, но пока я всё основное время работаю под осью одной из корпораций зла, проект только под Винду.

▍ Приступаем к работе


Ладно, начинаем. Схема подключения простая:



Теперь, когда у нас всё подключено, что дальше? Дальше пишем ПО.



ПО написано, что делаем дальше? Для начала надо залить прошивку на нашу ESP32 S3. Убеждаемся, что драйверы ком-порта у нас установлены (откуда их брать, обычно указывает продавец этой самой платы). Для заливки прошивки я использовал Arduino IDE, тем более что скетч написан именно в нём. В этой статье я не буду подробно описывать процесс настройки Arduino IDE на работу с платами EST32 и прошивки — его можно найти, например, везде, и он довольно прост. Дальше перейдём непосредственно к ПО для удалённого управления, а тут всё ещё проще:



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

▍ Немного о коде


Прежде чем продолжить проект, добавив к нему ещё пару крутых фич, я предпочту немного замедлиться и погрузиться в код, который был написан. И если со стороны всё выглядит как вжух и готово, то на деле было не совсем так. Начиная этот проект, я стал искать библиотеки для .Net для работы с устройствами видеозахвата. И первое, что мне попалось, было OpenCvSharp. Я проверил, что эта библиотека работает с веб-камерами и другими подобными устройствами и выдаёт изображение на WinForms. Отказался я от неё потому, что не нашёл у неё возможности нормально перечислить список всех камер с их именами для выбора в меню, а городить это отдельно не очень хотелось, и пока я ещё не сильно привык к этой библиотеке, я стал смотреть другие.

Следующей была AForge. В ней список камер перечислялся нормально, с именами и фамилиями, и, казалось бы, всё было хорошо, но нет. Когда я тестировал программу на реальном устройстве видеозахвата, всё было хорошо, но когда отлаживался на виртуальной веб-камере от OBS Studio, картинку я не получал. При этом ошибку тоже. Я не получал ничего, я был просто проигнорирован и видел, как происходит ничего. Мне не понравилось. Я бы подумал, что что-то не так с самой камерой у OBS, но в OpenCvSharp всё прекрасно работало. И я стал копать… И вот щетина на моём лице уже выросла, вся водка была выпита, медведь доиграл свою арию на балалайке, но ничего по-прежнему не работало. Но вскоре проблема вскрылась. AForge принудительно запрашивает у камеры формат RGB24, и если устройство его поддерживает, то всё ОК. А если нет, тады ой. Камера от OBS поддерживала формат NV12, но AForge не умела его декодировать, как и многие другие форматы. Можно было оставить эту библиотеку и пойти к следующей, но это уже было делом принципа, я потратил на поиск этой особенности слишком много времени, и раз уж исходный код AForge открыт, я решил его поправить. В очередной раз я убедился, насколько ChatGPT (и ему подобные) делают нашу программистскую жизнь легче.

Магия XXI века
Запрос:
write me c# function that converts YUY2 format pixels (IntPtr buffer, int bufferLen) to Bitmap

Ответ:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

public class YUY2Converter
{
    // Function to convert YUY2 buffer to a Bitmap
    public static Bitmap ConvertYUY2ToBitmap(IntPtr buffer, int bufferLen, int width, int height)
    {
        // Validate buffer length
        if (bufferLen != width * height * 2)
            throw new ArgumentException("Invalid buffer length for given width and height");

        // Create a new Bitmap
        Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format24bppRgb);

        // Define YUV constants for conversion
        float yFactor = 1.164F;
        float uFactor = 2.018F;
        float vFactorR = 1.596F;
        float uFactorG = -0.391F;
        float vFactorG = -0.813F;

        // Lock bitmap data for direct access
        BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, width, height),
                                             ImageLockMode.WriteOnly,
                                             bitmap.PixelFormat);

        unsafe
        {
            byte* pYUY2 = (byte*)buffer;
            byte* pBmp = (byte*)bmpData.Scan0;

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x += 2)
                {
                    int y0 = pYUY2[0];
                    int u = pYUY2[1] - 128;
                    int y1 = pYUY2[2];
                    int v = pYUY2[3] - 128;

                    // Convert YUV to RGB for first pixel (x)
                    byte r = ClampToByte(yFactor * y0 + vFactorR * v);
                    byte g = ClampToByte(yFactor * y0 + uFactorG * u + vFactorG * v);
                    byte b = ClampToByte(yFactor * y0 + uFactor * u);

                    // Set first pixel (x) in bitmap
                    int idx1 = ((y * width) + x) * 3;
                    pBmp[idx1 + 2] = r;
                    pBmp[idx1 + 1] = g;
                    pBmp[idx1] = b;

                    // Convert YUV to RGB for second pixel (x + 1)
                    r = ClampToByte(yFactor * y1 + vFactorR * v);
                    g = ClampToByte(yFactor * y1 + uFactorG * u + vFactorG * v);
                    b = ClampToByte(yFactor * y1 + uFactor * u);

                    // Set second pixel (x + 1) in bitmap
                    int idx2 = ((y * width) + x + 1) * 3;
                    pBmp[idx2 + 2] = r;
                    pBmp[idx2 + 1] = g;
                    pBmp[idx2] = b;

                    // Move to the next set of YUYV values (4 bytes)
                    pYUY2 += 4;
                }
            }
        }

        // Unlock the bitmap data
        bitmap.UnlockBits(bmpData);

        return bitmap;
    }

    // Helper function to clamp values to byte range
    private static byte ClampToByte(float value)
    {
        return (byte)Math.Max(0, Math.Min(255, (int)value));
    }
}


Вот так легко и просто ChatGPT сгенерировал мне функцию перекодировки YUY2 в RGB, также я сделал для NV12, YUYV и I420. Если бы я писал это сам, я бы потратил на это, может быть, весь день, пока разбирался в этих форматах пикселей и отлаживал баги. А тут код написан за минуту и после визуальной проверки на отсутствие явной лажи уже работал в проекте, сразу же после компиляции. Ладно, если нужна бочка дёгтя на вашу ложку мёда, я вам её таки дам: так хорошо бывает не всегда, иногда он генерит нерабочий код, иногда рабочий, но неэффективный. Но можно попросить его ещё раз? и часто у него получается лучше.

▍ Немного про экран


При удалённом управлении часто бывает, что размеры удалённого экрана превышают размеры окна, в котором мы работаем. И самый простой вариант — это обычное пропорциональное растягивание/сжатие картинки под размер рабочей области окна.



Но, бывают ситуации, когда хочется видеть всё в масштабе 1 к 1, а удалённый экран больше нашего. И я отметил для себя 4 разных варианта, один из которых и реализовал:

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



2. Стиль RAdmin — когда мы подводим мышку к краю окна и ведём её дальше, экран начинает скроллиться, а движение мышки блокируется. Уже лучше, но мне не нравится, что в этом случае при проскролливании нужно блокировать движении мыши.

3. Стиль Aspia — когда мы подводим мышку к краю окна, окно начинает само скроллиться, перемещение мышки при этом не блокируется.



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


▍ Эмуляция устройства ввода


С ESP32 S3 программа взаимодействует через ком порт. Она просто отправляет ей команды (KeyDown, KeyUp, MouseDown, MouseUp, MouseMove). Для мышки была выбрана эмуляция устройства с абсолютным позиционированием курсора, там передаются координаты x и y в пределах от 0 до 32768. Таким образом мне не нужно думать, какое разрешение на удалённом компьютере, всё будет работать само. С клавиатурой оказалось немного сложнее — получаемые коды клавиш нельзя было просто передать один в один в класс USBHIDKeyboard, точнее можно, но со своими приколами, которые местами все портили. Но можно было передавать сырые USBHID-коды, в которые нажатые клавиши надо было сконвертировать. Этот путь я и выбрал. Дальше эти нажатия/отжатия уже отправляются на устройство и эмулируются на конечной системе. Я не стал заморачиваться с перехватом особых спец-клавиш типа CapsLock, но на сегодняшний день у меня нет сценариев, где это могло бы потребоваться.

Переходим к проверке:

Заходим в биос, загружаемся в ОС, проверяем, как работает мышь и клавиатура

▍ А теперь сделаем это ещё лучше!


В процессе создания всего этого безобразия я решил, что его можно сделать ещё безобразней! А именно: мне внезапно может потребоваться перезагрузить компьютер, если он завис наглухо. Или выключить, а то чего он тут работает? А потом включить потому, а то чего это он не работает? Для этого надо замкнуть соответствующие пины на материнской плате. Это разъём Fpanel и нам нужны вот эти ребята:


У меня дома валялось пара реле с управлением от 3 вольт, и я подключил его управление к пинам ESP32 S3, а замыкание к пинам материнской платы и… естественно, ничего не заработало, потому что нельзя подключать реле к пинам ESP32 напрямую, они не дают такой ток, чтобы сработала катушка реле, но:

Дяденька, я, на самом деле, не настоящий электронщик, я этот паяльник нашёл!

Ладно, у меня валялись ещё IFR3205. Не надо на меня так смотреть, я понимаю, что использовать их для включения реле — это дикая дичь, они были рождены летать, а не ползать. Но ничего не выйдет, потому что, я сказал «ползать» и они поползли! Я не буду выкладывать схему подключения этого безобразия, потому что мне стыдно. Проще взять готовые к подключению напрямую реле типа этих и не париться:


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

Итак, теперь у меня заработали кнопки перезагрузки и включения удалённого компьютера. Также я добавил возможность ввода текста из буфера обмена эмуляцией нажатия этих клавиш (как в HyperV). Программа даже умеет переключать раскладку, если видит русские буквы в тексте. Главное, чтобы изначально раскладка на удалённой системе всегда была выбрана английской, а то будет всё наоборот. И вроде бы всё было закончено. Но тут мне пришла в голову ещё одна безумная идея…

▍ А как насчёт реальной камеры?


Да, ведь мне могут принести ноутбук или моноблок, у которого может и не быть второго видеовыхода, а если и быть, то не факт, что он будет выводить туда стартовую загрузку. Поэтому я могу просто поставить камеру перед экраном и брать изображение с него. Но! Я же никогда не смогу поставить камеру настолько идеально ровно, чтобы экран был чётко в кадре, не вылезая из него и не оставляя лишнего по краям. А если экран не будет точно заполнять кадр, то собьются и координаты мыши. Поэтому мы будем натягивать сову на гло изображение с камеры на наш виртуальный экран. Здесь мне было откровенно лень. Я попросил ChatGPT сгенерить мне функции для Perspective Image Distortion. После N попыток он привёл меня к библиотеке Emgu.CV, которая делала это достаточно быстро, и я накидал редактор для этого растягивания.



Теперь мы можем натянуть картинку с камеры на наш экран, и мышка ездит от угла к углу достаточно точно. Качество изображения, конечно, прекрасно настолько, что от работы с такой картинкой возникает непременное желание куда-нибудь выйти, например, в какое-нибудь ближайшее окно. Но тут уже всё зависит от качества камеры. Главное, возможность есть.

Готовы поработать так на удалёнке весь день?)

▍ Бонус


Не люблю я, когда устройство не похоже на устройство. У меня давно сложилась простая схема для создания корпусов:


А ещё у меня есть 3D-принтер! Поэтому проектируем такую коробочку:



Я делал под свои реле, но это OpenSCAD и там легко можно задать размеры и количество для своих.

Я всегда делаю корпуса под болтики для компьютерных вентиляторов, они хорошо вкручиваются и крепко держатся в пластике и не нужно вплавлять гайки

Воплощаем это в пластике

Теперь собираем всё вместе

Термоклеем делаем блямбы на проводах, чтобы не оторвать пайку, если дёрнуть за них

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

Кажется, это устройство

▍ Дайте мне это немедленно!


Как обычно, всё, что я сюда выкладываю — MIT, поэтому делайте с этим, что хотите, кроме модифицированной AForge, там GPL/LGPL, но я все исходники выложил и чист перед ними)

Страница проекта: тут.
Но на всякий случай предупреждаю, что я особо не сижу на GitHub, редко туда захожу, не часто там отвечаю, просто выложил и забыл. А сюда пишите, отвечу)

© 2024 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (62)


  1. Javian
    01.11.2024 10:10

    С MeshCommander и Intel AMT жизнь намного проще https://habr.com/ru/companies/intel/articles/546650/

    Но велосипед - это святое.


    1. CodeName33 Автор
      01.11.2024 10:10

      Это надо чтобы удаленный компьютер поддерживал vPro и был подключен к сети, что порой нежелательно) А мое решение может управлять разными устройствами, и даже не только лишь ПК.


      1. Javian
        01.11.2024 10:10

        Когда устройств больше одного, начинает давить кошелёк.


        1. CodeName33 Автор
          01.11.2024 10:10

          Не обязательно делать это одновременно. Мне, например, принесли "какой-то компьютер", там может вирусов полно, я в сеть его не хочу пускать) Надо поработать на нем, может быть с LiveCD загрузится, почистить или переустановить ОС. В другой раз может понадобится настроить ТВ приставку, или что-то подобное. Я подключаю устройство физически уже к своему компьютеру и дальше безопасно могу работать с ним удаленно. Немного другая задача, нежели управление своим компьютером, всегда находящимся в сети.


          1. DustCn
            01.11.2024 10:10

            может быть с LiveCD загрузится

            А флешки как втыкать в него удалённо? Непорядок - надо еще роборука и роботизированный магазин для флешек на все случаи жизни!


            1. CodeName33 Автор
              01.11.2024 10:10

              Я делаю ReadOnly загрузочный диск (старая карта памяти, на неё записывается Live/установочный образ или все в одном, на карте памяти переключается Write Lock и вставляется в кард-ридер).


              1. action5
                01.11.2024 10:10

                На всякий случай. (если вдруг не в курсе, а то я недавно узнал и "был ошарашен" =)) На самом деле этот WriteLOck ПРОГРАМНЫЙ. (говорим именно про защиту SD подобных карт.) Во всяком случае Linux.

                Про винду не скажу. Хотя и уних вроде тоже есть програмный Бит снятия\установки ReadOnly - не эксперемиентировал.


            1. khajiit
              01.11.2024 10:10

              Network boot )


    1. babilus
      01.11.2024 10:10

      А еслиу тебя AMD - что делать?


      1. Javian
        01.11.2024 10:10

        "Это не наш клиент". А так можно сделать на Интеле, где его нет https://habr.com/ru/articles/729674/

        Использование скрытого потенциала: как я активировал Intel AMT на мини-ПК от HP и получил удаленный доступ


        1. ABy
          01.11.2024 10:10

          Я, кстати, Intel Compute Stick на m5 прикупил. Я думаю что это самый маленький ПК c Intel vPro. Правда он ко мне еще не скоро доедет.


  1. Saz_An
    01.11.2024 10:10

    Для тех, кто самостоятельно хочет KVM сделать советую глянуть на PiKVM - можно и самому собрать на Raspberry Pi, можно готовый модуль заказать (это эдакий стандарт KVM любительского уровня). А так есть еще Sipeed NanoKVM (на RISC-V) из готовых и дешевых.


    1. blind_oracle
      01.11.2024 10:10

      Плюсую NanoKVM Lite - по цене, думаю, сравнимо с устройством автора и при этом раз в 5 меньше


      1. Saz_An
        01.11.2024 10:10

        Не стал писать в коммент, так как ещё не продается, но на кикстартере ещё есть JetKVM, стильненькая штучка


      1. CodeName33 Автор
        01.11.2024 10:10

        Не сказал бы я, что по цене сопоставимо) Другое дело, что NanoKVM Lite - это готовое сетевое устройство, в то время, как мое требует компьютера для управления и еще и с виндой на борту. Поэтому на конечную цену влияет следующий фактор: есть ли у вас рядом с целевым устройством постоянно включенный компьютер или нет)


    1. Daddy_Cool
      01.11.2024 10:10

      Очень интересно!
      Sipeed NanoKVM стоит порядка 9 тыс. руб., а PiKVM 300-400$.


      1. Barnaby
        01.11.2024 10:10

        Pikvm v3 на али 9к, если малинка уже есть.


      1. LordKorvin
        01.11.2024 10:10

        Pikvm на малинке pi zero 2w обошелся мне в 9,5 тыс. Впрочем, на али наноквм стоит вообще 3,5к, жаль, что раньше про нее не узнал)


        1. M_AJ
          01.11.2024 10:10

          на али наноквм стоит вообще 3,5к

          Странно, я дешевле, чем 7300 + доставка 1500 не нашел.


      1. igrblkv
        01.11.2024 10:10

        Почему-бы не купить на Авито IP-KVM на 8-16 портов с парой адаптеров в комплекте?
        Думаю, тысяч в 10 уложится, если не меньше...


        1. Saz_An
          01.11.2024 10:10

          Б/У это отдельная категория


      1. Vrag
        01.11.2024 10:10

        Откуда такие цифры? =) Меньше 30$ за голые платы или чуть за 50 за версию в корпусе с экраном и управлялкой питания.


        1. Daddy_Cool
          01.11.2024 10:10

          О! За 5000 взял бы сразу! Ссылкой угостите? Лучше без экрана и без питания, чтоб штучка перед глазами не маячила.


          1. Saz_An
            01.11.2024 10:10

            Они так стоят официально, но в РФ не доставляют, а так дороже будет. Может там что-то поменяться успело, конечно. Поищите предложения актуальные.


          1. GuessWho
            01.11.2024 10:10

            У них на сайте заказал в сентябре еще 5 штук за $225 и доставка $20 в Казахстан, пока молчок по доставке, у них там очередь за ними


            1. Vrag
              01.11.2024 10:10

              Вы с офсайта заказывали или из магазина на ali? Просто буквально позавчера с друзьями из РК разговаривали про KVM и сватал им эту железку. А сегодня выяснил, что али считает, что РК входит то ли в состав РФ то ли в США. Короче говоря, в Казахстан тоже не отправляют.


          1. Vrag
            01.11.2024 10:10

            Так пока блоггерам и предзаказ. =))) Я хотел вам сказать, что в их офф. магазине на али - но не увидел, что они не доставляют в рф и, почему-то, сша (хотя тут может быть вопрос в санциях в ту или иную сторону). Хотя амерканские блоггеры их как раз сейчас во всю и PRят.


            1. Saz_An
              01.11.2024 10:10

              Для блогеров уже JetKVM горячая штучка


              1. Vrag
                01.11.2024 10:10

                Больше ipKVM'ов хороших и разных! Но тут на старте хотят с бэкеров $69. Когда и если стрельнёт, то он, очевидно, будет дороже. Мне например такая штука понадобится скорее всего раз в год. Т.е. для меня отсутствие корпуса маловажно, но важна цена и тут 25$ бьют 70$. При условно необходимом и достаточном функционале.


      1. TerAnYu
        01.11.2024 10:10

        Единственный продавец - это магази Sipeed Store, все остальные - барги и перекупы.
        Поделюсь секретом, который мне сообщил чувак в их канале в телеге - напишите продавцу в личку, распишите свою ситуацию и желание покупки, он вам напишет предложение, что можно купить взамен (мне написал, что можно минимум 3 штуки купить и предложил вариант покупки какого-то dev кита, у которого суммарная стоимость равна трём nanoKVM).


    1. mbait
      01.11.2024 10:10

      А если чуть вбросить денег, то можно взять BliKVM, которое ещё и эстетично устанавливается в слот PCI-E. Питается, правда, или по USB, или по PoE.


      1. Saz_An
        01.11.2024 10:10

        Там PiKVM насколько помню


        1. mbait
          01.11.2024 10:10

          Ну да, поэтому и написал в эту ветку. Просто вместо обычной малинки используется CM4 и специальная плата под слот PCI-E, в которой уже из коробки есть захват HDMI (в PiKVM DIY нужно докупать модуль) и вывод состояния на микродисплей.


  1. remzalp
    01.11.2024 10:10

    Любопытно, а для захвата изображения, через тот же свисток - мощей esp32 хватит? а то тогда можно вообще самодостаточный гаджет с подключением по вифи реализовать


    1. CodeName33 Автор
      01.11.2024 10:10

      В свое время играл с ESP32S2 (https://habr.com/ru/articles/685768/) и там была проблема в том, что USB - достаточно медленный, WiFi - достаточно меделенный. Не уверен, что она сможет нормально передавать изображение 1080P.


      1. ykira
        01.11.2024 10:10

        https://github.com/nopnop2002/esp-idf-video-streaming

        Возможно 640*480 15fps получится превратить в HD 5fps


    1. Stanislavvv
      01.11.2024 10:10

      Даже если хватит для захвата, не хватит полосы для полноценной передачи захваченного видео. А сжатие в mjpeg или что-то более пригодное для вайфая уже не получится. Лучше таки RPi или что-то аналогичное.

      Заодно и можно не изобретать велосипед для видео и транслировать через vlc, слегка перекодируя на лету.


  1. V-core
    01.11.2024 10:10

    Простите, KVM-over-IP, я думал, придумали давно.


    1. mbait
      01.11.2024 10:10

      И существуют бюджетные устройства? Или вы по приколу написали комментарий, лишь бы вбросить?


      1. Saz_An
        01.11.2024 10:10

        PiKVM, NanoKVM, будет ещё JetKVM.

        В другом комменте тут писал с ссылками


    1. CodeName33 Автор
      01.11.2024 10:10

      Тут бюджет 450р ESP32S3 + 400р плата HDMI захвата + провода. Т.е. 1000р +/- за все. Эх, если бы IP-KVM столько стоили...


      1. strelkan
        01.11.2024 10:10

        ну тут вроде не по ip передача


        1. CodeName33 Автор
          01.11.2024 10:10

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


  1. Lordzero
    01.11.2024 10:10

    Идея интересная, но как кейс в реальной жизни очень специфическая, думаю что очень мало вариантов реального применения IRL. Разве что удаленная настройка/переустановка рабочих станций из центра default city где нибудь в дальнем зажопье типа Норильска и т.п.

    Да и то, это далеко не единственная возможная реализация


    1. Saz_An
      01.11.2024 10:10

      Для домашнего сервера удобно, на серваках же промышленных есть KVM, типа iDRAC или iLO. Какие то компы удаленно настраивать да, тоже топ


  1. perfect_drugg
    01.11.2024 10:10

    Кмк, софт для смартфона с эмулятором Клавы решил бы проблему проще.


  1. jonic
    01.11.2024 10:10

    А мне нравится


  1. nixtonixto
    01.11.2024 10:10

    Термоклеем делаем блямбы на проводах, чтобы не оторвать пайку, если дёрнуть за них

    Проще завязывать на проводах узлы.


    1. Harwest
      01.11.2024 10:10

      Стяжку тонкую затягиваю и обрезаю у замка


  1. serafims
    01.11.2024 10:10

    Я бы в место камеры просто простую камеру с HDMI выходом цеплял бы, или даже через коммутатор HDMI.

    Тогда esp32 заменяется на какую-нибудь ерунду типа Arduino Leonardo, но есть тонкости, эмуляция клавиатуры там поддерживается в биосе как-то особенно.

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


    1. CodeName33 Автор
      01.11.2024 10:10

      Я не помню, умеет ли Leonardo одновременно COM-Порт, для одного компьютера и USB Host для другого или у него все распаяно на один USB, к тому же ESP32S3 стоит 450р и я не скажу, что Leonardo стоит существенно дешевле) А тут даже пать ничего не нужно, если не требуется POWER/RESET. Камеру я и так использовал простую Web-камеру USBшную, ESP32 тут не участвовала.

      Прокидывание флешек - я думал об этом, было бы конечно интересно, но, увы, скорость USB на ESP32 оставляет желать лучшего.


    1. AADogov
      01.11.2024 10:10

      Раньше была идея, написать приложение на Android. Камера телефона наводится на монитор а сам телефон подключается по usb и эмулирует клавиатуру. Но потом выяснил что это сделать невозможно.


      1. CodeName33 Автор
        01.11.2024 10:10

        Кстати, это даже возможно, правда не так, что просто поставил приложение и все работает. Либо прошивку надо патчить: https://github.com/pelya/android-keyboard-gadget
        Или на новых ядрах такая штука есть: https://github.com/tejado/android-usb-gadget


  1. Ender2012
    01.11.2024 10:10

    По возможности рассмотрите замену реле на оптопары. Условная PC827 (пойдет практически любая самая дешевая с двумя оптопарами в одном корпусе) + 1 резистор позволит вам выкинуть все реле и их обвязку и будет и дешевле, и надежнее, и компактнее, и без проблем с током забираемым от контроллера, и не так похоже на поделку юного ардуинщика. Единственный минус - нельзя больше будет втыкать в Fpanel провода "как бог пошлет", а надо будет понимать где там плюс, а где земля.


  1. VecH
    01.11.2024 10:10

    Ожидал от статьи результата очень простого (отправил коробку заказчику) он воткнул со своей стороны все необходимые порты, "и ляпота"

    а тут очередной HID


  1. firehacker
    01.11.2024 10:10

    Оффтопик

    Знакомый ник с форума VBStreets. И аватара всё та же, что и 20 лет над :-)


    1. CodeName33 Автор
      01.11.2024 10:10

      Да, было время)