#command-line #arduino #usb #port
#командная строка #arduino #usb #порт
Вопрос:
Я выполняю следующий код в разных системах. Мне требуется обобщенный параметр соответствия, чтобы код нормально работал на всех системах в зависимости от COM-ПОРТА, используемого для этого устройства.
C:arduinosetuphardware/tools/avr/bin/avrdude -CC:arduinosetuphardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P.COM121 -b115200 -D -Uflash:w: C:UsersXYZABCfilesabc.cpp.hex: я
Ответ №1:
Я предполагаю, что вы используете Windows и хотите, чтобы ваши команды работали на разных компьютерах с Windows, даже если Arduino подключены к разным COM-портам. Большинство Arduino в наши дни используют usbser.sys . Если вы предполагаете, что существует только одно устройство, использующее usbser.sys подключенный к системе, и это Arduino, тогда к Arduino можно получить доступ по объекту с именем USBSER000. Вы можете передать \.USBSER000
в качестве аргумента порта в AVRDUDE для ссылки на порт Arduino.
Вы должны правильно экранировать эту строку, поэтому фактическая команда, которую вы пишете, будет примерно такой:
avrdude -P\\.\USBSER000 ...
Другие вещи, которые могут вам помочь:
- Знаете ли вы, что вы можете изменить порт, на который включен Arduino, из диспетчера устройств? Я предпочитаю хранить все свои Arduino на COM7.
- Вы можете установить переменную среды на каждой машине, чтобы указать, на какой порт подключен Arduino, а затем ссылаться на нее в своих командах с помощью чего-то вроде
%VARNAME%
или$VARNAME
.
Ответ №2:
Вы пытались проверить скорость передачи данных в бодах? Вероятно, это вызывает проблему. Лучше, если вы используете как можно более низкую скорость передачи данных. Кроме того, скорость передачи данных в бодах должна совпадать в вашем коде и в конфигурации COM-порта. (проверьте в диспетчере устройств)
Комментарии:
1. На самом деле я хочу использовать эту команду в разных системах. но разные системы будут иметь разные com-порты, такие как COM121 или COM51 и т. Д. Итак, мне нужна обобщенная команда, чтобы мне не нужно было менять код в каждой системе
Ответ №3:
Поскольку у меня нет доступа к комментариям, я собираюсь ответить, ПРЕДПОЛАГАЯ, что вы пытаетесь это сделать в операционной системе WINDOWS.
Во-первых, было бы немного проще и несколько элегантнее написать служебную программу для этого запроса, потому что ни один конкретный параметр в вашей командной строке не может учитывать все возможные настройки COM-порта в разных системах.
В Windows нет команды ‘Alias’ для связывания общего имени с элементом конфигурации, таким как COM-порт, поэтому применение общего имени невозможно. Вы можете написать цикл FOR и поместить его в файл CMD или BAT с логикой, которая пытается отобразить текст в списке типичных имен COM-портов, таких как COM1, COM2 и т.д.
Если вы введете эту строку в окне CMD или командной строки в MS-DOS или Windows:
echo "This is a test" > COM1:
Вы либо не получите ответа (хорошо), либо ОС ответит:
The system cannot find the file specified.
Последнее сигнализирует о том, что такого устройства нет. Цикл FOR может тестировать итерации для первого устройства, которое не возвращает ошибку. Проблема здесь в том, что в системах с несколькими последовательными портами (как это обычно бывает) ваш код попытается использовать ПЕРВОЕ найденное устройство. Если пользователь подключил последовательный кабель к другому порту, он не будет работать.
Вот почему я предлагаю вам написать служебную программу. Утилита может составить список доступных последовательных портов, а затем попытаться запросить каждый порт для устройства с помощью запроса. Это единственный известный мне способ гарантировать, что «командная строка», которую вы хотите использовать, будет единой для всех систем.
Комментарии:
1. Я понимаю концепцию, но в моей системе может использоваться несколько портов. для ex COM121 используются оба COM 11, и при тестировании вышеуказанной команды на обоих из них это подтверждается отсутствием ответа. Но как определить, что мое устройство arduino подключено к 121, а не к 11.
2. Вот почему я сказал, что написание утилиты — единственный способ убедиться, что у вас правильный порт. Если Arduino можно запрограммировать, я предлагаю написать короткий блок кода, который отвечает на запрос, поступающий через порт. Итак, на стороне ПК вы отправляете уникальную строку на COM-порт. На Arduino у вас есть слушатель, который отслеживает трафик COM-порта для этой строки. Когда он «видит» строку, он отвечает отправкой ответа — или повторяет саму строку. Логика в вашей компьютерной утилите видит ответ и может уведомить вызывающее приложение или, в данном случае, сценарий оболочки.
Ответ №4:
Дэвид Грейсон, ваш ответ был потрясающим. Я также нашел какое-то решение:
using System;
using System.IO.Ports;
public class ports
{
static public void Main ()
{
var portNames = SerialPort.GetPortNames();
foreach(var port in portNames) {
Console.WriteLine (port);
}
}
}
скомпилировал и выполнил этот код с помощью компилятора mono C #, используя команды в командной строке
mcs ports.cs
mono ports.exe
теперь ports.exe может использоваться в любой системе для получения списка доступных com-портов.