2011-05-17 6 views
12

J'ai regardé autour d'une réponse sur cette ...nodejs - lecture du port série

Fondamentalement, je veux lire les données du port série (dans ce cas, sur USB). J'ai regardé dans le module node-serialport mais il continue de décrocher après le premier résultat du port série. Je m'attendais à juste cracher les données quand il l'a reçu. C'est comme si un tampon se remplissait et devait être rincé d'une manière ou d'une autre?

J'ai légèrement modifié le code des démos que je trouve ici - https://github.com/voodootikigod/node-serialport/tree/master/tests

Voici mon code:

var sys = require("sys"), 
    repl = require("repl"), 
    serialPort = require("serialport").SerialPort; 

    // Create new serialport pointer 
    var serial = new serialPort("/dev/tty.usbmodem1d11" , { baudrate : 9600 }); 

    // Add data read event listener 
    serial.on("data", function(chunk) { 
     sys.puts(chunk); 
    }); 


    serial.on("error", function(msg) { 
     sys.puts("error: " + msg); 
    }); 

    repl.start("=>"); 

J'utilise un Arduino donc la 9600 baudrate.

Toute aide serait génial, acclamations,

James

+0

Vous avez oublié un 'var' en face de' serial'! Avez-vous essayé d'ajouter un des analyseurs? – Raynos

+0

Merci, je viens d'ajouter cela. J'ai essayé l'autre analyseur (pour les nouvelles lignes) et cela ne semble pas faire l'affaire non plus. – James

+0

@James il existe également une option de taille de tampon dans le constructeur. Essayez de pomper comme ça! (Par défaut à 255). – Raynos

Répondre

7

Je problèmes rencontrés aussi avec le port série lu. Ceci est dû à un bogue dans node.js v4.7 (voir this issue)

Cependant, cela a fonctionné après le passage à une ancienne version de Node.js (v4.0).

Il pourrait aussi fonctionner avec des versions jusqu'à la version 4.0, mais je ne l'ai pas encore vérifié.

+0

Impressionnant , merci pour cela, je vais donner une version ancienne – James

+1

Ok, j'ai corrigé ceci en mettant à jour mes pilotes FTDI USB Serial à 2.2.16 et en mettant à jour le noeud à 0.5.0-pre :) – James

23

Auteur de node-serialport. J'ai repéré le problème et cela est dû à un problème de compilation avec IOWatcher dans node.js. J'ai révisé la stratégie de lecture du port série et il devrait maintenant fonctionner comme prévu dans tous les cas. Veuillez vous assurer que vous utilisez node-serialport 0.2.6 et supérieur.

Maintenant, sortez et construisez des robots commandés par JS !!!

+0

Aussi, vous ne le faites pas besoin d'un repl - le port série gardera la boucle d'événement ouverte jusqu'à ce que vous le fermiez. – voodootikigod

+0

Génial, à bientôt voodootikigod :) – James