用nodejs和socketio从arduino读取数据

Reading data from arduino with nodejs and socketio

本文关键字:arduino 读取 数据 socketio nodejs      更新时间:2023-09-26

我有这个简单的代码,我运行在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 = ""
  }
});

通过socket发送我从arduino得到的东西。我的问题是,例如,如果我发送

"thisisanunusuallongandterriblestringofsymbolsblablablablablablabla"

缺少字符:

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

在这个例子中,我缺少"trin"。有没有一种不失去这些角色的方法?

我从node开始,所以我的猜测是,在它发出消息的时间之间…从那一刻起的内容就消失了,也许我错了。

查看您的代码,它可能是两件事。

  1. 您可能在侦听器准备好之前发送数据,下面的代码库已经解决了这个问题。
  2. 下面这行让我担心if (stringInfo.length < 37){。如果您获得连续的小数据包,则使您超过37的数据包将只打印stringInfo而不打印data部分。

连接到Arduino的lib:

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

两个程序都与Arduinos交互。Firmata是低级别的,johnny - 5在上面运行。

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

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

串口波特率默认为115200。