|
|
(не показано 45 промежуточных версий 5 участников) |
Строка 1: |
Строка 1: |
| <languages/> | | {{DISPLAYTITLE: Работа с последовательным портом (serial-портом)}} |
| <translate> | | == Serial-порты в контроллере Wiren Board == |
| | === Реализация === |
| | Полное описание читайте в [http://www.tldp.org/HOWTO/Serial-HOWTO.html документации], вот выжимка из неё: |
| | * В serial-порт можно посылать данные и получать данные из него. |
| | * В ОС Linux serial-порты — это псевдофайлы из папки <code>/dev</code>. Например, в контроллерах Wiren Board это могут быть <code>/dev/ttyGSM</code>, <code>/dev/ttyRS485-1</code>, <code>/dev/ttyUSB0</code> — у всех в названии есть <code>tty</code>. |
|
| |
|
| == Последовательные порты и их реализация в Linux == <!--T:1-->
| | Перед началом работы с serial-портом, настройте его скорость и параметры так же как настроено подключённое к нему устройство: |
| | * Скорость в битах в секунду, самое популярное — 9600 бит/с. |
| | * Количество бит в символе, чётность и количество стоп-битов. Популярна конфигурация 8N1 — восемь бит в символе, без проверки чётности, один стоп-бит. |
| | * Аппаратный и программный контроль потока — если не уверены, то поставьте «Нет» в обоих параметрах. |
|
| |
|
| <!--T:2-->
| | === Определение занятости порта и монопольное использование === |
| Монументальное описание последовательных портов - http://www.tldp.org/HOWTO/Serial-HOWTO.html. Краткий неточный пересказ:
| | [[Image: Enable-disable serial port.png |300px|thumb|right| Отключение serial-порта в веб-интерфейсе контроллера Wiren Board ]] |
| * в последовательный порт можно посылать данные и получать оттуда данные;
| | Обычно, работать с serial-портом может только один процесс. Если порт «занят», то попытка передать или получить через него данные не удастся. |
| * в Linux последовательные порты представлены в виде псевдофайлов из папки ''/dev/'', например, в Wiren Board это могут быть ''/dev/ttyAPP0'', ''/dev/ttyNSC1'', ''/dev/ttyUSB0'' (у всех в названии есть ''tty'').
| |
|
| |
|
| <!--T:5-->
| | Используйте команду fuser для того, чтобы определить, свободен ли порт. В качестве параметра передайте порт, который нужно проверить. |
| Перед тем, как начать работать с портом, надо настроить его скорость и другие параметры в зависимости от того, какое устройство к нему подключено:
| |
| * скорость в битах в секунду. Самое популярное значение 115200;
| |
| * количество бит в символе, чётность, количество стоп-битов. Самая популярная конфигурация называется ''8N1'' - восемь бит в символе, проверки чётности нет, один стоп-бит;
| |
| * аппаратный и программный контроль потока. Если не знаете, поставьте "нет" в обоих настройках.
| |
|
| |
|
| == serial_tool - утилита для отправки и получения наборов бит == <!--T:6-->
| | Проверим, свободен ли порт <code> /dev/ttyRS485-2</code>. Для этого выполните команду: |
| | | <syntaxhighlight lang="console"> |
| <!--T:7--> | | # fuser -v /dev/ttyRS485-1 |
| Чтобы отправлять и получать данные в шестнадцатеричном формате (то есть фактически побитово, группами по четыре бита), используйте утилиту [https://github.com/contactless/serial_tool serial_tool]. Она предустановлена на контроллерах Wiren Board.
| | USER PID ACCESS COMMAND |
| | | /dev/ttyS2: root 32296 F.... wb-mqtt-serial |
| <!--T:9-->
| |
| <syntaxhighlight lang="bash"> | |
| root@wirenboard:~# 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> | | </syntaxhighlight> |
| | Если вывод пуст — порт свободен. Иначе будет выведен процесс, который занимает порт. В примере выше порт занят драйвером wb-mqtt-serial. |
|
| |
|
| Пример использования:<!--T:13-->
| | В контроллерах Wiren Board порты <code>/dev/ttyRS485-1</code> и <code>/dev/ttyRS485-2</code> обычно заняты драйвером <code>wb-mqtt-serial</code>. Перед работой с этими портами — остановите драйвер одним из способов: |
| | | * [[wb-mqtt-serial#Управление драйвером | Остановить драйвер]] из командной строки. |
| <!--T:14--> | | * [[RS-485:Configuration via Web Interface | В веб-интерфейсе контроллера]], в настройках serial-порта снять галочку '''Enable port''' и сохранить настройки. |
| <pre>
| |
| root@wirenboard:~# serial_tool -b 9600 -p N -d 8 -s 2 -t 1 /dev/ttyNSC1
| |
| serial_tool on /dev/ttyNSC1: 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 | |
| </pre>
| |
| Здесь установлены настройки 9600 8N2, таймаут 1 секунда, порт /dev/ttyNSC1 (RS-485).
| |
| | |
| == minicom - утилита для отправки и получения символьных команд == <!--T:15-->
| |
| | |
| <!--T:16--> | |
| Самая удобная утилита для работы с последовательным портом из консоли - '''minicom''' (есть в стандартном образе Wiren Board).
| |
| Minicom удобно пользоваться для работы с устройстами, которые управляются текстовыми командами или выводят текстовые сообщения. Примерами таких устройств являются GSM-модемы (управляются AT-командами), в том числе встроенный в Wiren Board GSM-модуль; GPS-модули, работающие по протоколу NMEA и т.п.
| |
| | |
| <!--T:17-->
| |
| Краткая инструкция (считаем, что мы будем работать с портом /dev/ttyAPP0):
| |
| * В первый раз запускаем '''minicom''' с ключом, создающим профиль работы с портом (в нём хранятся номер порта, скорость передачи данных, чётность, и т.д.):
| |
| <pre>
| |
| $ minicom -s /dev/ttyAPP0
| |
| </pre>
| |
| * Зайти в настройки (нажать ''Ctrl+A'', затем ''O''), выбрать пункт ''Serial port setup'', там установить порт ''/dev/ttyAPP0'', скорость и чётность - ''115200, 8N1'', ''Hardware flow control - No'', ''Software flow control - No''
| |
| * Сохранить настройки: ''Save setup as _dev_ttyAPP0''
| |
| * Далее запускать как:
| |
| <pre>
| |
| $ minicom /dev/ttyAPP0
| |
| </pre>
| |
| (все параметры будут сразу браться из профиля с названием ''/dev/ttyAPP0'', который мы ранее создали)
| |
| * Теперь можно вводить данные, которые вы хотите отправить в порт. Приходящие в порт данные от внешних устройств также будут выводиться
| |
| | |
| <!--T:18-->
| |
| ----
| |
| | |
| == modbus_client - утилита для работы с устройствами Modbus RTU и TCP == <!--T:19-->
| |
|
| |
|
| <!--T:20--> | | == Программы для работы с serial-портом == |
| Подробнее смотрите в статье [[Special:MyLanguage/modbus-client|modbus_client]].
| | Программы для разных ОС: |
| | * 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> |
| | * Android: [https://play.google.com/store/apps/details?id=jp.sugnakys.usbserialconsole&hl=en_US USB Serial Console] и другие аналогичные программы. |
|
| |
|
| == Работа с последовательным портом из своей программы == <!--T:21-->
| | Дополнительно: |
| | * Если вы не можете использовать программы из этой статьи — посмотрите [http://elinux.org/RPi_Serial_Connection этот список]. |
| | * Если serial-устройство поддерживает протокол Modbus RTU, то вы можете работать с ним с помощью утилиты [[modbus_client]]. |
| | * Вы пишете скрипт или свою программу для работы с serial-портом — руководствуйтесь советами из [https://tldp.org/HOWTO/Serial-Programming-HOWTO/ Serial-Programming-HOWTO]. |
|
| |
|
| <!--T:22--> | | <gallery mode="traditional" widths="250px" caption="Примеры работы с serial-портом в различных программах"> |
| http://tldp.org/HOWTO/Serial-Programming-HOWTO/
| | Image: Akko setting address.png |Отправка команд через [[serial_tool]] |
| </translate> | | Image: Minicom-AT-4G.png | Отправка AT-команд в программе [[minicom]] |
| | Image: Putty serial logged in.png | Работа с Debug-консолью в [[PuTTY]] |
| | </gallery> |