Bash 스크립트에서 Raspberry Pi GPIO 핀 제어 : 신호등

이전 에 Python ( Python 기사 읽기 ), Node.js ( Node.js 기사 읽기 ), Node RED ( Node RED 기사 읽기 ) 용 Raspberry Pi 단일 보드 컴퓨터에서 저전압 실험실 신호등 을 사용하는 방법을 설명하는 가이드를 제작했습니다 . Java ( Java 기사 읽기 ), C ( C 기사 읽기 ), Swift ( Swift 기사 읽기 ), Go ( Go 기사 읽기 ) 및 Arduino 용 ( Arduino 기사 읽기 ). 이번에는 전통적인 프로그래밍 언어를 사용하지 않고 동일한 작업을 수행하기 위해 Bash 스크립트를 사용하는 방법을 살펴 보겠습니다.

이 가이드를 독립형 가이드로 만들기 위해 여기에있는 이전 기사의 콘텐츠를 일부 재사용 할 것입니다.

쇼핑리스트

이를 시도하려면 다음이 필요합니다 (여기 링크는 주로 Adafruit 로 이동합니다 . 영국 고객은 Pimoroni 를 영국 기반 대안으로 고려할 수 있으며 Amazon은이 모든 것이 아니지만 대부분이 있습니다).

  • 라즈베리 파이는 (여기 파이 3 모델 B를 사용 하겠지만, GPIO 핀 어떤 모델이 작동합니다 - 당신은 당신이 그것에 어떤 헤더를 납땜해야합니다 파이 제로를 사용하려는 경우). 40 핀이있는 Pi 2 또는 3이 있다고 가정하겠습니다.
  • 전원 공급 장치 당신의 파이를위한
  • 어떤 종류의 케이스 는 아마도 Pi를 보호하는 데 좋은 아이디어 일 것입니다 (하지만 조명을 연결하기 위해 GPIO 핀을 노출하려면 뚜껑을 열어 두어야합니다)
  • 마이크로 SD 카드 에 운영 체제를 설치 (또는 하나 얻을 사전 설치된 OS를 ). 운영 체제를 직접 설치하려면 SD 카드 리더가있는 Mac, PC, Linux 시스템이 필요합니다.
  • Low Voltage Labs신호등 세트 (2 개 팩은 좋은 가치)
  • Pi에 입력 할 모든 USB 키보드
  • Pi의 출력을 표시하는 모든 HDMI 디스플레이

Low Voltage Labs 신호등은 4 개의 핀을 사용하여 Pi에 연결됩니다. 이들 중 하나는 접지되어야하며 나머지 세 개는 개별 LED를 제어하는 ​​데 사용되는 실제 GPIO 핀입니다.

Pi의 전원을 켜기 전에 신호등을 연결하여 핀이 빨간색으로 강조 표시된 GPIO 핀에 연결되도록합니다.

pinout.xyz의 Raspberry Pi GPIO 핀아웃

완료되면 다음과 같이 보일 것입니다. (오른쪽에 있는지 확인하는 쉬운 방법은 하단에 USB 포트가있는 Pi를 볼 때 핀의 왼쪽 행에있는 표시등을 찾는 것입니다. 그런 다음 8 개의 핀을 세고 거기에 조명을 부착하십시오).

아직 Pi를 켜지 마십시오. 먼저 운영 체제 이미지를 준비해야합니다.

운영 체제 설정

공식 Raspberry Pi 사이트에서 다운로드 할 수있는 Raspbian Stretch Lite OS를 설치합니다 . 도움이 필요한 경우 훌륭한 설치 가이드를 찾을 수도 있습니다 . Resin.io 의 무료 Etcher 도구는 운영 체제 이미지를 마이크로 SD 카드로 전송할 때 도움이됩니다.

운영 체제를 설치했으면 로그인 할 수 있는지 확인하고 유선 또는 Wi-Fi 인터넷 연결이 구성되어 있는지 확인하십시오.

이제 계속해서 조명을 켜고 끌 수 있습니다!

종속성 설치

Bash는 운영 체제와 함께 제공되므로 설치해야 할 유일한 것은 git이므로 GitHub에서 샘플 코드를 다운로드 할 수 있습니다.

$ sudo apt-get install git
$ git --version
git version 2.11.0

영국 조명 시퀀스 (빨간색, 빨간색 + 호박색, 녹색, 호박색, 빨간색)에서 신호등을 실행하는 것을 보여주기 위해 샘플 C 코드를 작성했습니다.

GitHub에서이 예제의 소스 코드를 가져 오려면 :

$ git clone https://github.com/simonprickett/bash-traffic-lights-pi.git

추가 종속성을 추가하지 않고도 Bash 스크립트는 sysfs를 사용하여 Pi의 GPIO 핀에 액세스하고 제어 할 수 있습니다. 이는 개별 핀을 입력 또는 출력으로 구성하고 해당 값을 설정 및 읽기 위해 조작 할 수있는 파일 시스템 경로 세트로 표시됩니다. Pi에서 이러한 경로는 다음과 같습니다.

/sys/class/gpio/gpio<pin_number>

