Последовательная связь из JavaScript?

Можно ли общаться через последовательный порт машины через JavaScript?

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


person Nick Heiner    schedule 12.04.2011    source источник


Ответы (6)


Сам JavaScript не имеет встроенных функций, позволяющих получить доступ к последовательному порту. Тем не менее, различные движки JavaScript (v8, rhino и т. д.) позволяют вам писать свои собственные нативные объекты.

Возможно, вы захотите проверить node.js, библиотеку JavaScript для версии 8, ориентированную на написание кода на стороне сервера (а не кода клиента веб-браузера). Кажется, кто-то уже написал для этого пакет serialport:

https://github.com/voodootikigod/node-serialport

person Jason LeBrun    schedule 12.04.2011
comment
Но почему мы можем получить доступ к обычной веб-камере без «серверного кода»? - person Buzz; 03.01.2018
comment
@Buzz, вероятно, из-за API-интерфейсов, предоставляемых современными веб-браузерами, например. WebUSB и Захват мультимедиа и потоки. См. whatwebcando.today, где можно найти несколько интересных примеров. Это не особенности самого языка программирования (JavaScript), а скорее среда, в которой он выполняется. - person jacobq; 25.06.2019

Это старый вопрос, но на случай, если это поможет кому-то еще, у приложений Chrome есть доступ к серийному API — http://developer.chrome.com/apps/serial.html — может помочь.

Это специфично для Chrome (очевидно ..), но Chrome доступен для разных платформ, поэтому может ответить на вопрос.

person Mark    schedule 11.11.2013
comment
Я думаю, что это специфично для Chrome OS, не работает в Chrome (браузере). - person Zyo; 31.07.2019

Существует кроссплатформенный плагин для связи через последовательный порт, который называется jUART.

person Bill    schedule 22.03.2014

Да, можно использовать ActiveX (я это сделал). Вы можете создать ActiveX и использовать JavaScript для его вызова. При желании вы можете создать .net dll и зарегистрировать ее с помощью regasm. Взгляните на эту ссылку.

Вы также можете написать ActiveX с помощью VB6 и зарегистрировать его. Оба работают нормально. Ps.: если вы используете ActiveX, код JavaScript будет работать только в IE.

person Vismari    schedule 12.04.2011
comment
Я написал небольшой код для отправки/получения информации на/с модема с GSM-чипом. - person Vismari; 13.04.2011
comment
На самом деле это не использование JS — вы используете JS для вызова методов компонента ActiveX. - person Demian Brecht; 13.04.2011
comment
Это работает нормально. JavaScript создает интерфейс между браузером и COM (в Internet Explorer). Я написал код для получения ICCID чипа GSM через веб-сайт. - person Vismari; 13.04.2011
comment
кроссплатформенная совместимость, что исключает возможность использования ActiveX. Кроме того, ActiveX не является javascript и не добавляет объект javascript для доступа к последовательному порту. - person Justin808; 13.04.2011
comment
@Vismari Дело не в этом. Вопрос заключался в том, возможно ли это через JS, чего изначально не было. - person Demian Brecht; 13.04.2011
comment
Очевидно изначально это невозможно. Но если вам нужно установить связь с последовательным портом в среде клиент/сервер, вы можете использовать ActiveX + JavaScript (IE) для этого. - person Vismari; 13.04.2011

Если у вас есть библиотека DLL (к ней относится, например, большинство API-интерфейсов Windows), которая позволяет вам обмениваться данными через последовательный порт, вы можете вызвать ее из кода Firefox Chrome (или кода контента с привилегиями universalxpconnect), используя ctypes.

person CAFxX    schedule 12.04.2011

Что вы можете сделать, так это использовать апплет Java, который подключается к приложению Java локального компьютера, которое считывает последовательный порт. Затем апплет передает данные в класс JavaScript или во что-то, что может хранить информацию. Затем для доступа к данным можно использовать дополнительный код JavaScript. Это сложное решение, но оно должно работать.

Другой способ — создать службу POJO.

person Jubert    schedule 01.06.2012
comment
Для этого есть несколько библиотек: бесплатная rxtx и платная serialio. - person JKirchartz; 20.10.2012