Study & Project ✏️/electron 🐣

[라즈베리파이 크로스컴파일] electron Node.js serialport 첫 번째 시련 해결!

JM 2022. 1. 26. 22:06
반응형

https://it-jm.tistory.com/32

 

electron 앱 개발중 Node.js serialport에서 첫 번째 시련

앞서 개발했던 DNC에서 첫 번째 시련에 봉착했다. 이 화면에서 serialport의 세팅 값을 설정한 걸 로컬 스토리지에 저장하고, 이 화면의 우측 2번째 버튼인 포트버튼을 누르면 바뀐 세팅 값으로 적용

it-jm.tistory.com

앞전 포스팅에서 봉착했던 첫 번째 시련이 있다.

바로 시리얼 세팅값을 동적으로 적용시켜서

포트를 Open/Close 하고 싶었는데,

그게 잘 되지 않았다.

어마 무시한 능력자들이 있는 Stackoverflow나, Node.js의 깃헙에도 올려봤지만

답변이 하나도 안달렸다 ㅠㅠ

 

혼자서 고민하고 여러가지를 시도해본 결과 답이 나와서 함께 공유하려고 한다.


우선 생각보다 간단하게 풀렸다.

 port를 전역 변수로 선언하고 사용하는 것이었다.

좀 더 깔끔하게 portOpen함수를 지정하고 사용해서 좋아진 것 같다.

// renderer.js
const portBtn = document.getElementById('portBtn');
// global declaration
let port;

portBtn.addEventListener('click', () => {
    if(portBool === false) {
        portOpen();
        port.open(function (err) {
            if (err) {
                console.log(err);
            } else {
                //read
                port.on('data', function (data) {
                    text.append(data);
                    text.scrollTop = text.scrollHeight;
                });
                //write
                sendBtn.addEventListener('click', () => {
                    port.write(text.value);
                });
            }
        })
    } else {
        portClose();
    }
});

// load Serial setting
function getSerial() {
    const serialdata = localStorage.getItem('serialdata');
    const data = JSON.parse(serialdata);
    portname = data.portName;
    baudrate = parseInt(data.baudRate);
    databits = parseInt(data.dataBits);
    stopbits = parseInt(data.stopBits);
    Parity = data.parity;
    RTSCTS = (data.RTSCTS === 'true');
}

function portOpen() {
    getSerial();
    port = new serialport(portname, {
        baudRate: baudrate,
        dataBits: databits,
        stopBits: stopbits,
        parity: Parity,
        rtscts: RTSCTS,
        autoOpen: false,
    });
}
function portClose() {
    port.close();
}

JS가 컴파일하면서 미리 serialport가 대기상태로 들어갔을 것 같다는 생각은 틀렸다!

내가 원했던 것처럼 port의 parameters에 해당 값들을 넣어주기 위해서는

전역 변수로 바깥에서 port를 사용할 수 있어야 하고,

autoOpen = false로 지정해서 먼저 해당 값들을 불러오고 port 객체를 생성해주는 것이 필요하다.


개발이 어느 정도 완성되어 가는 게 느껴진다.

어서 개발을 끝내고 서류작성을 시작해야 하는데

하루하루가 엄청 빠르고 하고 싶은 것도 많다.