Я пытаюсь написать программу на C ++, которая автоматически определяет номера COM-портов всех подключенных arduinos.
Я уже обнаружил, что могу получить список всех доступных устройств COM-порта в HKLM/HARDWARE/DEVICEMAP/SERIALCOMM
но нет никакой информации об устройстве, которое слушает там. Есть ли способ получить, например, GUID или описание устройства, чтобы определить, какой из них является Arduino? Единственный другой способ, который я вижу, это попытаться отправить что-то на каждый порт и прослушать ранее определенный ответ.
Спасибо за ваши ответы 🙂
РЕДАКТИРОВАТЬ:
Я думаю, что я должен упомянуть, что я использую g ++ в качестве компилятора и MinGW. Сям связал меня с этим Как автоматически определить COM-порт Arduino? который, кажется, достигает того, чего я хочу, но написан на C # и использует специфичные API .Net, когда мне нужен чистый Win32.
Устройства с последовательными портами не являются Plug N Play, поэтому вы не можете получить ни описание устройства, ни GUID. Поэтому невозможно автоматическое обнаружение Arduino с использованием технологии последовательного порта.
В соответствии с Эта статья один из способов сделать это, посмотрев на HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Есть несколько соответствующих подразделов: usbaudio
, usbccgb
, usbehci
, usbprint
, usbscan
и так далее. Arduino, вероятно, будет в usbccgb
, usbehci
, но, если честно, я не уверен.0
, 1
, так далее.Вы можете узнать идентификатор устройства любого устройства в диспетчере устройств Windows: щелкните правой кнопкой мыши устройство, выберите свойства и перейдите на вкладку сведений. Очевидно, что вы можете открыть необходимый ключ реестра программным путем для поиска идентификатора устройства Arduino. Проблема с этим подходом для вашей проблемы заключается в том, что ваш детектор Arduino должен быть предварительно запрограммирован для каждого Arduino, который вы планируете использовать.