Как читать данные из COM порта из JavaScript

Я подключил Arduino к ноутбуку с помощью USB, и я могу читать последовательные данные с помощью обработки.

есть ли способ получить эти данные в режиме реального времени в браузере? Например, текстовое поле, которое показывает значение из последовательного порта? Он не должен быть подключен к интернету.

версия обработки JavaScript не поддерживает следующий код, который был бы идеальным решением.

код обработки есть:

myPort = new Serial(this, Serial.list()[0], 9600);
// read a byte from the serial port
int inByte = myPort.read();
// print it
println(inByte);
// now send this value somewhere...?
// ehm...

2 ответов


нет возможности получить прямой доступ к локальной машине из веб-браузера. По соображениям безопасности браузеры имеют очень ограниченный доступ к ресурсам компьютеров.

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

второй вариант - использовать локальный сервер для обеспечения необходимой функциональности. Лично я рекомендую использовать узел.js (это легкий вес, быстро и легко приводить в исполнение.) Вы можете чтения/записи последовательных данных с помощью https://github.com/rwaldron/johnny-five (как @КМА предложил) или https://github.com/voodootikigod/node-serialport и чем вы можете использовать http://socket.io/ создать простой сервис и подключиться к нему, хотя браузер. Гнездо.Ио использует WebSockets в современных браузерах и работает excepionally также в режиме реального времени связи.


У меня была похожая проблема. Моя система сбора данных (DAQ) (как и ваш arduino) передает данные в HTTP, TCP, FTP, а также последовательный. Я должен был захватить его на сервере, а затем отправить его на мою веб-страницу в режиме реального времени.

хак, который я написал, использует nodejs на сервере и подключает DAQ к серверу с помощью сокетов TCP с помощью модуля "net" nodejs и подключает сервер к HTML-странице с помощью сокета.Ио.

код и контекст можно найти в "как получить данные датчика по TCP / IP в nodejs?".

Я использую TCP, поскольку я хотел передать данные на большое расстояние. Вам нужно изменить протокол сокета на последовательный.

для перенаправления serial-to-TCP вы можете использовать bloom из sensorMonkey для Windows или их обработка эскиза для *nix / Mac OS.