Работа с последовательным портом (serial-портом)

Материал из Wiren Board

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

Minicom — утилита для отправки и получения символьных команд. Её удобно использовать для работы с устройствами, которые управляются текстовыми командами и выводят текстовые сообщения в ответ. Например, c помощью minicom удобно отправлять AT-команды на GSM-модемы или получать данные с GPS-модулей, которые работают по протоколу NMEA.

Утилита minicom предустановлена на все контроллеры Wiren Board, а на ПК с ОС Linux её нужно будет установить. Для установки minicom на ПК с ОС Linux, выполните поочереди команды:

sudo apt update
sudo apt install minicom

Для запуска minicom нужны права суперпользователя, на контроллерах Wiren Board вы уже работаете под суперпользователем, а на ПК с ОС Linux используйте sudo.

Настройка параметров подключения

Пример настройки параметров подключения в minicom
Отправка AT-комманд для модема в терминале программы minicom

Для настройки параметров подключения, запустите утилиту с ключом -s и укажите имя профиля, в который хотите сохранить настройки.

Например, настроим соединение с портом /dev/ttyGSM:

  1. Запустите minicom от имени суперпользователя в режиме настройки соединения и укажите имя профиля, например, ttyGSM:
    minicom -s ttyGSM
    
  2. В появившемся меню Configuration, выберите пункт Serial port setup.
  3. Теперь выберите нужные пункты нажатием соответствующих клавиш на клавиатуре, меняйте настройки и каждое изменение подтверждайте клавишей Enter:
    • A — введите имя serial-порта: /dev/ttyGSM.
    • E — откроется окно Comm Parameters, в котором нужно указать:
    1. Скорость соединения, секция Speed — выберите E — 115200.
    2. Количество битов данных, секция Data — выберите V — 8 бит.
    3. Бит чётности, секция Parity — выберите L — None.
    4. Количество стоповых битов, секция Stopbits — выберите W — 1 стоп-бит.
    • Hardware flow control (аппаратный контроль потока) — клавиша F переключает состояние, выберите No.
    • Software flow control (программный контроль потока) — клавиша G переключает состояние, выберите No.
  4. Выйдете из настроек порта в главное меню, для этого нажмите на клавиатуре клавишу Enter.
  5. Сохраните настройки в профиль, для этого выберите Save Setup as ttyGSM.
  6. Закройте minicom, для этого выберите в меню пункт Exit from Minicom.

Запуск с сохранёнными настройками

В предыдущем пункте мы создали профиль настроек, теперь мы можем запустить minicom с этим профилем:

~# 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

Чтобы отправить команды serial-устройству — вводите их в терминале и нажимайте клавишу Enter.

Для вызова справки зажмите одновременно клавиши Ctrl+A, а затем клавишу A.

Чтобы выйти из minicom — нажмите одновременно клавиши Ctrl+A, а затем клавишу X.

Запуск утилиты без профиля

Если вам нужно один раз соединиться с serial-устройством, то вы можете не создавать профиль, а указать параметры подключения прямо в аргументах командной строки.

Например, для соединения с модемом, который подключен к порту /dev/ttyGSM нужно ввести команду:

minicom -D /dev/ttyGSM -b 115200 -8 -a off
Расшифровка параметров
Аргумент Значение Описание
-D /dev/ttyGSM Порт, к которому подключено serial-устройство
-b 115200 Скорость порта, в бит/с
-8 8 Количество битов данных
-a off Контроль потока данных
Остальные параметры оставлены по умолчанию

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

~# 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>.

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 и другие аналогичные программы.

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

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