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

Материал из Wiren Board
 
(не показано 15 промежуточных версий 2 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: Работа с последовательным портом (serial-портом)}}
{{DISPLAYTITLE: Работа с последовательным портом (serial-портом)}}
== Linux ==
== Serial-порты в контроллере Wiren Board ==
=== Реализация serial-портов ===
=== Реализация ===
Полное описание читайте в [http://www.tldp.org/HOWTO/Serial-HOWTO.html документации], вот выжимка из неё:
Полное описание читайте в [http://www.tldp.org/HOWTO/Serial-HOWTO.html документации], вот выжимка из неё:
* В serial-порт можно посылать данные и получать данные из него.
* В serial-порт можно посылать данные и получать данные из него.
Строка 7: Строка 7:


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


=== Определение занятости порта и монопольное использование ===
=== Определение занятости порта и монопольное использование ===
[[Image: Enable-disable serial port.png |500px|thumb|right| Отключение serial-порта в веб-интерфейсе контроллера Wiren Board ]]
[[Image: Enable-disable serial port.png |300px|thumb|right| Отключение serial-порта в веб-интерфейсе контроллера Wiren Board ]]
 
Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся.
Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся.


Строка 19: Строка 18:


Проверим, свободен ли порт <code> /dev/ttyRS485-2</code>. Для этого выполните команду:
Проверим, свободен ли порт <code> /dev/ttyRS485-2</code>. Для этого выполните команду:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
fuser /dev/ttyRS485-1
# fuser -v /dev/ttyRS485-1
</syntaxhighlight>
                    USER        PID ACCESS COMMAND
Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт.
/dev/ttyS2:         root      32296 F.... wb-mqtt-serial
 
В контроллерах Wiren Board порты <code>/dev/ttyRS485-1</code> и <code>/dev/ttyRS485-2</code> обычно заняты драйвером <code>wb-mqtt-serial</code>. Перед работой с этими портами — остановите драйвер.
 
Драйвер можно остановить одним из способов:
* [[wb-mqtt-serial#Управление драйвером | Остановите драйвер]] из командной строки.
* [[RS-485:Configuration via Web Interface | В веб-интерфейсе контроллера]], в настройках serial-порта снимите галочку «Enable port» и сохраните настройки.
 
=== Serial_tool ===
[[Image: Akko setting address.png |500px|thumb|right| Пример работы с утилитой serial_tool ]]
 
Serial_tool — утилита для отправки и получения наборов бит. Используйте её для отправки и получения данных в шестнадцатеричном формате: побитово, группами по четыре бита.
 
Утилита serial_tool предустановлена на все контроллеры Wiren Board. На компьютеры с Linux её нужно установить из [https://github.com/wirenboard/serial_tool нашего репозитория].
 
Для вызова справки по утилите, запустите утилиту с параметром <code>-h</code>:
<syntaxhighlight lang="bash">
~# 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)
</syntaxhighlight>
 
Например, запишем последовательность бит в порт /dev/ttyRS485-1 с параметрами порта 8N2 и таймаутом в одну секунду:
<syntaxhighlight lang="bash">
~# 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
</syntaxhighlight>
 
Другие примеры использования утилиты смотрите в статьях о настройке приводов штор, например, [[Akko AM82]].
 
=== 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>
</syntaxhighlight>
Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт. В примере выше порт занят драйвером wb-mqtt-serial.


Чтобы отправить команды serial-устройству — вводите их в терминале и нажимайте клавишу <kbd>Enter</kbd>.
В контроллерах Wiren Board порты <code>/dev/ttyRS485-1</code> и <code>/dev/ttyRS485-2</code> обычно заняты драйвером <code>wb-mqtt-serial</code>. Перед работой с этими портами — остановите драйвер одним из способов:
* [[wb-mqtt-serial#Управление драйвером | Остановить драйвер]] из командной строки.
* [[RS-485:Configuration via Web Interface | В веб-интерфейсе контроллера]], в настройках serial-порта снять галочку '''Enable port''' и сохранить настройки.


Для вызова справки зажмите одновременно клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, а затем клавишу <kbd>A</kbd>.
== Программы для работы с serial-портом ==
 
Программы для разных ОС:
Чтобы выйти из minicom — нажмите одновременно клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, а затем клавишу <kbd>X</kbd>.
* Linux: [[Serial_tool | Serial_tool]], [[Minicom | Minicom]], [[PuTTY | PuTTY]].
 
* Windows: [[PuTTY | PuTTY]].
==== Запуск утилиты без профиля ====
* macOS: [https://www.ssh.com/ssh/putty/mac/ PuTTY for Mac OS X] или терминальный клиент <code>cu</code>: <code>cu -s 115200 -l /dev/usbmodem00001</code>
Если вам нужно один раз соединиться с serial-устройством, то вы можете не создавать профиль, а указать параметры подключения прямо в аргументах командной строки.
* Android: [https://play.google.com/store/apps/details?id=jp.sugnakys.usbserialconsole&hl=en_US USB Serial Console] и другие аналогичные программы.
 
Например, для соединения с модемом, который подключен к порту /dev/ttyGSM нужно ввести команду:
<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 для подключения к serial-порту читайте в [[PuTTY | статье PuTTY]].
 
=== Протокол Modbus RTU ===
Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты [[modbus_client]].
 
=== Собственное ПО ===
Если вы пишете скрипт или свою программу для работы с serial-портом, то руководствуйтесь советами из [https://tldp.org/HOWTO/Serial-Programming-HOWTO/ Serial-Programming-HOWTO].
 
== Windows ==
Для подключения к serial-порту в ОС Windows используйте [[PuTTY | PuTTY]].
 
== macOS ==
В macOS используйте:
* [https://www.ssh.com/ssh/putty/mac/ PuTTY for Mac OS X]
* терминальный клиент <code>cu</code>:
*: <syntaxhighlight lang="bash">
cu -s 115200 -l /dev/usbmodem00001
</syntaxhighlight>


== Android ==
Дополнительно:
На устройствах с Android можете использовать [https://play.google.com/store/apps/details?id=jp.sugnakys.usbserialconsole&hl=en_US USB Serial Console] и другие аналогичные программы.
* Если вы не можете использовать программы из этой статьи — посмотрите [http://elinux.org/RPi_Serial_Connection этот список].
* Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты [[modbus_client]].
* Вы пишете скрипт или свою программу для работы с serial-портом — руководствуйтесь советами из [https://tldp.org/HOWTO/Serial-Programming-HOWTO/ Serial-Programming-HOWTO].


== Прочие программы ==
<gallery mode="traditional" widths="250px"  caption="Примеры работы с serial-портом в различных программах">
Если по каким-то причинам вы не можете использовать программы из этой статьи — посмотрите [http://elinux.org/RPi_Serial_Connection этот список программ].
Image: Akko setting address.png |Отправка команд через [[serial_tool]]
Image: Minicom-AT-4G.png | Отправка AT-команд в программе [[minicom]]
Image: Putty serial logged in.png | Работа с Debug-консолью в [[PuTTY]]
</gallery>

Текущая версия на 08:30, 13 апреля 2023

Serial-порты в контроллере Wiren Board

Реализация

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

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

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

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

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

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

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

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

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

# fuser -v /dev/ttyRS485-1
                     USER        PID ACCESS COMMAND
/dev/ttyS2:          root      32296 F.... wb-mqtt-serial

Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт. В примере выше порт занят драйвером wb-mqtt-serial.

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

Программы для работы с serial-портом

Программы для разных ОС:

Дополнительно:

  • Если вы не можете использовать программы из этой статьи — посмотрите этот список.
  • Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты modbus_client.
  • Вы пишете скрипт или свою программу для работы с serial-портом — руководствуйтесь советами из Serial-Programming-HOWTO.