Serial Port: различия между версиями

Материал из Wiren Board
(→‎Minicom: Вынес про миником в отдельную статью, а тут оставил только ссылку)
Строка 75: Строка 75:
Другие примеры использования утилиты можно посмотреть в статьях о настройке приводов штор, например, [[Akko AM82]].
Другие примеры использования утилиты можно посмотреть в статьях о настройке приводов штор, например, [[Akko AM82]].


=== Minicom ===
Об использовании Minicom для подключения к serial-порту читайте в [[Minicom | статье Minicom]].
Minicom — утилита для отправки и получения символьных команд. Её удобно использовать для работы с устройствами, которые управляются текстовыми командами и выводят текстовые сообщения в ответ. Например, c помощью minicom удобно отправлять AT-команды на GSM-модемы или получать данные с GPS-модулей, которые работают по протоколу NMEA.
 
Утилита minicom предустановлена на все контроллеры Wiren Board, а на ПК с ОС Linux её нужно будет установить. Для установки minicom на ПК с ОС Linux, выполните поочереди команды:
<syntaxhighlight lang="bash">
sudo apt update
sudo apt install minicom
</syntaxhighlight>
 
Для запуска minicom нужны права суперпользователя, на контроллерах Wiren Board вы уже работаете под суперпользователем, а на ПК с ОС Linux используйте <code>sudo</code>.
 
==== Настройка параметров подключения ====
[[Image: Minicom settings.png |500px|thumb|right| Пример настройки параметров подключения в minicom ]]
[[Image: Minicom-AT-4G.png |500px|thumb|right| Отправка AT-комманд для модема в терминале программы [[minicom]]]]
Для настройки параметров подключения, запустите утилиту с ключом -s и укажите имя профиля, в который хотите сохранить настройки.
 
Например, настроим соединение с портом <code>/dev/ttyGSM</code>:
# Запустите minicom от имени суперпользователя в режиме настройки соединения и укажите имя профиля, например, '''ttyGSM''':
#: <syntaxhighlight lang="bash">
minicom -s ttyGSM
</syntaxhighlight>
# В появившемся меню '''Configuration''', выберите пункт '''Serial port setup'''.
# Теперь выберите нужные пункты нажатием соответствующих клавиш на клавиатуре, меняйте настройки и каждое изменение подтверждайте клавишей <kbd>Enter</kbd>:
#* <kbd>A</kbd> — введите имя serial-порта: <code>/dev/ttyGSM</code>.
#* <kbd>E</kbd> — откроется окно '''Comm Parameters''', в котором нужно указать:
## Скорость соединения, секция '''Speed''' — выберите <kbd>E</kbd> — 115200.
## Количество битов данных, секция '''Data''' — выберите <kbd>V</kbd> — 8 бит.
## Бит чётности, секция '''Parity''' — выберите <kbd>L</kbd> — None.
## Количество стоповых битов, секция '''Stopbits''' — выберите <kbd>W</kbd> — 1 стоп-бит.
#* '''Hardware flow control''' (аппаратный контроль потока) — клавиша <kbd>F</kbd> переключает состояние, выберите '''No'''.
#* '''Software flow control''' (программный контроль потока) — клавиша <kbd>G</kbd> переключает состояние, выберите '''No'''.
# Выйдете из настроек порта в главное меню, нажав <kbd>Enter</kbd>.
# Сохраните настройки в профиль, для этого выберите '''Save Setup as ttyGSM'''.
# Закройте minicom, для этого выберите в меню пункт '''Exit from Minicom'''.
 
==== Запуск с сохранёнными настройками ====
В предыдущем пункте мы создали профиль настроек, теперь мы можем запустить minicom с этим профилем:
<syntaxhighlight lang="bash">
~# minicom ttyGSM
 
Welcome to minicom 2.7
 
OPTIONS: I18n
Compiled on Apr 22 2017, 09:14:19.
Port /dev/ttyGSM, 10:03:25
 
Press CTRL-A Z for help on special keys
</syntaxhighlight>
 
Чтобы отправить команды serial-устройству — вводите их в терминале и нажимайте клавишу <kbd>Enter</kbd>.
 
Для вызова справки зажмите одновременно клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, а затем клавишу <kbd>A</kbd>.
 
Чтобы выйти из minicom — нажмите одновременно клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, а затем клавишу <kbd>X</kbd>.
 
==== Запуск утилиты без профиля ====
Если вам нужно один раз соединиться с serial-устройством, то вы можете не создавать профиль, а указать параметры подключения прямо в аргументах командной строки.
 
Например, для соединения с модемом, который подключен к порту <code>/dev/ttyGSM</code> нужно ввести команду:
<syntaxhighlight lang="bash">
minicom -D /dev/ttyGSM -b 115200 -8 -a off
</syntaxhighlight>
 
{|  border="1" class="wikitable"
|+ Расшифровка параметров
! Аргумент|| Значение|| Описание
|-
| -D || /dev/ttyGSM || Порт, к которому подключено serial-устройство
|-
| -b || 115200 ||  Скорость порта, в бит/с
|-
| -8 || 8 || Количество битов данных
|-
| -a || off|| Контроль потока данных
|-
|  || || Остальные параметры оставлены по умолчанию
|-
|}
 
