Как я могу обойти обещания, что пакет serialport nodejs работает с - PullRequest
0 голосов
/ 19 января 2020

Я запустил проект, который требует связи между Arduino и локальным nodejs сервером ( не имеет отношения , данные будут отправлены через HTTP-запрос или сокет на фактический удаленный сервер позже) , Я использую нодальный пакет serialport. В начале последовательной связи серверу необходимо «найти» arduino. Я выбрал следующий кодекс согласования:
1) сервер отправляет символ "c" (как при соединении), который arduino прослушивает
2) arduino отвечает на все "c "s с другим" c ", который сервер будет прослушивать для
, другими словами, когда обе стороны получат" c ", что означает, что последовательное соединение работает

Однако из-за использования последовательного порта обещает, что не могу go через все доступные порты и проверить, есть ли там arduino (который отвечает "c").
Вот что я придумал:

var SerialPort = require('serialport');
var Readline = require('@serialport/parser-readline');

async function tryPort(path) {
    var port = new SerialPort(path, {
        baudRate: 9600
    });
    port.on('error', function (err) {
        console.log(err);
    });
    port.pipe(new Readline({ delimiter: '\n' })).on('data', (data)=>{
        console.log(port);
        console.log(data);
        if (data == 'c') {
            return port;
        }
        port.close();
    });
    port.write("c", function (err) {
        if (err) console.log(err);
    });
}
async function connect() {
    var connection, ports = await SerialPort.list();
    for(i=0;i<ports.length;i++){
        connection = await tryPort(ports[i].path);
    }
    setTimeout(() => {
        if (!connection) {
            console.log("no port/response found");
        }else{
            console.log(connection);
        }
    }, 3000);
}

connect();


Я предположил, что переменной 'connection' будет присвоено значение порта, который ответил правильно последний, потому что этот порт будет самым длинным до фини sh. К сожалению, кажется, что это не будет работать с обещаниями ... Так что мне интересно, есть ли другой способ выполнить sh это?

...