node закрыть соединение последовательного порта Arduino, прежде чем что-либо делать

Я пытаюсь использовать node для печати серийного номера с Arduino uno, подключенного к USB.

У меня есть файл script.js:

    var SerialPort= require("serialport");

    SerialPort.list(function(err,ports){
            ports.forEach(function(port){
            console.log(port.comName);
            console.log(port.manufacturer);
        });
        });

    var port= new SerialPort("/dev/cu.usbmodem641",{
            baudRate: 9600,
            parser: SerialPort.parsers.readline('n')
        });


    port.on('open',function(){
    console.log('opened');
        });



    port.on('close',function(){
            console.log('closed');
        });
port.on('data',function(data){
    console.log(data);
    });

port.on('error',function(error){
        console.log("Errore: "+error);
    });

console.log(":-)");

Я запускаю sudo node script.js, пока Arduino имеет Serial.println(1);

на терминале я вижу: opened closed

Если я открою последовательный монитор Arduino IDE, он будет работать правильно!

Почему мой последовательный порт не остается открытым?


person Phil    schedule 30.08.2016    source источник
comment
Пара вещей, которые следует учитывать, но не обязательно ответ: 1. Это точно правильный COM-порт 2. Возможно, Arduino IDE принудительно закрывает порт, чтобы он мог получить контроль над Arduino. Если возможно, попробуйте запустить программу с закрытой средой разработки Arduino. Также похоже, что это может быть решено здесь: -if-another-app-has-already-connect?rq=1" title="последовательный порт узла взаимодействует с arduino, только если другое приложение уже подключено">stackoverflow.com/questions/29735047/   -  person The Dude    schedule 30.08.2016
comment
1. Да, я уверен (Arduino IDE сообщает, что И список serliaport также указывает на это) 2. Я несколько раз пытался открыть IDE, закрыть, открыть IDE после узла и наоборот 3. Я попробовал это решение   -  person Phil    schedule 30.08.2016
comment
Возможно, это строка parser: SerialPort.parsers.readline('n'). Это будет искать символ n, а не новую строку. Это может быть то, что вы хотели, но может потребоваться parser: SerialPort.parsers.readline('\n') для анализа новой строки вместо n.   -  person The Dude    schedule 30.08.2016
comment
Вы правы, я имел в виду \n, исправлено, но все еще не работает. Дело в том, что порт закрывается так же, как и открывается, не успевая ничего сделать!   -  person Phil    schedule 30.08.2016
comment
Очень странно, я уверен, что это вызвано перезагрузкой Arduino, когда он подключен к последовательному порту, чтобы он мог войти в загрузчик. Я не уверен, почему реализация решения, на которое я ссылался ранее, не решает проблему, возможно, увеличьте задержку, чтобы убедиться, что загрузчик выполнен и код работает. Есть ли заметная разница при использовании этого решения?   -  person The Dude    schedule 30.08.2016
comment
Я пытаюсь до 10 секунд (я думаю, достаточно, когда он перезагружается, его светодиод мигает пару раз), когда реализовано это решение, он открывает (и вскоре закрывает) соединение два раза (я распечатываю открытие и закрытие)   -  person Phil    schedule 30.08.2016
comment
Я пытаюсь playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection, теперь конечно он не сбрасывается, но все равно не остается открытым!   -  person Phil    schedule 30.08.2016
comment
Хотя он не должен сбрасываться, на этой странице написано, что он все еще может. Это связано с изменением тока, подаваемого чипом FTDI. Не сказать, что есть, но может. Одна вещь, которую можно попробовать, это добавить dataBits: 8, parity: 'none', stopBits: 1, flowControl: false });. Бит управления потоком должен заставить компьютер оставить DTR в покое, что может помочь.   -  person The Dude    schedule 30.08.2016
comment
Когда он сбрасывается, он мигает при открытии серийного номера в IDE, теперь он ничего не делает, поэтому я думаю, что он правильно сбрасывается! проверил ваши параметры, но ничего не изменилось! Я также пробовал authOpen false   -  person Phil    schedule 30.08.2016
comment
Интересно, похоже, вы правы в том, что он не сбрасывается. playground.arduino.cc/Interfacing/Python хотя это для python, возможно, стоит быстро внедрение для обеспечения того, чтобы ваша последовательная связь Arduino работала в целом вне последовательного монитора.   -  person The Dude    schedule 30.08.2016
comment
Хорошо python работает правильно! Также работает команда screen!   -  person Phil    schedule 30.08.2016
comment
Ах, возможно, это макет вашего кода NodeJS. Попробуйте переместить port.on('data',function(data){ console.log(data); }); внутрь port.on('open',function(){ console.log('opened'); });, чтобы провести рефакторинг port.on('open',function(){ console.log('opened'); port.on('data',function(data){ console.log(data); }); });.   -  person The Dude    schedule 30.08.2016


Ответы (1)


Я сдался и сделал это на python!

https://github.com/fvalle1/Arduino/

person Phil    schedule 02.09.2016