>웹 프론트엔드 >JS 튜토리얼 >Node.js의 Raspberry Pi Gpio 핀을 시작

Node.js의 Raspberry Pi Gpio 핀을 시작

Lisa Kudrow
Lisa Kudrow원래의
2025-02-17 12:58:10350검색

Getting Started with the Raspberry Pi GPIO Pins in Node.js

Getting Started with the Raspberry Pi GPIO Pins in Node.js SitePoint Internet of Things Week Special! 이번 주에 우리는 인터넷과 실제 세계의 교차점에 관한 일련의 기사를 게시 할 예정이므로 최신 업데이트를 위해 IoT 태그를 주시하십시오.

사물 인터넷은 요즘 모든 분노입니다. 물리적 컴퓨팅 분야에는 실습 할 수있는 많은 아이디어가 있으며, 우리가 살고있는 세상을 프로그래밍하는 데 쉽게 빠져들기 쉽습니다! 라즈베리 파이와 빵 보드를 사용하면 다음은 무엇입니까?

이 기사는 Node.js를 사용하여 Raspberry Pi의 GPIO 핀에 액세스하는 방법을 살펴 봅니다. GPIO 핀을 사용하면 하드웨어를 직접 프로그래밍 할 수 있습니다. JavaScript API는이 프로세스를 완벽하게 만듭니다. 이러한 API는 일반적인 기술의 추상화이며 어디서나 액세스 할 수 있습니다. Node.js 인터프리터는 단일 프로세스로 실행되므로 테스트 가능한 코드를 작성하는 새로운 방법을 열어줍니다. 저에게 가장 흥미로운 부분은 다른 JavaScript 프로그램과 마찬가지로 단위 테스트를 작성하고 중단 및 체크 코드를 확인할 수 있다는 것입니다. 시작하자. 키 포인트

라즈베리 파이의 공통 입력/출력 (GPIO) 핀은 node.js를 사용하여 액세스 할 수 있으므로 하드웨어를 직접 프로그래밍 할 수 있습니다. 이 핀은 스위치, 입력 수신 또는 물리적 세계에 출력을 보내는 것과 같습니다. JavaScript API는이 프로세스가 완벽하게 만듭니다.

gpio API는 장치 파일을 읽거나 쓰는 래퍼이며 파일 시스템 API는 이미 익숙한 개념 일 수 있습니다. UNIX와 같은 시스템에서 GPIO는 다른 일반 파일과 같이 작동하여 솔루션을 처리하는 방법에 자유를 제공합니다.

테스트 중심 방법은 사물 인터넷에 매우 적합합니다. 물리 컴퓨팅에서는 코드를 디버그하기 위해 전 세계 하드웨어를 배송하고 싶지 않습니다. 테스트 중심의 접근 방식을 사용하면 즉시 피드백을 받고 솔루션이 작동하는지 확인할 수 있습니다.

GPIO API를 사용하여 FS 모듈 주변의 래퍼로 단순화하여 깨끗하고 테스트 가능한 코드를 만들 수 있습니다. 이 기사에서는 표시된 API의 효과적인 섬광기 데모를 사용하여이를 보여줍니다.

gpio 란 무엇입니까? GPIO는 일반 입력/출력을 나타냅니다. 그들은 Raspberry Pi 쪽 옆의 핀, 노란색 비디오 출력 소켓입니다. 그들이 어떻게 생겼는지 여기에 있습니다.

출처 : Raspberry Pi Getting Started with the Raspberry Pi GPIO Pins in Node.js 라즈베리 파이에서 외부 세계로 연결하는 방법으로 간주 될 수 있습니다. 이를 통해 컴퓨터 화면에서 실행되지 않는 프로그램을 작성할 수 있습니다. 각 핀은 켜거나 끌 수있는 스위치처럼 보입니다. 물리적 세계로부터 입력을 받거나 출력을 보낼 수 있습니다. 베이스 보드에는 26 개의 핀이 있으며 그 중 9 개는 전원 또는지면 핀입니다. 접지 핀은 전류가 흐르는 각 회로의 끝에 있습니다. 업데이트 된 Raspberry Pi 보드에는 추가 14 핀 세트도 추가됩니다.

