2016-03-07 6 views
1

Я пытаюсь открыть последовательный порт 2 на мой бигль кости, используя следующий код:Не удается открыть файл «/ DEV/ttyO2» при попытке использовать последовательный порт на Beaglebone Black

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.