Опрос com портов через WMI

Grigory
Offline
Зарегистрирован: 29.03.2014
Доброго всем дня.

Поставили задачу следующего плана - нужно через cmd и wmi получить перечень com портов.
Делаю след образом- wmic path win32_pnpentity get caption /format:table| find "COM" - тут все гуд.
Далее каждый из полученных портов нужно прослушивать около 30 секунд и полученные данные отправлять на ком порт Ардуинки.

Вопрос №1 - среди полученных в списке портов есть и порт на котором сидит ардуино(заранее не известно какой это порт) - как вычленить его из списка опрашиваемых?
Вопрос №2 - каким собственно образом можно опрашивать каждый из портов?
Вопрос №3- как через cmd\wmi допустим com17 переименовать в сom18?
Вопрос№4- как прочитать настройки порта и отправить их в com ардуинки?

Добавлено через 7 минут
к сожалению из возможных вариантов VBS\С# и тд. у меня есть только cmd.

Добавлено через 5 минут
за основу взял вот такой подход

#include <Keyboard.h>
void setup() {
  Keyboard.begin();
  delay(3000);//Delay
  Keyboard.press(KEY_LEFT_GUI);//Кнопка win
  delay(500); 
  Keyboard.press('r');//Win+R
  delay(500); 
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.println("cmd"); // вызываем командную строку
  Keyboard.press(KEY_RETURN);//Enter
  delay(500);
  Keyboard.release(KEY_RETURN);
  delay(500); 
Keyboard.print("wmic path win32_pnpentity get caption /format:table| find "); 
  Keyboard.println(String(char(34)) + String(char(67))+ String(char(79))+ String(char(77)) + String(char(34)));
  //Keyboard.println("wmic path win32_pnpentity get caption /format:table| find "+ String(char(34)) +"COM" + String(char(34))); 
  Keyboard.press(KEY_RETURN);
  delay(500);
  Keyboard.release(KEY_RETURN);
  Keyboard.end();
}

Добавлено через 8 минут
по вопросу №1 - предполагаю что можно от имени каждого сом порта отправить какую нибудь строку и если ардуинка получила эту строку то как раз таки и можно зафиксировать номер этого порта.

Григорийoss на форуме

 

b707
Offline
Зарегистрирован: 26.05.2017

хм, а при чем тут ардуино?

Messiah
Messiah аватар
Offline
Зарегистрирован: 10.11.2018

Большинство кодеров не заморачивается перечнем реальных COM-устройств и гоняют в цикле в разумных пределах. При этом часто в выпадающем списке COM1-10, а устройство в каком-то 21м потому что USB2Serial. Вообщем, делай как все, для не существующего порта либо ошибка открытия файла будет (CreateFileA) либо таймаут чтения из него.

Grigory
Offline
Зарегистрирован: 29.03.2014

за основу взята дуня))) она должна найти порт на которосм сама же и сидит.

Grigory
Offline
Зарегистрирован: 29.03.2014

Вопрос - есть arduino micro. 

#include <Keyboard.h>
void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  Keyboard.begin();
  delay(3000);//Delay
  Keyboard.press(KEY_LEFT_GUI);//Кнопка win
  delay(500);
  Keyboard.press('r');//Win+R
  delay(500);
  Keyboard.release(KEY_LEFT_GUI);
  //Keyboard.println("notepad"); // вызываем командную строку
   Keyboard.println("cmd"); // вызываем командную строку
  Keyboard.press(KEY_RETURN);//Enter
  delay(1000);
  Keyboard.release(KEY_RETURN);
  delay(500);
  for (int i = 0; i < 2; i++) { // Конструкция «3 в одном»
    for (int d = 0; d < 20; d++) {
      Keyboard.println("echo Test>com" + String(d));
      delay(500);
      if (Serial.available()) {
        int inByte = Serial.read();
        digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
        delay(50);                       // wait for a second
        digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
        delay(500);
      }
    }
  }
  Keyboard.press(KEY_RETURN);
  delay(500);
  Keyboard.release(KEY_RETURN);
  Keyboard.end();
}

void loop() {}

На момент подключенного Мк в ПК получается что имеется и com и USB Composite Device. 

Мой вопрос в том - могу ли я через cmd отправить в arduino данные по HID(не по serial)? куда копать?