본문 바로가기

잡다

[라즈베리파이] 라즈베리파이5 node-red 연동

https://nodered.org/

 

Node-RED

Built on Node.js The light-weight runtime is built on Node.js, taking full advantage of its event-driven, non-blocking model. This makes it ideal to run at the edge of the network on low-cost hardware such as the Raspberry Pi as well as in the cloud. With

nodered.org

 node-red는 브라우저 기반으로 쉽게 하드웨어 / API / 온라인 서비스 등을 연결하여 개발할 수 있도록 지원하는 개발 도구로, node.js 기반으로 동작한다. http, websocket, mqtt 등 다양한 프로토콜과의 연동이나 xml / json 등 다양한 파싱 기능을 기본적으로 제공해서 보다 쉽게 개발할 수 있다.

 다양한 하드웨어와의 연동을 지원하는 만큼 라즈베리파이를 지원하는 오픈소스 기반 노드들도 공개되어 있다. 공식 문서에서는 다음과 같은 라이브러리들을 소개하고 있다.

https://www.tomshardware.com/how-to/control-raspberry-pi-5-gpio-with-python-3

하지만 라즈베리파이5에서 위 라이브러리들을 설치해보면 정상적으로 동작하지 않는다. 검색해본 내용에 따르면 라즈베리파이5는 기존 버전과는 다르게 RP1이라는 다른 칩셋을 이용하는데, 이것이 기존 모델의 구조와 호환되지 않아 과거에 작성했던 라이브러리들이 깨진다고 한다.

node-red-node-pi-gpio 의 경우 내부적으로 RPi.GPIO를 사용하는데, 해당 라이브러리는 현재 라즈베리파이5를 지원하지 않기 때문에 동작이 안되는 것이 당연하다.

node-red-node-pi-gpiod 는 내부적으로 pigpiod를 이용한다고 하는데, 라즈베리파이5 환경에서 실행하면 실행 가능한 환경이 아니라는 에러를 내뱉는다.

pigpiod를 사용하지 못하는 모습

https://github.com/joan2937/pigpio/issues/589

 

pigpio will not run on a Pi 5 · Issue #589 · joan2937/pigpio

pigpio is hard-coded to not run on a Pi5. See pigpio/pigpio.c Lines 7353 to 7356 in c33738a "+---------------------------------------------------------+\n" \ "|Sorry, this system does not appear to...

github.com

깃허브 이슈를 보면 현재 RPi5에서 동작하지 않는 것은 확실한 것 같다.

즉, node-red 공식 문서에서 제시하고 있는 라이브러리들은 라즈베리파이5 환경에서 호환되지 않는다. 정보를 좀 더 찾다 보니, 라즈베리파이5 환경과 호환되는 라이브러리르 찾을 수 있었다. 아래 라이브러리를 기준으로 node-red와 연동해보자.


(수정)

RPi.GPIO는 라즈베리파이를 지원하지 않지만, 이를 지원하게 만드는 어댑터 역할의 라이브러리가 존재한다. 새로 작성한 글에서 해당 라이브러리를 활용해 node-red-node-pi-gpio를 연동하는 방법에 대해 작성했다.

https://blaxsior-repository.tistory.com/285 

 

[라즈베리파이] node-red-node-pi-gpio 라즈베리파이 5에서 사용하기

https://blaxsior-repository.tistory.com/283 [라즈베리파이] 라즈베리파이5 node-red 연동https://nodered.org/ Node-REDBuilt on Node.js The light-weight runtime is built on Node.js, taking full advantage of its event-driven, non-blocking model.

blaxsior-repository.tistory.com


 

https://www.npmjs.com/package/@iiot2k/node-red-gpiox

 

@iiot2k/node-red-gpiox

Node-RED nodes for Raspberry Pi gpio. Latest version: 2.1.3, last published: 14 days ago. Start using @iiot2k/node-red-gpiox in your project by running `npm i @iiot2k/node-red-gpiox`. There are no other projects in the npm registry using @iiot2k/node-red-g

www.npmjs.com

설치 방법

 우선 라즈베리 파이 환경에 접속하고, node.js 환경을 설치한다. 설치 방법은 어떻게 해도 상관 없지만, 나는 apt-get으로 설치했다. 

sudo apt-get update
apt-get install nodejs

nodejs을 설치하면 기본적으로 npm도 함께 설치된다. npm을 이용해서 node-red을 전역으로 설치한다.

sudo npm install -g --unsafe-perm node-red

node-red을 한번 실행했다가 끄자.

node-red

node-red을 실행하면 ~/.node-red 폴더가 생성된다. 해당 폴더는 node-red의 패키지 정보가 저장되는 장소로, 특정 노드를 추가하고 싶은 경우 해당 위치로 이동한 다음 npm install로 설치하면 된다. 위에서 링크를 제공한 패키지를 설치해보자.

cd ~/.node-red
npm install @iiot2k/node-red-gpio

다시 node-red을 실행하면 다음과 같은 노드들을 이용할 수 있게 된다.

(좌) 추가된 노드, (우) 간단한 light on / off를 구현한 것

내가 가진 라즈베리파이5 기준 스위치 on off 정도의 기능은 문제 없이 지원되는 것을 확인했다.


 라즈베리파이5에서 기본적으로 사용하는 gpiozero 라이브러리의 경우 과거에는 RPi.GPIO 등의 라이브러리를 기반으로 동작했지만, 현재는 lgpio 라이브러리를 기본 값으로 이용한다고 한다. 두 라이브러리에 어떤 차이가 있길래 lgpio는 동작할 수 있는 것인지 찾아보고, 더 나아가 직접 노드를 만드는 것까지 해보고 싶다.