GPIO 핀에 대해 자세히 알아 보려면이 온라인 차트는 사용하기 위해 각 핀에 대해 알아야 할 모든 것을 제공합니다. 수많은 입력/출력 및지면 핀이 있습니다. 이 핀은 물리적 컴퓨팅의 기초입니다. 목표에 따라 원하는만큼 핀을 사용할 수 있습니다.

FS를 시뮬레이션하십시오!

나는 당신이 무엇을 생각하고 있는지, 정확히 FS는 무엇이며 왜 그것에 관심을 가져야합니까? UNIX와 같은 운영 체제에서 장치 파일은 파일처럼 보이는 드라이버입니다. 간단히 말해서, 장치 드라이버는 파일입니다! 뭐야? GPIO API는 장치 파일을 읽거나 쓰는 래퍼입니다. 파일 시스템 API는 이미 익숙한 개념 일 수 있습니다. node.js에서 파일을 사용한 적이 없다면 node.js에서 FS 모듈과 파일 시스템을 검토하는 것이 좋습니다. FS는 "파일 시스템"의 약어로 일반 파일을 읽거나 쓸 수 있습니다. 여기에는 멋진 것이 없습니다. 우리가하는 모든 일은 예를 들어 writefile ()입니다. GPIO가 나머지를 처리 ​​할 수 ​​있습니다. 요령은 어떤 파일을 작성 해야하는지 아는 것입니다.

Mock-Fs라는 편리한 NPM 패키지가있어 단위 테스트에 도움이 될 수 있습니다. 이 라이브러리를 사용하면 메모리의 모든 파일 시스템의 파일을 시뮬레이션 할 수 있습니다. 가장 중요한 것은 파일 만 처리한다는 것입니다. 이것이 바로 우리가해야 할 전부입니다. UNIX와 같은 시스템에서 GPIO는 다른 일반 파일과 동일하게 작동합니다. 이것은 우리 에게이 솔루션을 다루는 방법을 자유롭게 선택할 수있게합니다.

Mock-FS 라이브러리의 핵심은 Mock ({}) 함수입니다. JavaScript 객체 인 매개 변수를 수신합니다. 이 매개 변수에서 원하는 파일을 만들 수 있습니다. 여기의 아름다움은 모든 것이 메모리에 실행되므로 원하는만큼 단위 테스트를 수행 할 수 있다는 것입니다. 통역사는 단일 프로세스로 실행되므로 런타임에 FS 모듈을 덮어 쓸 수 있습니다. JavaScript는 동적 언어이므로 현재 프로세스에서 사용 가능한 모든 모듈을 시뮬레이션 할 수 있습니다. 일단 GPIO에서 좋은 단위 테스트를 작성하면 GPIO 인터페이스가 더 의미가 있습니다. 내가 좋아하는 것은 자동화 된 테스트 범위와 깨끗한 솔루션을 얻을 수 있다는 것입니다. 단위 테스트는 코드의 가독성을 향상시켜 API의 내용을 명확하게 보여주기 때문에 코드의 가독성을 향상시킵니다. 그래서 해보자.

단위 테스트 모든 내용

"out"이있는 핀을 열고 테스트하자 :

<code class="language-javascript">it('opens a pin with out', function (done) {
  mock({
    '/sys/class/gpio/gpio23/direction': ''
  });

  gpio.open(16, 'out', function () {
    const direction = fs.readFileSync('/sys/class/gpio/gpio23/direction').toString();

    should(direction).equal('out');

    done();
  });
});</code>
이 테스트의 구현은 GPIO에서 물리적 핀 16을 BCM 핀 23에 매핑해야합니다. BCM 번호는 커널이 장치 드라이버에서 볼 수있는 Broadcom 핀 번호입니다. GPIO 장치 드라이버는 장치 파일의 위치를 ​​간략하게 설명합니다. 그림과 같이 핀을 켜려면 문자열을 /방향으로 "out"을 씁니다. 이것은 우리 가이 핀을 작성하고 싶다고 GPIO에게 알려줍니다. 완료되면 파일에 필요한 내용이 포함되어 있는지 확인하십시오. Mock은 Node.js의 표준 파일 시스템 인 Mock-FS 라이브러리에서 제공됩니다. 커널은 경로가 3.18.x의 위치를 ​​나타내고 나중에/sys/class/gpio에 있습니다.