Полный перечень аргументов смотрите во встроенной справке, которую можно вызвать командой:
<syntaxhighlight lang="bash">
~# minicom -h
Usage: minicom [OPTION]... [configuration]
A terminal program for Linux and other unix-like systems.
 
  -b, --baudrate        : set baudrate (ignore the value from config)
  -D, --device          : set device name (ignore the value from config)
  -s, --setup            : enter setup mode
  -o, --noinit          : do not initialize modem & lockfiles at startup
  -m, --metakey          : use meta or alt key for commands
  -M, --metakey8        : use 8bit meta key for commands
  -l, --ansi            : literal; assume screen uses non IBM-PC character set
  -L, --iso              : don't assume screen uses ISO8859
  -w, --wrap            : Linewrap on
  -H, --displayhex      : display output in hex
  -z, --statline        : try to use terminal's status line
  -7, --7bit            : force 7bit mode
  -8, --8bit            : force 8bit mode
  -c, --color=on/off    : ANSI style color usage on or off
  -a, --attrib=on/off    : use reverse or highlight attributes on or off
  -t, --term=TERM        : override TERM environment variable
  -S, --script=SCRIPT    : run SCRIPT at startup
  -d, --dial=ENTRY      : dial ENTRY from the dialing directory
  -p, --ptty=TTYP        : connect to pseudo terminal
  -C, --capturefile=FILE : start capturing to FILE
  -F, --statlinefmt      : format of status line
  -R, --remotecharset    : character set of communication partner
  -v, --version          : output version information and exit
  -h, --help            : show help
  configuration          : configuration file to use
 
These options can also be specified in the MINICOM environment variable.
This variable is currently unset.
The configuration directory for the access file and the configurations
is compiled to /etc/minicom.
 
Report bugs to <minicom-devel@lists.alioth.debian.org>.
</syntaxhighlight>


=== PuTTY ===
=== PuTTY ===

Версия 10:33, 26 августа 2021

Linux

Реализация serial-портов

Полное описание читайте в документации, вот выжимка из неё:

  • В serial-порт можно посылать данные и получать данные из него.
  • В ОС Linux serial-порты — это псевдофайлы из папки /dev. Например, в контроллерах Wiren Board это могут быть /dev/ttyGSM, /dev/ttyRS485-1, /dev/ttyUSB0 — у всех в названии есть tty.

Перед началом работы с serial-портом, настройте его скорость и параметры так же как настроено подключённое к нему устройство:

  • Скорость в битах в секунду, самое популярное — 115200 бит/с.
  • Количество бит в символе, чётность и количество стоп-битов. Популярна конфигурация 8N1 — восемь бит в символе, без проверки чётности, один стоп-бит.
  • Аппаратный и программный контроль потока — если не уверены, то поставьте «Нет» в обоих параметрах.

Определение занятости порта и монопольное использование

Отключение serial-порта в веб-интерфейсе контроллера Wiren Board

Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся.

Используйте команду fuser для того, чтобы определить, свободен ли порт. В качестве параметра передайте порт, который нужно проверить.

Проверим, свободен ли порт /dev/ttyRS485-2. Для этого выполните команду:

fuser /dev/ttyRS485-1

Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт.

В контроллерах Wiren Board порты /dev/ttyRS485-1 и /dev/ttyRS485-2 обычно заняты драйвером wb-mqtt-serial. Перед работой с этими портами — остановите драйвер одним из способов:

Serial_tool

Пример работы с утилитой serial_tool

Serial_tool — утилита для отправки и получения наборов бит. Используйте её для отправки и получения данных в шестнадцатеричном формате: побитово, группами по четыре бита.

Утилита serial_tool предустановлена на все контроллеры Wiren Board. На компьютеры с Linux её нужно установить из нашего репозитория.

Для вызова справки по утилите, запустите утилиту с параметром -h:

~# serial_tool -h
usage: serial_tool [-h] [-b BAUD] [-p PARITY] [-d DATA_BITS] [-s STOP_BITS]
                   [-t READ_TIMEOUT]
                   port

serial_tool - interactive hex serial port console

positional arguments:
  port                  Serial port to open, i.e. /dev/ttyXXX

optional arguments:
  -h, --help            show this help message and exit
  -b BAUD, --baud BAUD  Baud rate (default: 9600)
  -p PARITY, --parity PARITY
                        set parity, one of [N, E, O, M, S] (default: N)
  -d DATA_BITS, --data-bits DATA_BITS
                        set number of data bits, i.e. bytesize (default: 8)
  -s STOP_BITS, --stop-bits STOP_BITS
                        set number of stop bits, one of [1, 1.5, 2] (default:
                        1)
  -t READ_TIMEOUT, --timeout READ_TIMEOUT
                        number of seconds to wait for answer (default: 1)

Например, запишем последовательность бит в порт /dev/ttyRS485-1 с параметрами порта 8N2 и таймаутом в одну секунду:

~# serial_tool -b 9600 -p N -d 8 -s 2 -t 1 /dev/ttyRS485-1 
serial_tool on /dev/ttyRS485-1: 9600 8N2.0
Enter your commands below in HEX form. 
All characters but 0-9,a-f including spaces are ignored.
Press Control-D or Control-C to leave the application.
Press [Enter] to print received data
>> FF FF 0A 01 11 00 00 1C
<< FF FF 0A 00 11 00 00 1B

Другие примеры использования утилиты можно посмотреть в статьях о настройке приводов штор, например, Akko AM82.

Об использовании Minicom для подключения к serial-порту читайте в статье Minicom.

PuTTY

Об использовании PuTTY для подключения к serial-порту читайте в статье PuTTY.

Протокол Modbus RTU

Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты modbus_client.

Собственное ПО

Если вы пишете скрипт или свою программу для работы с serial-портом, то руководствуйтесь советами из Serial-Programming-HOWTO.

Windows

Для подключения к serial-порту в ОС Windows используйте PuTTY.

macOS

В macOS используйте:

  • PuTTY for Mac OS X
  • терминальный клиент cu:
    cu -s 115200 -l /dev/usbmodem00001
    

Android

На устройствах с Android можете использовать USB Serial Console и другие аналогичные программы.

Прочие программы

Если по каким-то причинам вы не можете использовать программы из этой статьи — посмотрите этот список программ.