/sys/class/gpio/gpio11/direction
/sys/class/gpio/gpio11/value

sysfs에서 사용하는 핀 번호 지정 체계는 Broadcom (BCM)의 것이므로 사용해야하는 핀 번호는이 기사 앞부분의 다이어그램에있는 것과 일치합니다.

데모 실행

데모 시작은 루트로 스크립트를 실행하는 것만 큼 간단합니다.

$ cd bash-traffic-lights-pi
$ sudo ./trafficlights.sh

sudo스크립트를 시작할 때 의 사용에 유의하십시오 . 이를 통해 sysfs를 사용하여 GPIO 핀을 제어하는 ​​데 필요한 파일 경로를 쓸 수있는 액세스 권한이있는 루트 사용자로 실행할 수 있습니다.

작동 원리

다음 trafficlights.sh은 GitHub 저장소에 포함 된 코드입니다 .

1 ~ 13 행은 우리가 필요로하는 것이 더 의미있는 이름을 갖도록 몇 가지 변수를 설정합니다. 빨간색 LED는 GPIO 9, 노란색은 10, 녹색은 11에 있습니다. 공통 기본 경로 /sys/class/gpio도 많이 사용할 것이므로 추상화합니다 . ON그리고 OFF그들이 실제보다 더 의미있는로 사용 1하고 0스크립트가 사용하는 값.

핀 내보내기

sysfs를 통해 GPIO 핀을 사용하려면 먼저 적절한 경로를 사용할 수 있도록 각 핀을 "내보내기"해야합니다. exportPin16-21 행 의 기능 이이를 수행합니다. 예를 들어 9 번 핀을 내보내려면 다음 명령을 사용합니다 (모든 변수가 해당 값으로 확인되면).

echo "9" > /sys/class/gpio/export

핀 방향 설정

핀은 입력 또는 출력에 사용할 수 있습니다. 이 경우 신호등에있는 세 개의 LED를 각각 제어하기위한 출력으로 사용해야합니다. 기능 setOutput(24-27 행)은 핀의 "방향"경로로 "out"을 전송하여이를 수행합니다. GPIO 9의 예 :

echo "out" > /sys/class/gpio/gpio9/direction

setLightState30-33 행의 기능 은 GPIO 핀을 높음 (1 — 켜짐) 또는 낮음 (0 — 꺼짐)으로 설정하여 조명 중 하나를 켜고 끄는 것을 처리합니다. 핀의 "값"경로에 1 또는 0을 기록하여이를 수행합니다. GPIO 9의 예 :

echo "1" > /sys/class/gpio/gpio9/value

코드는 Ctrl-C를 누르고 SIGINT신호가 전송 될 때 종료되는 무한 루프에서 실행됩니다 . 이런 일이 발생했을 때 세 개의 조명을 모두 정리하고 끄려면 SIGINT신호 를 트랩하고 처리해야합니다 . 이는 함수를 정의하고에 shutdown대한 핸들러로 등록 하는 44 ~ 50 행을 통해 달성됩니다 SIGINT.

shutdownsetLightState3 개의 조명 각각을 끄는 또 다른 유틸리티 함수를 호출 합니다. 그런 다음 exit스크립트를 완전히 중지하고 제어를 셸로 반환하는 데 사용합니다.

메인 코드 루프

메인 코드 진입 점은 52 행에서 시작하며 앞서 정의한 기능을 사용하여 세 개의 필수 핀을 각각 내보내고 출력으로 설정합니다. 그런 다음 allLightsOff신호등 LED 3 개가 모두 꺼져 시작해야하는 알려진 상태에 있도록하는 유틸리티 기능을 호출합니다 .

라인 66-89는 setLightState영국 신호등 (빨간색, 빨간색 + 노란색, 녹색, 노란색, 빨간색, 반복 ...)에 대해 올바른 순서로 개별 신호등 LED를 켜고 끄는 데 사용하는 무한 루프입니다 . 내장 된 sleep명령을 사용하면 코드가 다음 상태로 이동하기 전에 몇 초 동안 각 상태를 유지할 수 있습니다.

이 프로젝트의 소스 코드는 GitHub에서 무료로 사용할 수 있습니다 . Raspberry Pi, Bash 스크립팅 또는이 둘의 조합에 대해 듣고 싶습니다. 시간이되면 더 많이 써보도록하겠습니다.

또한 읽기

Suggested posts

Express.js 시작하기

Express.js 시작하기

Express는 웹 및 모바일 앱을 만드는 경험을 즐겁게 만드는 기능 세트가 포함 된 Node.js 프레임 워크입니다.

Jetpack Compose로 IntelliJ IDEA의 스플래시 화면 모방

Jetpack Compose로 IntelliJ IDEA의 스플래시 화면 모방

IntelliJ IDEA의 최신 버전 (이 출판 당시 2021.1)에는 아래와 같이 다양한 색상의 모양을 포함하는 그리드를 기반으로하는 멋진 스플래시 화면이 있습니다.이 게시물의 목표는이 패턴을 모방 한 Jetpack Compose 컴포저 블을 구현하는 것입니다.