Для работой с cisco по com-порту удобно пользоваться PuTTY, но необходимо дать права на пользование.
По умолчанию к устройствам /dev/tty* имеют доступ пользователи из группы «dialout». Посмотреть:
ls -al /dev/ttyS0
ответ
crw-rw---- 1 root dialout 4, 64 мая 5 07:42 /dev/ttyS0
можно увидеть, что доступ открыт для группы dialout
нужно добавить себя в эту группу:
sudo adduser dialout
Перезагрузится.
случай сложнее, используется контроллер
Serial controller: MosChip Semiconductor Technology Ltd. PCI 9865 Multi-I/O Controller
usermod -a -G plugdev,dialout NameUser
id NameUser
lspci -v
lspci -nn
lspci -xvv
sudo dmidecode
dmesg | grep tty
sudo apt install setserial
setserial /dev/ttyS0 -a
setserial /dev/ttyS4 -a
setserial /dev/ttyS5 -a
stty -g -F /dev/ttyS0
stty -g -F /dev/ttyS4
stty -g -F /dev/ttyS5
stty -a < /dev/ttyS0
stty -a < /dev/ttyS4
stty -a < /dev/ttyS5
Стандартная скорость, бит/сек: 50,75,110,150,300,600,1200,1800,2000,2400,3600,4800,7200,9600,14400,19200,28800,38400,57600,115200
Проверка COM порта под linuxУстановка minicom и подключение по консольному порту к коммутаторуПрограммирование COM порта сканер штрихкодов
Silicon Labs CIPHERLAB 308 USB-to-RS232
https://forum.ubuntu.ru/index.php?topic=11431.0 lsusb -v
setserial -g /dev/ttyS*
sudo modprobe usbkbd
/dev/ttyUSB0
screen /dev/ttyUSB0 115200
screen -S session_name -X at window_number stuff ^C
screen -S session_name -X at window_number stuff $'\003'
screen -S session_name -X -p window_number stuff $'\003'
stty -a
lsof /dev/ttyUSB0
picocom --baud 115200 --flow n /dev/ttyUSB0
minicom -l -8 -c on
minicom -l -8 -c on -b 115200 -D /dev/ttyUSB0
http://ru.cipherlab.com/document.asp?id=1450 дисплей покупателя
Вывод информации на дисплей покупателяПрограмируем символы валют для дисплея покупателяhttps://www.ascii-codes.com/cp866.htmlhttp://docs.artix.su/display/ArtixDoc46/Epson настройка дисплея
обязательно разрешить переключение кодовой страницы
Дисплей покупателя: Epson
Параметры подключения:
порт: /dev/ttyS1
Кодовая страница: cp866
Переключать кодовую страницу: вкл
Ширина строк: 20
Задержка сообщений: 0
Для начала работы инициализируем дисплей покупателя очистив память и экран индикации командой ESC @:
$ echo -n -e \\x1B\\x40 > /dev/ttyUSB0
стандартная проверка:
$ echo -n -e Hello, world!\\n > /dev/ttyUSB0
Отображение
Для индикации в дисплеях покупателя используется VFD или LCD панель обычно содержащая 2-е строки по 20 символов. Каждый символ в зависимости от модели дисплея может состоят из матрицы от 5*7 до 8*8 точек. Для данного примера используется дисплей с размером символа 5 точек по горизонтали и 7 точек по вертикали.
Символы закодированы в ПЗУ дисплея и доступны для вывода в диапазоне от 0x20 до 0xFF байта. И если диапазон от 0x20 до 0x7F, это стандартная кодовая страница ANSI, то диапазон от 0x80 до 0xFF выделен для дополнительных кодовых страниц, например кириллицы. Для переключения кодовых страниц используется команда ESC t n, где n, это номер кодовой страницы. Пример:
$ echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0
$ echo -n -e \\x87\\xA4\\xE0\\xA0\\xA2\\xE1\\xE2\\xA2\\xE3\\xA9\\x2C\\x20\\x95\\xA0\\xA1\\xE0\\x21\\n > /dev/ttyUSB0
для замены символы доллара(код 0x26 в таблице символов нашего дисплея) на символ тенге с таким-же кодом, нам понадобится ESC/POS команда следующего вида:
$ echo -n -e \\x1b\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5f\\x50\\x50 > /dev/ttyUSB0
Включаем загруженные символы командой ESC % n, где значение n единица или ноль в зависимости от того, включены или нет загруженные символы:
$ echo -n -e \\x1b\\x25\\x01 > /dev/ttyUSB0
Проверяем работу:
$ echo -n -e 1500$ > /dev/ttyUSB0
Программирование
Теперь осталось сделать автоматическим при подключении инициализацию кириллицы и загрузку символа тенге. Для этого нам необходимо установить для udev правила автоматического запуска bash-скрипта при подключение дисплея покупателя к Raspberry Pi. Командой udevadm узнаём код вендора и модели нашего дисплея.
$ udevadm info -q all -n /dev/ttyUSB0 | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
E: ID_MODEL_ID=2303
E: ID_VENDOR_ID=067b
Создаём правила 90-init-vfd-display.rules:
$ sudo nano /etc/udev/rules.d/90-init-vfd-display.rules
, следующего содержания:
ACTION=="add", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", RUN+="/usr/local/bin/init-vfd-display.sh"
и скрипт:
$ sudo nano /usr/local/bin/init-vfd-display.sh
#!/bin/bash
sleep 20
echo -n -e \\x1B\\x40 > /dev/ttyUSB0
echo -n -e \\x1B\\x74\\x07 > /dev/ttyUSB0
echo -n -e \\x1B\\x26\\x01\\x24\\x24\\x05\\x50\\x50\\x5F\\x50\\x50 > /dev/ttyUSB0
sleep 3
Делаем исполняемым bash-скрипт и активируем наши правила:
$ sudo chmod +x /usr/local/bin/init-vfd-display.sh
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger --action=add
$ sudo service udev restart
Пробуем одновременно использовать символ доллара и тенге переключая их поочерёдно.
$ echo -n -e 1$ =\\x1B\\x25\\x01 181,95$ \\x1B\\x25\\x00 > /dev/ttyUSB0
####################################################################################
Для корректной работы с ДП установим скорость передачи данных:
stty -F /dev/ttyUSB0 9600
Для очистки экрана дисплея выполним команду:
echo -e -n "\x0c\x0b" > /dev/ttyUSB0
echo - команда вывода в терминал. Опция -e - включает поддержку вывода escape-последовательностей, -n - указывает, что не надо выводить перевод строки. Допускается запись -en.
0с - очистка экрана дисплея и отмена строчного режима, 0b - перемещает курсор в верхнюю крайнюю левую позицию. Символ > - управление потоком (перенаправляет вывод). В данном случае в файл /dev/ttyUSB0 нашего устройства
команду изменяющую скорость для передачи данных на устройство можно было записать и так:
stty 9600 < /dev/ttyUSB0
Ну и для вывода сообщений на русском языке выполним:
echo -n "Привет!" | iconv -f UTF-8 -t CP866 > /dev/ttyUSB0
| - перенаправляет вывод одной команды на вход другой (конвейер). В нашем случае последовательность символов "Привет!" не выводится в файл устройства сразу, а передаётся на "конвертирование" утилите iconv. iconv - преобразует из одной кодировки в другую.
Работа с СОМ-портом на Си в linuxНеизвестный UART: теория