본문 바로가기
개발/Javascript

우분투 환경에서 Web 시리얼포트 오픈시 에러

by hyperhand 2023. 10. 12.

하는 일이 시리얼 포트를 이용한 작업들이 많아 그 때마다 시리얼 통신용 데스크탑 애플리케이션을 설치하는 일이 번거롭게 느껴지곤 했다. 빈번하게 있는 일은 아니지만 여러 컴퓨터를 옮겨 다니며 작업할 경우가 간간히 발생하기에 그때마다 귀찮게 느껴졌다. 그러다 우연히 웹 표준에서도 시리얼 포트를 접근을 지원한다는 내용을 보고 그럼 테스트용 애플리케이션을 직접 개발하기로 했다.

 시리얼 포트 지원 내용은 아래 링크에서 확인할 수 있는데 모든 브라우저가 지원하는 건 아니고, 현재는 크롬, 엣지, 오페라 정도만 지원한다.

 

 

 

 

 

https://developer.mozilla.org/en-US/docs/Web/API/SerialPort

 

SerialPort - Web APIs | MDN

The SerialPort interface of the Web Serial API provides access to a serial port on the host device.

developer.mozilla.org

 

<script>
const btn = document.querySelector('.btn');
btn.addEventListener('click', async () => {

	try {
		const port = await navigator.serial.requestPort();

		port.onconnect = (e) => {
			console.log('port connected');
			console.log(e.target);
		};

		port.disconnect = (e) => {
			console.log('port disconnected');
			console.log(e.target);
		};

		await port.open({ baudRate: 9600 });  // <--- Error
		await port.close();
	} catch (e) {
		console.error(e);
	}
});
</script>

위와 같이 간략한 테스트용 코드를 작성해서 포트 오픈 테스트를 해봤는데 open 메소드에서 아래와 같은 에러가 발생했다.

이유를 몰라 MDN을 확인해보니 HTTPS에서만 작동하는 듯 보여 netlify에 올려 테스트해보니 마찬가지였다. 다시 구글링을 더해보니 드라이버 문제일수도 있다고 했는데 우분투용 데스크탑 애플리케이션에서는 정상적으로 통신까지 된 것을 확인했기에 드라이버 문제는 아니었다. 좀 더 찾아보니 원인은 해당 포트에 대한 권한 문제였다.

 

 

 

 

 

$ sudo chmod o+rw /dev/ttyUSB*

 

위 명령으로 권한 부여 후 다시 실행하니 에러가 사라졌다.

반응형