Pull to refresh

Как из браузера отправлять команды в COM порт?

Reading time3 min
Views12K

Столкнулся на днях с очень интересной задачей, на работе, мною же, внедрялась Система Быстрых Платежей по QR коду.

Задача не сложная, у банков представлены достаточно удобные API для интеграций и собственно первый этап интеграции, с самописной CRM системой, работающей на web сервере – прошел гладко и быстро.

Работая в браузере можно было легко сформировать QR код и отправить его клиенту для последующей оплаты или показать в окошке на новой вкладке, как удобно…

Но как оказалось это не слишком удобно и есть специальные девайсы – дисплеи для вывода именно QR кода.

Собственно, не раздумывая был заказан один такой дисплей для интеграции в CRM и упрощения действий для менеджеров, ну и конечно же большего удобства клиентов.

Буквально через 3 дня курьер принес посылку с заказанным дисплеем (в интернете не так много контор которые предлагают подобное решение) и вот этот чудо девайс на рабочем столе.

Далее при распаковке посылки оказалось, что кроме самого дисплея и пупырки в которую он был упакован, больше ничего не было, от слова совсем, ни драйверов, ни инструкций, ничего, даже гарантийного талона, только талон на доставку…

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

Нужный драйвер был найден на Github (STM32 Virtual COM Port Driver)

А дальше в папочке лежал текстовый файл с примером команд и программка (Terminal v1.9b by Bray) для проверки что сие чудо работает.

На законный вопрос о существовании какого-либо API или приложения для интеграции был следующий ответ:

Достаточно странный ответ для компании, которая продает не запчасти для последующего самостоятельного сбора, а готовый продукт, продает, по сути, полурабочий девайс, вокруг которого нужны еще танцы с бубном чтобы он заработал. Хотя еще более интересно посмотреть на «ПО которое будет работать с банками с внешним API» …

Но делать нечего, надо как-то интегрировать, что-то придумывать.

Набор команд у девайса не большой:

[Q]Вывод QR кода

[QL]Вывод QR кода с логотипом

[CQ]Стирание QR кода с экрана

[CQL]Стирание QR кода с экрана без стирания логотипа

[T1]Вывод текста в верхней зоне экрана над QR кодом

[T2]Вывод текста в нижней зоне экрана под QR кодом

[OFF]Выключение экрана

Поддерживает UTF-8, команда должна завершаться переводом строки.

После изучения списка команд, тестового формирования QR кода, начались поиски каких-либо решений на просторе интернета.

Основная сложность заключалась в том, что девайс подключен к компьютеру по USB, а менеджеры работают в CRM системе через браузер. И как организовать связь между ними сходу мыслей не было.

На хабре нашел статью про возможность подключения к COM порту у браузера Chrome, но в последствии оказалось, что там есть возможность только читать с COM порта, а тут задача именно отправлять команды.

В общем и целом, интеграция зашла в тупик, не понятно, что делать и с какой стороны подходить.

К счастью, в голове вовремя проскользнула мысль про XMLHttpRequest и кроссдоменную работу.

Быстро была сверстана страничка для теста, на компьютере включен XAMPP и простенький PHP код который должен был получать POST запрос с параметрами, после чего создавался текстовый файл и уже после этого PHP запускал BAT файл который посылал команду в COM порт.

На удивление все сработало, на дисплее появилось заветное сообщение!

На самом деле на этом можно было бы и остановиться, на каждой машине тихонечко поднять локальный сервер XAMPP, добавить в автозагрузку службы и в принципе все бы работало, но внутренняя тяга к максимальному удобству заставила подумать еще чуть-чуть и найти более красивое решение.

К сожалению, последний раз с программированием именно для windows я сталкивался больше 15 лет назад, поэтому пришлось читать и вспоминать самые азы, благо не все забыто и вспомнить получилось.

Приложение, выполняет те же функции, как и сервер XAMPP – просто слушает на локальном хосте 80 порт, создается небольшой сервер, но уже без всяких BAT файлов отправляет нужные команды в COM порт, дисплей работает…

Конечно, там еще есть очень много к чему приложить руки, но данное решение лично мне нравится гораздо больше, оно более лаконично.

Если вдруг кто-то знает еще варианты как решить проблему интеграции браузера и COM порта, напишите пожалуйста, буду благодарен.

Tags:
Hubs:
Total votes 6: ↑3 and ↓30
Comments43

Articles