2016-03-07 66 views
1

我试图打开串口2在我的猎兔犬骨,使用下面的代码的串行端口时:无法打开文件“的/ dev/ttyO2”试图利用在Beaglebone黑

var b = require('bonescript'); 
var x = '/dev/ttyO2'; 
var SerialPort = require("serialport").SerialPort; 
var serialPort = new SerialPort('/dev/ttyO2', { 
    baudrate: 115200, 

    parser: b.serialParsers.readline("\n") 

}); 

的完整的代码:

var b = require('bonescript'); 
var x = '/dev/ttyO2'; 
var SerialPort = require("serialport").SerialPort; 
var serialPort = new SerialPort('/dev/ttyO2', { 
    baudrate: 115200, 

    parser: b.serialParsers.readline("\n") 

}); 

b.pinMode("P9_17", b.OUTPUT); 

var countTry =2; 
var i = 0; // to loop over the array 
var waiting_interval = 3000; // waiting for every slave to reply 
var deli; 

var slaves = ["S1", "S2" , "S3", "S4", "S5", "S6"]; 
var counter=[0 , 0 , 0 , 0 ,0 ,0]; 
var slave_exists = false; 

serialPort.on('open',function onSerialOpen(){ 
    console.log("opened"); 
    serialPort.on('data', function listenToSlaves(data){ 
     i--; 
      if(data.search("END" + slaves[i]) ==0){ 
      console.log("ENDED"); 
      slave_exists = true; 
      counter[i]=0; 
     } 
     else{ 
     // if(data!="END" + slaves[i]){ 
     if(data.search("END" + slaves[i])!==0){ 
      deli = data.indexOf(":"); 
      var parameter = data.substring(0, deli); 
      var value = data.substring(deli +1); 
      console.log("parameter is: " + parameter + " - Value is: " + value); 
     } 
     } 

     if(slave_exists){ 
      counter[i] =0; 
     } 
     i++; 
     }); 
    writeToSlaves(); 
}); 

function writeToSlaves(){ 
    //If the previous slave (the slave before the one I am sending to 
    //in the next step doesnt exist, add the counter or consideer 
    //it not existing) 
    if(!slave_exists){ 
     counter[i-1]+=1; 
     if(counter[i-1]>=countTry){ 
      console.log("--------counter[" + i + "]: " + counter[i]); 
      // in case that the slave returned no data after trying 
      //to send him several times 
      console.log(slaves[i-1] + " doesn't exist"); 
     } 
    } 
    //sending to the following slave 
    b.digitalWrite("P9_17", b.HIGH);  
    serialPort.write(slaves[i], function(){ slave_exists = false;}); 
    b.digitalWrite("P9_17", b.LOW); 
    console.log("I wrote to slave: " + i); 
    if(i<slaves.length - 1) i++; 
    else i=0; 
    setTimeout(writeToSlaves, waiting_interval); 
} 

,但我总是面临着这样的错误:events.js:72 throw er; // Unhandled 'error' event ^ Error: Cannot open /dev/ttyO2 我正在另一个文件中的第一(代码下),在我尝试重新运行以前的代码,它运行完美。我需要这样做,只要我想运行第一个代码! 从第一次运行的代码是在这里: (我试过独自下面的代码,将其写入串行端口,但犯规收到,在recieption任何情况下):

var b = require('bonescript'); 
    var rxport = '/dev/ttyO2'; 
    var txport = '/dev/ttyO2'; 
    var options = { baudrate: 115200, parity: 'even', parser: b.serialParsers.readline('\n') }; 
    var teststring = "This is the string I'm sending out as a test"; 

    b.serialOpen(rxport, options, onRxSerial); 

    function onRxSerial(x) { 

     console.log('rx.eventrx= ' + x.event); 
     if(x.err) throw('***FAIL*** ' + JSON.stringify(x)); 
     if(x.event == 'open') { 
      //readReapeatedly(); 
      b.serialOpen(txport, options, onTxSerial); 

     } 
     if(x.event == 'data') { 
      console.log("I am receiving on rxport"); 
      console.log('rx (' + x.data.length + 
         ') = ' + x.data.toString('ascii')); 

     } 
    } 

    function onTxSerial(x) { 
     console.log('tx.event = ' + x.event); 
     if(x.err) throw('***FAIL*** ' + JSON.stringify(x)); 
     if(x.event == 'open') { 
      writeRepeatedly(); 
     } 
     if(x.event == 'data') { 

      // console.log('tx (' + x.data.length + 
      //    ') = ' + x.data.toString('ascii')); 
      console.log(x.data); 
     } 
    } 

    function printJSON(x) { 
     console.log(JSON.stringify(x)); 
    } 

    function writeRepeatedly() { 
     console.log("write to serial"); 
     b.serialWrite(txport, teststring, onSerialWrite); 
     console.log("I have sent data"); 
    } 


    function onSerialWrite(x) { 
     console.log("Iam in the onSerialWrite function"); 
     if(x.err) console.log('onSerialWrite err = ' + x.err); 
     if(x.event == 'callback') {setTimeout(writeRepeatedly, 5000); 
     console.log("HERE"); 
     } 
    } 

回答

1

的问题得到解决。 在/boot/uboot/uEnv.txt中,更新行:“#cape_enable = capemgr.enable_partno =”为: “cape_enable = capemgr.enable_partno = BB-UART1,BB-UART2,BB-UART4,BB-UART5 “ 或将最后一行添加到提到的文件中。在某些情况下,您需要尝试下面的代码: “optargs = capemgr.enable_partno = BB-UART1,BB-UART2,BB-UART4,BB-UART5”(这是我的情况 - 但它禁用了HDMI我的BBB界面)。

您可以指定要启用的UART。 A helpful webpage is here.