2017-06-03 259 views
2

當第一次從到的NodeJS的Arduino發送的號碼,我看到這個錯誤:node.js <->帶串口的arduino。錯誤資源暫時不可用無法鎖定端口

Error Resource temporarily unavailable Cannot lock port 

我使用Linux。

我更新了一些值(在網絡服務器)和串口捕獲值, ,所以我可以看到在Arduino串行監視器中的值。

但是,當我再次更新一些值後,它會導致錯誤。

這是代碼的NodeJS:

var serialport = require('serialport'), 

SerialPort = serialport.SerialPort, 
portName = '/dev/ttyACM0',  
portConfig = { 
    baudRate: 9600, 
    // call myPort.on('data') when a newline is received: 
    //parser: serialport.parsers.readline('\n') 
}; 

... (code) ... 

pool.getConnection(function(err,connection) 
{ 
    var sql = "update value set temperature=? , humidity=? where idx=?"; 
    connection.query(sql,[temperature,humidity,idx],function(err,result) 
    { 
     console.log(result); 
     if(err) console.error("update errrr : ",err); 
     var myPort = new SerialPort(portName, portConfig); 
     myPort.on('open', openPort); 

    function openPort() { 
      var temp = temperature; 
      console.log('port open'); 
       console.log('baud rate: ' + myPort.options.baudRate); 

     function sendData() { 

     //myPort.write(temp.toString());  for(var i=0; i<temp.length; i++) { 
     myPort.write(new Buffer(temp[i], 'ascii'), function(err, results) { 
     }); 

     } 

     console.log('Sending ' + temp + ' out the serial port'); 
    }  setTimeout(sendData, 500);  myPort.close 

    } 
    res.redirect('/'); 
     connection.release(); 
    }); 

}); }); 

這是Arduino的代碼:

String inData = ""; 
int led = 13; 

void setup() 
{ 
    pinMode(led, OUTPUT); 
    Serial.begin(9600); 
    analogReference(INTERNAL); 
} 

void loop() 
{ 
    while (Serial.available() > 0) { 
    long received = Serial.parseInt(); 
     inData.concat(received); 

    Serial.println(inData); 
    } 

    inData = ""; 

} 

回答

1

我找到了答案

function openPort() { 
      var temp = temperature; 
     console.log('port open'); 
     console.log('baud rate: ' + myPort.options.baudRate); 
     setTimeout(sendData, 1); 
     function sendData() {myPort.write(new Buffer(temp, 'ascii'), function(err, results) {}); 
      console.log('Sending ' + temp + ' out the serial port'); 
    myPort.close(function() {console.log('port Closed.');}); 
     } 
    }