You can also use setserial
to get and set serial port information, in addition to dmesg
.
Tested on Ubuntu 18.04:
setserial
# install it
sudo apt update
sudo apt install setserial
# Display (and sort) serial information for all /dev/ttyS* devices
setserial -g /dev/ttyS* | sort -V
# Display (and sort) serial information for all /dev/ttyUSB* devices
setserial -g /dev/ttyUSB* | sort -V
# To see extra info. such as the baud rate too, add `-G`:
setserial -g -G /dev/ttyS* | sort -V
setserial -g -G /dev/ttyUSB* | sort -V
Sample run and output. Notice that /dev/ttyS4
is the only port that appears to be alive and not “unknown” (whatever that means). (This /dev/ttyS4
device also shows up in the Arduino IDE even though it’s not an Arduino and I don’t know what it is.):
$ setserial -g -G /dev/ttyS* | sort -V
/dev/ttyS0 uart unknown port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS1 uart unknown port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart unknown port 0x03e8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS3 uart unknown port 0x02e8 irq 3 baud_base 115200 spd_normal
/dev/ttyS4 uart 16550A port 0x3060 irq 19 baud_base 115200 spd_normal skip_test
/dev/ttyS5 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS6 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS7 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS8 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS9 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS10 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS11 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS12 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS13 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS14 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS15 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS16 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS17 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS18 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS19 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS20 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS21 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS22 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS23 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS24 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS25 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS26 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS27 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS28 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS29 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS30 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS31 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
dmesg
Use dmesg
to also see some of this information:
# Show UART information, incl. baudrate, for /dev/ttyS* devices.
dmesg | grep ttyS
# Show UART information, incl. baudrate, for /dev/ttyUSB* devices.
dmesg | grep ttyUSB
Sample run and output:
$ dmesg | grep ttyS
[ 1.624447] 0000:00:16.3: ttyS4 at I/O 0x3060 (irq = 19, base_baud = 115200) is a 16550A
Even better, watch the dmesg
kernel ring buffer output live with the -w
option:
dmesg -wH
Now, unplug your USB device you’re trying to identify and plug it back in to see which device it is, based on the messages that show up in the dmesg
output, live.
Для правильного подключения оборудования, необходимо определить номер COM порта.
Проверка проводится при условии, что сервер полностью развернут, и работает заведомо правильно.
Windows
Для определения номера COM порта на ОС Windows необходимо:
- Убедиться в том, что многожильный кабель подключен к COM-порту
- Перейти в “Диспетчер устройств”, расположенный в: Панель управленияОборудование и звукДиспетчер устройств (необходимы права администратора)
- Раскрыть дерево “Порты (COM и LPT)”
- Отсоединить многожильный кабель
- Запомнить изменения в дереве устройств “Порты (COM и LPT)”
- Присоединить многожильный кабель обратно к COM-порту
- Найти новый порт в дереве устройств “Порты (COM и LPT)”
8. После того, как номер COM-порта определен его необходимо указать в схеме SCADA, для устройства, подключенного многожильным кабелем.
Linux
Для определения номера COM порта на ОС Linux необходимо:
- Обладать правами Root либо пользователь должен входить в группу dialout
- Убедиться в том, что многожильный кабель подключен к COM-порту
- Проверить наличие COM портов в системе, введя в командную строку следующую команду:
ls -l /dev/ttyS* /dev/ttyUSB*
4. После выполнения команды отобразится список всех доступных COM-портов
dev/ttyS0 – первый COM порт
/dev/ttyS1 – второй COM порт
/dev/ttyUSB0 – специальный кабель-переходник из USB в COM (Gembird UAS111)
5. Установить программу minicom. Для этого вводим следующую команду:
apt-get install minicom
6. Найти многожильный кабель в оплётке длиной 4-6 см.
7. Соединить 2 и 3 выводы COM порта перемычкой из кусочка многожильного провода. Оплётка будет удерживать провод на контактах, а металлические жилы внутри будут проводниками.
8. Настроить программу minicom. Для этого вводим следующую команду:
minicom -s
9. Выбрать “Настройка последовательного порта”
10. Нажимая А поочередно выбираем порты (если используется кабель-переходник из USB в COM то выбрать /dev/ttyUSB0)
11. Отключить аппаратное управление потоком, нажав «F»
12. Выйти из настроек нажав «Enter»
13. Сохранить настройки по умолчанию «Сохранить настройки как dfl»
14. Выйти из minicom
15. Запустить minicom выполнив команду:
minicom
16. Нажать на любую клавишу на клавиатуре
В случае, если символы не вводятся с клавиатуры, необходимо вернуться к пункту 10, и выбрать другой COM-порт
Если вводимые символы отображаются – значит COM-порт определен верно
17. После того, как номер COM-порта определен его необходимо указать в схеме SCADA, для устройства, подключенного многожильным кабелем.
One thing to note, codes like this:
for i in serial.tools.list_ports.comports():
print(i)
Return the following:
COM7 - Standard Serial over Bluetooth link (COM7) COM1 - Communications Port (COM1) COM8 - Standard Serial over Bluetooth link (COM8) COM4 - USB-SERIAL CH340 (COM4)
If you want the ports listed in order, and only the ones available to you, try:(credit to tfeldmann)
def serial_ports():
""" Lists serial port names
:raises EnvironmentError:
On unsupported or unknown platforms
:returns:
A list of the serial ports available on the system
"""
if sys.platform.startswith('win'):
ports = ['COM%s' % (i + 1) for i in range(256)]
elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
# this excludes your current terminal "/dev/tty"
ports = glob.glob('/dev/tty[A-Za-z]*')
elif sys.platform.startswith('darwin'):
ports = glob.glob('/dev/tty.*')
else:
raise EnvironmentError('Unsupported platform')
result = []
for port in ports:
try:
s = serial.Serial(port)
s.close()
result.append(port)
except (OSError, serial.SerialException):
pass
return result
This returns the following:
['COM1', 'COM4', 'COM8']
So unlike the first example, where the result was [‘COM7’, ‘COM1’, ‘COM8’, ‘COM4’], this time I get all of the com ports in order, and only the ones available. Very handy if you need them in order, and tested to see if they’re available.
How would I go about viewing a list of COM ports in use without the use of Device Manager?
I don’t want to install any software either. Is there a possible way to do this through the command line?
asked Nov 4, 2014 at 16:24
5
In the command prompt use
mode
Used without parameters, mode
displays all the controllable attributes of the CON
(console) and the available COM
devices (and LPT
as well).
Accepts /?
switch for basic help:
mode /?
answered Nov 5, 2014 at 15:45
JosefZJosefZ
12.7k5 gold badges36 silver badges67 bronze badges
2
I know the question has been answered, but this is another method.
In command prompt, use:
chgport
in windows Vista and up. Lists your ports and which device they are.
answered Nov 25, 2016 at 12:22
8
In the command prompt use:
C:>wmic path Win32_SerialPort
In PowerShell, run as administrator:
PS> Get-WMIObject Win32_SerialPort | Select-Object Name,DeviceID,Description
Or, for raw data:
PS> Get-WMIObject Win32_SerialPort
Hope this helps.
Nick Bolton
3,3109 gold badges37 silver badges50 bronze badges
answered Nov 4, 2014 at 16:39
vembutechvembutech
6,2001 gold badge19 silver badges21 bronze badges
6
Using mode
most of the time I don’t see the devices that are not connected.
I prefer to use this solution with Python:
python -c "import serial.tools.list_ports as ls; print([p.device for p in ls.comports()])"
So I can see anything plugged in even if the connection is closed.
serial.tools.list_ports is from package pyserial.
answered Jul 5, 2018 at 13:50
G MG M
2835 silver badges14 bronze badges
2
wmic https://docs.microsoft.com/en-us/windows/desktop/wmisdk/wmic is a
windows command line utility to get system information.
If your serial port is virtual created by some driver through USB connection, use this example to get details about these serial ports.
wmic path CIM_LogicalDevice where "Description like 'USB Serial%'" get /value
answered Nov 16, 2018 at 16:06
GLamprosGLampros
711 silver badge4 bronze badges
2
The snippet below lists serial ports into the $PORTS variable
# BASH MSYS2
# This function will get a list of ports automatically
PORTS=`/c/Windows/System32/mode.com | grep Status.*COM | awk '{ print $4 }' | sed s/://`
# To the list (use) the ports, see the code below:
echo -n "Programming (echoing) ports: "
for aa in $PORTS; do
echo -n $aa
done
echo ""
answered Jan 7, 2019 at 21:09
1
One thing to note, codes like this:
for i in serial.tools.list_ports.comports():
print(i)
Return the following:
COM7 - Standard Serial over Bluetooth link (COM7) COM1 - Communications Port (COM1) COM8 - Standard Serial over Bluetooth link (COM8) COM4 - USB-SERIAL CH340 (COM4)
If you want the ports listed in order, and only the ones available to you, try:(credit to tfeldmann)
def serial_ports():
""" Lists serial port names
:raises EnvironmentError:
On unsupported or unknown platforms
:returns:
A list of the serial ports available on the system
"""
if sys.platform.startswith('win'):
ports = ['COM%s' % (i + 1) for i in range(256)]
elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
# this excludes your current terminal "/dev/tty"
ports = glob.glob('/dev/tty[A-Za-z]*')
elif sys.platform.startswith('darwin'):
ports = glob.glob('/dev/tty.*')
else:
raise EnvironmentError('Unsupported platform')
result = []
for port in ports:
try:
s = serial.Serial(port)
s.close()
result.append(port)
except (OSError, serial.SerialException):
pass
return result
This returns the following:
['COM1', 'COM4', 'COM8']
So unlike the first example, where the result was [‘COM7’, ‘COM1’, ‘COM8’, ‘COM4’], this time I get all of the com ports in order, and only the ones available. Very handy if you need them in order, and tested to see if they’re available.