Навигация
    02.11.2024 Протестировал отправку через CoolTerm управляющей команды в Usb2kbd_COM на Mac OS. Все работает.
    28.08.2024 Прекращена поддержка устаревшего продукта Usb2kbd_DLL. Для всех владельцев Usb2kbd_DLL при необходимости рекомендую переходить на более совершенный и гибкий продукт Usb2kbd_LAN/COM.
    12.08.2024 Успешно протестирована с девайсом программа для перенаправления UDP траффика с порта на заданный IP и порт. Возможность пригодится для удаленного управления девайсом Usb2kbd_LAN/COM по сети.
Usb2kbd_LAN/COM
Уважаемые друзья!
Представляю Вашему вниманию замечательную IT разработку - Usb2kbd_LAN/COM.
В основе этого девайса лежит знаменитая платформа Arduino Leonardo, а для управления девайсом через LAN предусмотрен сетевой модуль Arduino Ethernet shield W5500, работающий по UDP-протоколу (модуль может отсоединяться).
Принцип работы Usb2kbd_LAN/COM заключается в том, что девайс умеет принимать управляющие команды (пакеты) из LAN-сети (UDP) или же через собственный COM-порт, причём неважно, откуда пришел пакет, главное, чтобы он прошел проверку на подлинность девайсом. Далее, получив такой пакет, Usb2kbd_LAN/COM через USB-протокол нажимает клавишу клавиатуры или управляет мышью согласно пакету. Для успешного управления девайсом достаточно знать, как из Вашей программы, написанной на любом известном Вам языке программирования, составить и отправить простой управляющий пакет девайсу по сети (протокол UDP, локальная сеть или интернет) или через COM-порт (примеры отсылки управляющих пакетов приведены ниже в разделе примеров).
Важно помнить, что управляющий пакет для COM-порта девайса Usb2kbd_LAN/COM по структуре полностью аналогичен управляющему пакету пакету UDP, только в конце пакета обязательно должен быть добавлен специальный символ конца строки ($0A, он же LF).
Итак, для чего нужен девайс Usb2kbd_LAN/COM, какая основная функция, возможности, и какое применение на практике?
- Самая важная и основная функция Usb2kbd_LAN/COM состоит в том, что, благодаря девайсу, можно управлять любым дистанционным компьютером или даже планшетом (на базе Android с поддержкой OTG) в локальной сети (включая самим собой) или через интернет.
Напоминаю, что в девайсе, кроме управления по LAN (UDP), реализована возможность управлять девайсом через COM-порт. Эта функция подойдет для случая, если у Вас нет задачи управлять дистанционным компьютером и Вы захотите управлять девайсом локально через собственный COM-порт устройства. Для активации режима COM-порта в девайсе достаточно перед включением девайса в USB замкнуть перемычкой выводы 12 и GND девайса, затем включить девайс в USB и убедиться, что у Вас в диспетчере устройств Windows появился новый COM-порт девайса (см. фото ниже).
Важно! Такая возможность управления девайсом через COM-порт доступна как для пользователей Win10 и Win11 (установка дополнительных драйверов не требуется), так и для пользователей Win7 (скачать драйвер .inf с инструкцией можно здесь. После подготовки Вами и правки прилагаемого файла .inf согласно инструкции нажмите "Обновить драйвер" неизвестного устройства в диспетчере устройств Windows и выберите отрадактированный Вами .inf файл).
Также важно знать, что по умолчанию девайс имеет относительную систему координат мыши. Для перевода устройства в абсолютную систему координат достаточно будет отключить его, затем замкнуть перемычкой ПИН11 и GRD, как показано на фото, затем включить девайс.
При этом, можно одновременно замыкать как PIN11 на GRD, так и PIN12 на GRD, чтоб в девайсе была как одновременно абсолютная система координат, так и возможность управления через COM-порт!
При подключении в USB-порт компьютера, Usb2kbd_LAN/COM автоматически определится системой как стандартная USB-HID клавиатура и мышь (комбо-девайс, 2-в-одном), никаких дополнительных драйверов для клавиатуры и мыши устанавливать не нужно!
Плюсы Usb2kbd_LAN/COM:
- Доступно управление девайсом как через LAN-интерфейс, так и через внутренний COM-порт;
- Через Usb2kbd_LAN/COM можно без труда управлять мышкой и клавиатурой в системах DOS, BIOS, Linux (т.е. вне системы Windows);
- Управление Usb2kbd_LAN/COM через UDP работает быстро, т.к. не требует подтверждения доставки пакета.
- Управление Usb2kbd_LAN/COM через COM-порт работает в 8 раз быстрее, чем Usb2kbd_LAN/COM через UDP-протокол. Это 2 мс на одну команду против 15,6 мс!
- Usb2kbd_LAN/COM выполнен на всемирно известной платформе Arduino, что обеспечивает стабильность работы и помехоустойчивость.
- Мышь в Usb2kbd_LAN/COM может иметь относительную или абсолютную систему координат по Вашему выбору.
- Usb2kbd_LAN/COM в относительной системе координат может смещать курсор мыши за 1 команду на + - 32767 пикселей, в абсолютной - в пределах текущего разрешения экрана.
Минусы Usb2kbd_LAN/COM:
- ТОЛЬКО ДЛЯ ОТНОСИТЕЛЬНОЙ СИСТЕМЫ КООРДИНАТ! Для корректной работы мыши Usb2kbd_LAN/COM в относительной системе координат необходимо будет ОБЯЗАТЕЛЬНО отключать "ускорение мыши" в Windows на управляемом и управляющем компьютерах. Что такое "отключение ускорения Widnows" и зачем его отключать? Дело в том, что по умолчанию такое ускорение включено в Windows и если, например, Вы отправите девайсу Usb2kbd_LAN/COM через управляющий пакет команду "сместить курсор на 100 пикселей по оси X", то девайс, конечно, выполнит команду и отправит в Windows точное смещение на те же 100 пикселей по оси X. Но вот Windows, получив такое смещение, самостоятельно "ускорит" мышь - и курсор мыши сместиться не на 100 пикселей, а на большую величину (например, 159 пикселей). Так вот чтоб такого не произошло, Вам необходимо будет самостоятельно отключить ускорение мыши в настройках мыши Windows (смотрите рисунок ниже) на обоих компьютерах (управляющем и управляемом посредством Usb2kbd_LAN/COM). Для этого войдите в раздел панели управления "Мышь" и выставите настройки как на картинке ниже (В примере - для Windows 7, для Windows 10 - внешний вид настройки чуть другой, но принцип тот же).
Ниже рассмотрим более детально основную функцию Usb2kbd_LAN/COM - функцию управления по сети.
Как управлять дистанционным компьютером/планшетом в локальной сети:
б) Подключите USB-разъем девайса Usb2kbd_LAN/COM через ДАТА-кабель MicroUSB (минимальной длины) в управляемый компьютер или планшет (через OTG-кабель), которым хотите дистанционно управлять.
в) Убедитесь, что девайс Usb2kbd_LAN/COM корректно виден в локальной сети, т.е. пропингуйте его с компьютера, с которого Вы хотите управлять (управляющий компьютер) - по умолчанию IP-адрес девайса - (клавиатура+мышь) - 192.168.0.222, порт - 12345. (IP-адрес и порт девайса могут быть заданы любыми при покупке).
Важно помнить, что Usb2kbd_LAN/COM умеет при включении считывать и задавать себе IP-адрес с конфигурационного txt-файла с флеш памяти MicroSD. Для этого найдите флеш-карту MicroSD желательно размером 4 Гб или меньше, отформатируйте ее в файловой системе FAT32 (это важно!), затем подготовьте и поместите на карту строго 1 файл ip.txt (скачать образец в RAR-архиве можно здесь), в котором пропишите желаемый IP-адрес. Вставьте MicroSD карту в Usb2kbd_LAN/COM, после чего включите его в USB-разъем комьютера. При загрузке Usb2kbd_LAN/COM считает файл IP.txt с флеш-карты MicroSD и автоматически присвоит себе заданные Вами в файле IP-адрес.
г) Попробуйте в своей программе (скрипте) на управляющем компьютере составить и отправить первый управляющий UDP-пакет девайсу (мыши+клавиатуре) в локальной сети. Можно также использовать штатную программу дистанционного управления и отсылки пакетов в Usb2kbd_LAN/COM (программа высылается при покупке девайса). Программа не только проверит работоспособность девайса, но и поможет Вам научиться правильно составлять управляющие пакеты для отправки в девайс (описание программы читайте в конце этого раздела).
ОЧЕНЬ ВАЖНО! ВНИМАНИЕ! При ручном управлении мышью с использованием штатного ПО очень важно использовать НЕ ИГРОВУЮ самую обычную мышь! Т.к. игровые мыши посылают намного больше событий в девайс, чем обычные мышки, тем самым могут вызвать зависание устройства!
Структура же самого отправляемого управляющего пакета также будет рассмотрена ниже.
д) Если Вы все сделали правильно, то LAN-модуль девайса получит Ваш управляющий пакет и исполнит его (нажмет клавишу клавиатуры или переместит мышь) на управляемом компьютере/планшете.
Так как UDP пакет не подразумевает контроль доставляемости, в девайсе реализована возможность контроля доставляемости UDP пакета. Так, получив управляющий UDP-пакет, девайс ответит на IP-адрес отправителя и порт 22222 информационным UDP пакетом, который будет содержать полученный им управляющий пакет. Так можно будет контролировать 100% доставляемость UDP управляющих пакетов в девайс.
NEW! Также в Usb2kbd_LAN реализована возможность выполнения заранее набранных команд с MicroSD карты, вставленной в девайс. Достаточно скопировать файл commands.txt из этого архива (образец, проставьте свои команды и паузы!) в корень MicroSD карты (Fat32) и при включении девайс через небольшую паузу начнет их выполнять в цикле.
Для управления удаленным компьютером/планшетом через сеть интернет - Вам также нужно будет сделать настройку маршрутизатора удаленной сети - осуществить "проброс порта" 12345 из вне на девайс в сети - IP-адрес девайса Usb2kbd_LAN/COM по умолчанию, как мы уже говорили, 192.168.0.222, порт 12345.
Ниже - пример проброса портов для роутера TPLINK-WR841N:
После осуществления проброса портов Вы сможете управлять клавитурой и мышью дистанционного компьютера (не своим) через Usb2kbd_LAN/COM по UDP-протоколу безо всяких скриптов через вышеупомянутую специальную штатную программу управления и отсылки пакетов в Usb2kbd_LAN (далее штатное ПО, высылается при покупке), вот такую:
и в ней прописываете настройки соединения (вкладка "Настройки"), соединяетесь с удаленным компьютером через любую программу дистанционного управления (рекомендую Parsec) в режиме просмотра (чтоб видеть, чем же Вы там управляете) и жмете "Старт" в программе. Теперь все события клавиатуры и мыши с управляемого компьютера будут отсылаться в девайс по локальной сети на заданный IP адрес и порт, и вот Вы управляете удаленным компьютером как будто Вы возле него! Причем все нажатия клавиатуры и мыши будут настоящими, а не эмулированными!
Есть еще один вариант управления девайсом в случае, если сам девайс и управляемый компьютер располагаются удаленно от управляющего компьютера и напрямую слать пакеты в девайс нет возможности по локальной сети. В таком случае вы запускаете штатное ПО на удаленном компьютере (которым нужно управлять), выбираете в штатном ПО особый режим работы, когда все эмулированные события движения мыши и клавиатуры, полученные из Parsec, будут дублироваться в девайс и становиться "настоящими".
Кстати, в Usb2kbd_LAN/COM есть возможность отсылать дублированные нажатия клавиатуры и мыши одновременно сразу на несколько пар IP:PORT. Для этого допишите необходимые параметры в файл settings.ini программы. Вот пример settings.ini с двумя дополнительными парами IP и PORT (т.е. в примере одна пара SendToIPAddress:SendToPort - основная, а SendToIPAddress1:SendToPort1 и SendToIPAddress2:SendToPort2 - дополнительные. Итого - пакеты будет отсылаться одновременно на 3 пары.
Пример файла settings.ini:
[global]
serial=1247
systempass=0
IPAddress=192.168.0.50
SendToIPAddress=192.168.0.223
SendToPort=12345
SendToIPAddress1=192.168.0.224
SendToPort1=12345
SendToIPAddress2=192.168.0.225
SendToPort2=12345
При запуске штатной программы с такими установками во вкладке "Настройки" Вы увидите надпись о том, сколько дополнительных пар IP:PORT было найдено в settings.ini
Кроме того, напомню, что при помощи этой программы Вы также сможете научиться правильно составлять управляющие пакеты для отправки в девайс (вкладка программы Составитель пакетов). Там же можно и сразу отправить составленный пакет в девайс (работает только для пакетов смещения курсора мыши без нажатий кнопок, чтоб не было эффекта "залипания" нажатой клавиши без отжатия).
Управляющий пакет Usb2kbd_LAN/COM
Итак, что такое управляющий пакет Usb2kbd_LAN/COM? Управляющий пакет - это 18-значный цифровой код определенного формата, который Вы отправляете в Usb2kbd_LAN/COM (через LAN-интерфейс или COM-порт), который получается девайсом, проверяется и, если пакет прошел проверку на корректность, выполняется (происходит нажатие клавиши клавиатуры, движение мыши и т.д.). Рассмотрим структуру управляющего пакета для отправки в Usb2kbd_LAN/COM:
где ID - ID девайса (написан маркером на девайсе, у каждого девайса уникален);
b1, b2, b3, b4 - параметры управляющего пакета, где мы описываем что мы хотим нажимать, куда смещать мышь и на сколько.
Давайте сначала рассмотрим детальнее параметры b1, b2, b3, b4 управляющего пакета, необходимые для работы Usb2kbd_LAN:
b1 - Управляющий символ (целое число) - определяет действие, которое необходимо выполнить устройством Usb2kbd_Lan. Его возможные значения Вы сможете увидеть в таблице ниже
b2 - Вспомогательный символ, который дополняет символ b1. Может означать:
а) Код клавиши (целое число, значения от 4 до 231) - определяет код нажатой или отжатой клавиши клавиатуры для случаев, когда b1 = 1 или 2 (коды клавиш Вы сможете скачать в разделе сайта "Загрузки");
ИЛИ
б) Код нажатия кнопок мыши (целое число, значения от 0 до 7) - определяет код нажатой или отжатой кнопки мыши для случаев, когда b1 = 4.
... т.д. Подробнее - в таблице параметров управляющего пакета ниже.
Хватит теории, пошла практика:
ВНИМАНИЕ! ВАЖНО! Для стабильной и бесперебойной работы Usb2kbd_LAN/COM по протоколу UDP (LAN) ОБЯЗАТЕЛЬНО используйте минимальные паузы в 1 мс между событиями, иначе возможны потери UDP-пакетов! Для работы через COM-порт паузы между событиями не обязательны.
Отправка UDP управляющего пакета в локальную сеть:
Перед началом написания программы отправки управляющего UDP-пакета в устройство помните, что сначала в Вашей программе Вам нужно будет задать следующие исходные параметры сети:
- IP адрес локального компьютера (откуда будет посылаться UDP-пакеты), в примерах - 192.168.0.50, проставьте свой;
- IP-адрес подключенного устройства Usb2kbd_LAN/COM (по умолчанию один IP - 192.168.0.222 для клавиатуры и для мыши), проставьте свой, если отличен от 192.168.0.222;
- Порт назначения (12345 для клавиатуры и для мыши), проставьте свой, если отличен от 12345;
- вызвать функцию формирования и отправки управляющего UDP-пакета на указанный IP-адрес и порт).
Отправка COM управляющего пакета в COM-порт девайса:
Если же Вы решите вместо UDP отправлять управляющие пакеты через COM-порт в устройство Usb2kbd_LAN/COM, помните, что сначала в Вашей программе Вам нужно будет задать следующие исходные параметры:
- COM-порт, который отобразится при подключении девайса к USB компьютера с замкнутыми выводами 12 и GRN платы (см. информацию выше в этом разделе);
- вызвать функцию формирования и отправки управляющего COM-пакета на указанный COM-порт. Напомню, управляющий пакет для COM-порта девайса аналогичен пакету UDP, только в конце пакета (18 цифр) обязательно должен быть добавлен специальный символ конца строки ($0A, он же LF).
Для всех примеров ниже за эталон ID девайса будет принято число 1206.
Убедительная просьба - копируйте тексты кодов с сайта в блокнот, чтоб код был более читабельный.
ПРИМЕРЫ ДЛЯ UDP (Usb2kbd_LAN)
Пример на Autohotkey (UDP):
Sleep, 2000
IPAddress:="192.168.0.50" ; локальный ip
SendToIPAddress:="192.168.0.222" ; ip девайса
Port:= "12345" ; порт локальной тачки, откуда пойдут UDP-пакеты в сеть
SendToPort:= "12345" ; порт удаленной тачки, куда пойдет UDP-пакет для девайса
; инициализируем UDP один раз вначале
VarSetCapacity(wsaData, 32)
DllCall("Ws2_32\WSAStartup", "UShort", 2, "UInt", &wsaData)
socket := DllCall("Ws2_32\socket", "Int", 2, "Int", 2, "Int", 17)
VarSetCapacity(sockaddr, 32)
NumPut(2, sockaddr, 0, "Short")
NumPut(DllCall("Ws2_32\htons", "UShort", Port), sockaddr, 2, "UShort")
NumPut(DllCall("Ws2_32\inet_addr", "Str", IPAddress), sockaddr, 4)
DllCall("Ws2_32\WSAAsyncSelect", "UInt", socket, "UInt", WinExist("A"), "UInt", 0x5555, "Int", 1)
OnMessage(0x5555, "WinsockMessage")
SendText := "120640000010000100"
; отправим сформированный UDP-пакет в девайс
VarSetCapacity(sendaddr, 32)
NumPut(2, sendaddr, 0, "Short")
NumPut(DllCall("Ws2_32\htons", "UShort", SendToPort), sendaddr, 2, "UShort")
NumPut(DllCall("Ws2_32\inet_addr", "Str", SendToIPAddress), sendaddr, 4)
DllCall("Ws2_32\sendto", "UInt", socket, "Str", SendText, "Int", StrLen(SendText), "Int", 0 , "UInt", &sendaddr, "Int", 32)
Пример на Autoit (UDP):
Ниже приведу пример формирования и отсылки управляющего UDP-пакета в Usb2kbd_LAN/COM посредством Autoit:
UDPStartup()
$LocalIP = "192.168.0.50"
$LocalPort = "12345"
$RemoteIP = "192.168.0.222"
$RemotePort = "12345"
$sock = UDPBind($LocalIP, $LocalPort)
$sock[2] = $RemoteIP
$sock[3] = $RemotePort
Sleep(3000)
UDPSend($sock, "120610040000000000")
UDPSend($sock, "120680000000000000")
UDPShutdown()
Пример нажимает клавишу А на клавиатуре и затем отжимает ВСЕ клавиши клавиатуры.
Пример на С++ (UDP, спасибо за пример Александру):
void SendInputClass::SendInput(){
SendInputClass::SendUDP("1", "030", "00000", "00000"); // нажатие 1
Sleep(30);
SendInputClass::SendUDP("2", "030", "00000", "00000"); // отжатие 1
}
void SendInputClass::SendUDP(string b1, string b2, string b3, string b4) {
// 1206 - ID
// 192.168.0.222 - IP
// 12345 - Port
CHAR pak[300];
sprintf_s(pak, "1206%s%s%s%s", b1.c_str(), b2.c_str(), b3.c_str(), b4.c_str());
struct sockaddr_in si_other;
int s, slen = sizeof(si_other);
WSADATA wsa;
//Initialise winsock
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
DebugBreak();
//create socket
if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
DebugBreak();
//setup address structure
memset((char *)&si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(12345);
si_other.sin_addr.S_un.S_addr = inet_addr("192.168.0.222");
sendto(s, pak, strlen(pak), 0, (struct sockaddr *) &si_other, slen);
closesocket(s);
WSACleanup();
}
Пример на Delphi7 (UDP):
Пример на Java (UDP, спасибо за код Матвею):
DatagramSocket socket = new DatagramSocket();
InetAddress inetAddress = InetAddress.getByName("192.168.1.222");
byte[] msg;
msg = "120610040000000000".getBytes(); // press button "a"
DatagramPacket packet = new DatagramPacket(msg, msg.length, inetAddress, 12345);
socket.send(packet);
Thread.sleep(1); //delay 1ms
msg = "120620040000000000".getBytes(); //release button "a"
packet = new DatagramPacket(msg, msg.length, inetAddress, 12345);
socket.send(packet);
socket.close();
Еще пример на Java (UDP, спасибо за пример Александру):
import java.net.*;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
String deviceId = "3485"; // Device ID
InetAddress deviceIpAddress = InetAddress.getByName("192.168.0.222"); // Device IP address
int deviceUdpPort = 12345; // Device UDP port
byte[] message; // Net message
int delay = 1; // Delay 1ms
DatagramSocket socket = new DatagramSocket();
// Press button "s"
message = (deviceId + "10220000000000").getBytes();
DatagramPacket packet = new DatagramPacket(message, message.length, deviceIpAddress, deviceUdpPort);
socket.send(packet);
// Delay
Thread.sleep(delay);
// Release button "s"
message = (deviceId + "20220000000000").getBytes();
packet = new DatagramPacket(message, message.length, deviceIpAddress, deviceUdpPort);
socket.send(packet);
// Close connection
socket.close();
}
}
Пример на C# (UDP, спасибо за код Александру):
using System;
using System.Threading;
using System.Net.Sockets;
class Program
{
static string server = "192.168.0.222";
static int port = 12345;
static string serial = "1206";
static void Main(string[] args)
{
Sendkeyb("1", "030", "00000", "00000"); // отошлем клавиатуре нажатие 1
Sendkeyb("2", "030", "00000", "00000"); // отошлем клавиатуре отжатие 1
}
static void Sendkeyb(string b1, string b2, string b3, string b4)
{
string message = serial + b1 + b2 + b3 + b4;
UdpClient client = new UdpClient(server, port);
byte[] data = Encoding.UTF8.GetBytes(message);
int numberOfSentBytes = client.Send(data, data.Length);
client.Close();
Thread.Sleep(1);
}
}
Пример на Питоне 3.8.10 для LAN (спасибо за пример Александру):
import socket
import time
# основная функция - печатает цифры девайсом.
def print_on_device(so, string_to_print, timelap, DEV_ID):
for e_symb in string_to_print:
if e_symb == "1":
keycode = "030"
elif e_symb == "2":
keycode = "031"
elif e_symb == "3":
keycode = "032"
elif e_symb == "4":
keycode = "033"
elif e_symb == "5":
keycode = "034"
elif e_symb == "6":
keycode = "035"
elif e_symb == "7":
keycode = "036"
elif e_symb == "8":
keycode = "037"
elif e_symb == "9":
keycode = "038"
elif e_symb == "0":
keycode = "039"
# пакет №1 - нажимаем клавишу
MESSAGE_1_keydown = DEV_ID + "1" + keycode + "00000" + "00000"
so.sendto(bytes(MESSAGE_1_keydown, "utf-8"), (UDP_IP, UDP_PORT))
time.sleep(timelap) # пауза. Рекомендую 0.1 с
# пакет №1 - отжимаем клавишу
MESSAGE_2_keyup = DEV_ID + "2" + keycode + "00000" + "00000"
so.sendto(bytes(MESSAGE_2_keyup, "utf-8"), (UDP_IP, UDP_PORT))
time.sleep(timelap+0.1) #немного увеличенная пауза для перехода к следующей цифре
# основные настройки
UDP_IP = "192.168.0.222"
UDP_PORT = 34512
DEVICE_ID = "5388"
# инициализируем socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
# печатаем первую клавишу (только одну)
print_on_device(sock, "0", 0.1, DEVICE_ID)
time.sleep(3) # ждем 3с
# выдаем на девайс набор клавиш
print_on_device(sock, "4258", 0.1, DEVICE_ID)
print('done!')
ПРИМЕРЫ ДЛЯ COM (Usb2kbd_COM)
Пример на Autohotkey (COM-порт):
; инициализируем COM
port := FileOpen("\\.\COM72", "w") ; Open for writing only, not reading/appending. Тут проставьте COM-порт своего девайса.
port.Write("120640000000100000") ; 1 px mouse X move
port.WriteChar(10) ; Write конец строки ($0A).
port.Close() ; close the Port
Пример на AutoIt (COM-порт):
Пример на Питоне (COM-порт, Спасибо за пример Александру):
#pip install pyserial - Уставливаем библиотеку
import serial # Импортируем библиотеку
# Настройка COM-порта (замените на правильный)
com_port = 'COM6' # Замените на ваш порт
baud_rate = 9600 # Скорость соединения
timeout = 1 # Таймаут соединения
port = serial.Serial(com_port, baud_rate, timeout=timeout)
port.write(b"120640000000100000") # Двигаем мышкой как пример.
port.write(b"\n") # Не забываем про конец строки.
port.close() # Закрываем порт.
Пример на AHK для программной перезагрузки девайса/reset для COM (спасибо за пример Алексею):
autohotkeyCopy code; Открываем последовательный порт
SerialPort := ComObjCreate("MSCommLib.MSComm")
SerialPort.CommPort := 12 ; Измените на номер вашего порта
SerialPort.Settings := "1200,N,8,1"
SerialPort.PortOpen := true
; Ждем перед сбросом (при необходимости, измените время)
Sleep, 100
; Выполняем сброс, переключая линию DTR (Data Terminal Ready)
DllCall("kernel32.dll\EscapeCommFunction", Ptr, SerialPort.hCom, UInt, 6) ; 6 соответствует CLRDTR
; Предоставляем время для того, чтобы Arduino вошла в режим загрузчика
Sleep, 2000
; Закрываем последовательный порт
SerialPort.PortOpen := false
MsgBox Режим загрузчика активирован.
ExitApp
Примечание:
Убедитесь, что номер порта (CommPort) в коде соответствует вашему порту Arduino.При необходимости, вы можете изменить параметры последовательного порта в строке SerialPort.Settings.Код использует библиотеку MSCommLib, которая включена в AHK. В случае её отсутствия, вы можете скачать и зарегистрировать её.Пожалуйста, выполните код с административными правами, чтобы избежать проблем с доступом к порту.
Пример на C++ (COM-порт, Спасибо за пример Александру):
void SendDataToComPort(const std::wstring& port, const std::string& data) {
HANDLE comHandle = CreateFileW(port.c_str(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, 0, nullptr);
if (comHandle == INVALID_HANDLE_VALUE) {
std::cout << "Проблемы с COM-портом." << std::endl;
return;
}
DWORD bytesWritten = 0;
WriteFile(comHandle, data.c_str(), static_cast<DWORD>(data.length()), &bytesWritten, nullptr);
std::cout << "Отправлено байт " << bytesWritten << " в USB2KBD" << std::endl;
CloseHandle(comHandle);
}
int main() {
// Отправляем данные на COM-порт Arduino
std::wstring comPort = L"\\\\.\\COM3"; // Укажите соответствующий порт
std::string dataToSend = "120640000050000500\n"; // Данные для отправки
SendDataToComPort(comPort, dataToSend);
return 0;
}