반응형
앞전 포스팅에서 봉착했던 첫 번째 시련이 있다.
바로 시리얼 세팅값을 동적으로 적용시켜서
포트를 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 객체를 생성해주는 것이 필요하다.
개발이 어느 정도 완성되어 가는 게 느껴진다.
어서 개발을 끝내고 서류작성을 시작해야 하는데
하루하루가 엄청 빠르고 하고 싶은 것도 많다.
'Study & Project ✏️ > electron 🐣' 카테고리의 다른 글
[라즈베리파이 크로스컴파일] electron 라즈베리파이 앱 개발 프로젝트 완성! 2022예비창업패키지 (0) | 2022.01.27 |
---|---|
[라즈베리파이 크로스컴파일] electron 앱 개발 중 textarea에서 serial data read 문제 발견! 그리고 해결 (0) | 2022.01.26 |
[라즈베리파이 크로스컴파일] electron 앱 개발중 Node.js serialport에서 첫 번째 시련 (0) | 2022.01.20 |
[라즈베리파이 크로스컴파일] electron을 이용한 앱 개발일지 (2) | 2022.01.18 |
[라즈베리파이 크로스컴파일] 6. electron-builder를 통한 윈도우 -> 라즈베리파이 크로스컴파일 하기 (0) | 2022.01.17 |