使用nodejs和socketio从arduino读取数据

时间:2013-04-24 17:09:21

标签: javascript node.js socket.io arduino

我有这个简单的代码,我在arduino中运行

char inp;
void setup(){
  Serial.begin(9600);
}

void loop(){
  while(Serial.available()>0){
    inp = Serial.read();
    Serial.print(inp);
  }
  Serial.print("--");
  delay(200);
}

所以它不断地写“ - ”如果我发送一些东西到arduino它回复那个

然后我有一个js文件

var strinInfo = "";
tempSerial.on("data", function(data) {
  console.log("data -> " + data);
  if (stringInfo.length < 37){
    stringInfo += data;
  }else{
    io.sockets.emit("message", stringInfo);
    stringInfo = ""
  }
});

通过套接字发送我从arduino获得的内容。 我的问题是,例如,如果我发送

"thisisanunusuallongandterriblestringofsymbolsblablablablablablabla"

缺少字符:

---------thisisanunusuallongandterribles, 
gofsymbolsblablablablabla--blabla ----, 
-------------------------------------,

在这个例子中我错过了“trin”。有没有办法不丢失这些角色?

我从节点开始,所以我的猜测是它发出消息的时间......那一刻的内容消失了,也许我错了。

2 个答案:

答案 0 :(得分:0)

查看您的代码,可能是一些事情。

  1. 你可能在听众准备好之前发送数据,上面的libs已经解决了。
  2. 以下一行让我担心if (stringInfo.length < 37){。如果您获得连续的小数据包,那么超过37的数据包将只打印stringInfo,但不会打印data部分。
  3. 连接到Arduino的Libs:

    • [Johnny Five][1]
    • [Firmata][2]

    两个程序都与Arduinos互动。 Firmata是低水平的,Johnny-Five跑在最前面。

答案 1 :(得分:0)

我认为这可能是baud-rate的问题。

如果您使用serialport模块与Arduino进行串行通信,则必须将serialport baud-rate设置为9600(与接收方相同,即Arduino)。

默认情况下,串口波特率为115200。