보드에 핀에 쓰고 테스트하려면 다음을 수행 할 수 있습니다.

gpio.open ()와 gpio.write () 사이에는 유사성이 있습니다. /값 파일에 쓰는 쓰기 작업을 사용하십시오. 무결성 검사를 위해 5의 매우 높은 값을 썼지 만 테스트 결과는 1 일만 할 것으로 예상합니다. GPIO는 이진과 마찬가지로 높거나 낮은 값 만받습니다.

나는 pi-gpio로부터 구현 세부 정보를 얻었습니다. 이 라이브러리는 각 핀 위치에 대한 좋은 개요를 제공합니다. 커널에서 장치 파일을 찾을 수도 있습니다. 어느 쪽이든, 내 목표는 당신에게 기본 사항을 잘 이해하여 명확한 그림을 얻을 수 있도록하는 것입니다.

미쳐 가자, 단위 테스트에서 어떻게 중단 점을 누르나요? 나는 WebStorm을 사용하여 이것을 수행하고 다시 한번 당신을 편안하게 느끼기 위해 어떤 방법을 사용하십시오 :
<code class="language-javascript">it('writes to a pin with a high value', function (done) {
    mock({
      '/sys/class/gpio/gpio23/value': '0'
    });

    gpio.write(16, 5, function () {
      const value = fs.readFileSync('/sys/class/gpio/gpio23/value').toString();

      should(value).equal('1');

      done();
    });
  });</code>
.

합리적인 프로그래밍 방법을 사용하는 키는 오류를 찾는 데 필요한 피드백 루프를 단축하는 것입니다. 단위 테스트는 루프를 조이고 즉각적인 피드백을 얻는 좋은 방법입니다.

단순화를 위해 단일 핀에 글을 쓰고 있습니다. 나머지 GPIO는 같은 방식으로 요약됩니다. 핀을 열고 원하는 것을 말하십시오. 핀을 읽거나 쓰십시오. 저수준 API는 장치 파일이므로 각 핀을 프로그래밍하는 방법을 선택할 수 있습니다.

플래싱 데모

각 단위 테스트를 강화하려면 몇 가지 일반적인 변수를 살펴 보겠습니다.

위의 핀 맵과 GPIO의 장치 드라이버로의 경로를 정의했습니다. 다음 코드는 핀을 열고 쓰는 코드를 봅니다. Getting Started with the Raspberry Pi GPIO Pins in Node.js 표시된대로 모든 작업은 장치 파일에 writeFile ()을 써야합니다. 콜백이 없으면 Noop은 가상 콜백입니다. 이 구현 세부 사항을 통해 패스 테스트를 받았으며 이것이 효과가 있다고 확신했습니다. 쓰기 작동의 값은 높거나 낮은 것으로 설정되도록합니다 ( '0'또는 '1').

마지막으로, 위에 표시된 API를 사용한 유효한 Scintillator 데모 :

setInterVal ()은 1 초를 한 번 호출하고 콜백에서 모듈러스를 사용하여 핀을 스위치라고 지시합니다. Scintillator에는 간격이 있으며 Settimeout ()는 12 초 후에이를 지우는 데 사용합니다. settimeout ()의 콜백은 작업을 완료하고 프로그램을 종료합니다.

샘플 코드를 실행하려면 다음을 입력하십시오

(Raspberry Pi에서 GPIO에 액세스하려면 관리자 권한이 필요합니다) 이 데모에서 gpio가 더 직관적으로 보이기를 바랍니다. 방향을 사용하여 핀을 켜야합니다. 그런 다음 핀을 작성하고 GPIO가 나머지 세부 사항을 처리하도록합니다.

