[개발] 라즈베리파이에서 serialport 9.X 업그레이드

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@realmankwon·
0.000 HBD
[개발] 라즈베리파이에서 serialport 9.X 업그레이드
안녕하세요 @realmankwon입니다.

라즈베리파이와 아두이노간의 시리얼 통신을 위해서는 npm의 serialport 라이브러리가 사용됩니다.
몇 년전에 해당 라이브러리를 잘 사용했는데 라즈베리파이의 하드웨어와 OS가 같이 업그레이드 되고 node.js, npm 까지 업그레이드 되니 기존  serialport와 호환이 되지 않았습니다.

자동문 제어를 위해 개발한 라즈베리파이가 아닌 최신 사양의 라즈베리파이를 사서 다시 하드웨어 구성을 하다보니 생긴 문제라서 이걸 해결하기 위해서 또 무진장 많은 시간을 할애했습니다.

일단 설치부터 되지 않아서 온갖 방법을 다 사용했습니다.

그동안 업그레이드 가이드 문서도  다음과 같이 찾을 수 있었지만 큰 도움음 되지 못했습니다.

https://github.com/serialport/node-serialport/blob/master/UPGRADE_GUIDE.md

![](https://cdn.steemitimages.com/DQmWdob7JX1gf6AYom7TW1Du99PCbRGg8r4si6k7YhYeS9x/image.png)

사용하고 있는 node 가 12.X 버전이니 최신 버전의 스펙에도 문제가 없었습니다.
결국 설치는 했는데 방법은 너무 간단했습니다.

- sudo npm install serialport@latest

이 명령어 외에 이전에 했던 것들 때문에 바로 된 것인지는 한번 더 테스트를 해 봐야겠지만 일단 설치가 되었으니 바로 소스를 수정하였습니다.
일이 바쁜지라...ㅜㅜ

이번에 설치된 버전은 serialport 9.X 버전입니다.

![](https://cdn.steemitimages.com/DQmbKSuZb2QR8iBwf1U1jyAj7JaS66xhDQtN2Ak34eRdjsD/image.png)

현재 stable이라고 공식 문서에 나와 있으니 이것으로 쭉 사용해야겠습니다.
이 버전과 예전에 사용하던 버전과 가장 많이 달라진 것은 readline 처리입니다.
이전 버전은 다음과 같이 readline을 처리하였습니다.

~~~
const SerialPort = require('serialport');
const port = new SerialPort('/dev/ttyACM0', {
  parser: SerialPort.parsers.readline('\n')
});

port.on('data', function (data) {

});
~~~

현재 버전은 readline을 별도로 처리하였습니다.

~~~
const SerialPort = require('serialport');
const Readline = require('@serialport/parser-readline');
const port = new SerialPort('/dev/ttyACM0', {baudRate : 9600});
const parser = port.pipe(new Readline({delemiter : '\r\n', interval : 50}));

parser.on('data', function (data) {
});
~~~

일단 후자의 방식으로 처리하여 이전과 동일한 기능이 되도록 처리는 완료하였습니다.
내일은 또 새로운 것과 싸움을 해야할 듯 하니 마음을 단단히 먹어야겠습니다.
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,