尝试使用 Beaglebone Black 上的串口时无法打开文件“/dev/ttyO2”

Cannot open file "/dev/ttyO2" when trying to use the serial port on the Beaglebone Black

我正在尝试打开我的 beagle bone 上的串行端口 2,使用以下代码:

    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 我先 运行 另一个文件(代码下来),我尝试重新 运行 以前的代码,它 运行 很完美。每当我想 运行 第一个代码时,我都需要这样做! 运行s 第一次的代码在这里: (我单独尝试了以下代码,它写入串口但没有收到,收到时没有事件):

    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");
        }
    }

问题已解决。 在 /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”(这是我的情况 - 但它禁用了我的 BBB 的 HDMI 接口)。

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