web-dev-qa-db-fra.com

Comment lire les données du port série à partir de JavaScript

J'ai connecté un Arduino à mon ordinateur portable via USB et je peux lire les données série à l'aide de Processing.

Existe-t-il un moyen d'obtenir ces données en temps réel dans un navigateur Web local? Par exemple, un champ de texte indiquant la valeur du port série? Il n'est pas nécessaire qu'il soit connecté à Internet.

La version JavaScript de Processing ne prend pas en charge le code suivant, ce qui aurait été la solution idéale.

Le code de traitement est:

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...
11
Kokodoko

Il n’existe aucun moyen d’accéder directement à la machine locale à partir du navigateur Web. Pour des raisons de sécurité, les navigateurs ont un accès très limité aux ressources de la machine.

Pour ce faire, une option serait d'écrire une extension pour le navigateur de votre choix. Même si les extensions ont aussi une variété de limitations.

La deuxième option consisterait à utiliser un serveur local pour fournir les fonctionnalités dont vous avez besoin. Personnellement, je recommande d'utiliser node.js (son poids léger, sa rapidité et sa facilité de mise en œuvre). Vous pouvez lire/écrire des données série en utilisant https://github.com/rwaldron/johnny-five (comme suggéré par @kmas) ou https://github.com/voodootikigod/node-serialport et que vous pouvez utiliser http://socket.io/ pour créer un service simple et vous y connecter via le navigateur. Socket.io utilise WebSockets dans les navigateurs modernes et fonctionne exceptionnellement bien pour les connexions en temps réel.

11
Tsanyo Tsanev

J'ai eu un problème similaire à résoudre. Mon système d’acquisition de données (DAQ) (comme votre arduino) relaie les données en HTTP, TCP, FTP, ainsi qu’en série. Je devais le capturer sur le serveur, puis l'envoyer à ma page Web en temps réel. 

Le hack que j'ai écrit utilise nodejs sur le serveur et connecte DAQ au serveur à l'aide de sockets TCP à l'aide du module "net" de nodejs. 

Le code et le contexte peuvent être trouvés dans " Comment obtenir les données du capteur via TCP/IP dans nodejs? ".

J'utilise TCP car je souhaitais transmettre des données sur une longue distance. Vous devez modifier le protocole de prise en série. 

Pour la redirection série vers TCP, vous pouvez utiliser bloom from sensorMonkey pour Windows ou leur croquis processing pour * nix/Mac OS.

1
Chintan Pathak