결론

테스트 중심 방법은 사물 인터넷에 매우 적합합니다. 사물의 인터넷에서는 당신의 상상력이 한계입니다. Raspberry Pi는 전 세계 어디에서나 배포 될 수 있습니다. 물리적 컴퓨팅에서는 코드를 디버그하기 위해 전 세계 하드웨어를 배송하고 싶지 않습니다. 테스트 중심의 접근 방식을 사용하면 즉시 피드백을 받고 솔루션이 작동하는지 확인할 수 있습니다. 생산성을 높이고 피드백 루프를 강화할 수 있습니다. GPIO API에 대해 내가 좋아하는 것은 FS 모듈 주변의 래퍼로 단순화 될 수 있다는 것입니다. 이것은 깨끗하고 테스트 가능한 코드를 작성할 수있는 완전한 자유를 제공합니다. 나머지 샘플 데모는 Github에 업로드되었습니다.

Raspberry pi 에서 node.js 및 gpio 핀 사용에 대한 FAQ

Node.js 란 무엇이며 Raspberry Pi의 GPIO 핀과 함께 사용하는 방법은 무엇입니까? Node.js는 Raspberry Pi에서 JavaScript 코드를 실행할 수있는 JavaScript 런타임 환경입니다. 외부 하드웨어 구성 요소를 Raspberry Pi에 연결하는 데 사용되는 GPIO (범용 입력/출력) 핀을 제어하고 상호 작용할 수 있습니다.

는 라즈베리 파이에서 node.js 및 gpio 핀을 사용하고 있습니까? 특수 하드웨어가 필요합니까? Raspberry Pi 보드 및 프로젝트에 따라 LED, 센서 또는 릴레이와 같은 외부 구성 요소가 필요합니다. 시작하려면 이러한 구성 요소를 GPIO 핀에 연결하기위한 빵 보드와 점퍼가 있어야합니다.

라즈베리 파이에 node.js를 설치하는 방법은 무엇입니까? APT 패키지 관리자를 사용하거나 Node.js 웹 사이트에서 다운로드하여 설치하여 Raspberry Pi에 Node.js를 설치할 수 있습니다. 특정 Raspberry Pi 모델에 Node.js의 암 호환 버전을 사용해야합니다.

  • gpio 핀이란 무엇이며 Raspberry Pi 보드에서 어떻게 식별합니까? GPIO 핀은 Raspberry Pi의 핀으로 디지털 입력 또는 출력에 사용할 수 있습니다. 그것들은 숫자로 표시되며 Raspberry Pi 모델에 특정한 GPIO 핀 다이어그램을 사용하여 식별 할 수 있습니다.

  • node.js에서 gpio 핀에 액세스하는 방법은 무엇입니까? rpi-gpio, onoff 또는 pigpio와 같은 라이브러리를 사용하여 node.js에서 gpio 핀에 액세스 할 수 있습니다. 이 라이브러리는 JavaScript 코드에서 GPIO 핀을 제어하고 상호 작용하기위한 API를 제공합니다.
  • 내 node.js 프로젝트에서 입력 및 출력 모두에 GPIO 핀을 사용할 수 있습니까? 예, Node.js 프로젝트에서 GPIO 핀을 입력 및 출력으로 구성 할 수 있습니다. 입력 핀에 연결된 센서 수를 읽을 수 있습니다. 제어 LED, 모터 또는 출력 핀에 연결된 기타 장치.
  • 밝기 또는 속도와 같은 작업을 제어하기 위해 PWM (펄스 폭 변조)에 node.js의 gpio 핀을 사용할 수 있습니까? 예, Raspberry Pi의 일부 GPIO 핀을 사용하여 밝기, 운동 속도 등을 제어 할 수 있습니다. Pigpio와 같은 라이브러리는 PWM을 지원하며 Node.js와 호환됩니다.

위 내용은 Node.js의 Raspberry Pi Gpio 핀을 시작의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.