Raspberry Pi를 사용한 C의 GPIO 액세스 : 신호등

Python 용 Raspberry Pi ( Python 기사 읽기 ), Node.js ( Node.js 기사 읽기 ), Node RED ( Node RED 기사 읽기 ), Java ( Java 기사 읽기 ) 에서 Low Voltage Labs 신호등 을 사용하는 방법을 설명하는 가이드를 작성 했습니다. ), Bash 스크립팅 ( Bash 기사 읽기 ), Swift ( Swift 기사 읽기 ), Go ( Go 기사 읽기 ) 및 Arduino ( Arduino 기사 읽기 )에서 GPIO 핀에 액세스하는 방법을 살펴볼 때가되었다고 생각했습니다. C 프로그래밍 언어.

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

쇼핑리스트

이를 시도하려면 다음이 필요합니다 (여기 링크는 주로 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 인터넷 연결이 구성되어 있는지 확인하십시오.

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

종속성 설치

C 소스 코드를 바이너리 실행 파일로 바꾸려면 몇 가지 도구가 필요합니다. gcc(C 컴파일러) 및 make(빌드 자동화 도구)가 설치되어 있는지 확인하겠습니다 .

$ gcc --version
gcc (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ make --version
GNU Make 4.1
Built for arm-unknown-linux-gnueabihf
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

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

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

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

$ git clone https://github.com/simonprickett/cpitrafficlights.git

$ cd cpitrafficlights
$ PROJECTDIR=`pwd`

WiringPi를 사용한 C 프로그래밍

WiringPi 는 C의 Raspberry Pi에서 GPIO 핀으로 작업하기위한 성숙하고 잘 테스트 된 라이브러리입니다.이를 사용하면 낮은 수준의 문제에 대해 걱정할 필요없이 조명을 제어하는 ​​비즈니스로 바로 이동할 수 있습니다.

WiringPi 설치

WiringPi는 "라이트"Raspbian 운영 체제와 함께 설치되지 않지만 쉽게 수정할 수 있습니다.

$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

다음으로 GitHub에서 다운로드 한 데모 코드를 컴파일하고 작동하는지 확인합니다.

$ cd $PROJECTDIR/cpitrafficlights/wiringpi
$ make
$ ./trafficlights

작동 원리

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

라인 1-4는 WiringPi 라이브러리의 헤더 파일 signal.h과 필요한 기타 기능을 가져 stdlib.h오고 사용자가 Ctrl + C를 눌렀을 때 깔끔하게 정리하고 종료하는 데 사용할 기능을 제공 stdio.h하여 상태를 출력 할 수 있습니다. 표준 출력을 통해 터미널에.

6-8 행은 각 조명을 제어하는 ​​GPIO 핀의 편리한 이름을 제공합니다. WiringPi는 다른 핀 번호 체계를 사용하므로 GPIO 9 (빨간색)는 예를 들어 핀 13이됩니다. 이 매핑 다이어그램 은 다른 프로그래밍 언어에 대한 다른 Pi Traffic Light 기사에서 사용되는 WiringPi 핀 번호와 해당 BCM 모드 핀 번호를 보여줍니다.

13-17 행 digitalWrite은 조명이 연결된 각 핀을 설정 하는 WiringPi의 기능을 사용하여 모든 조명을 끄는 편의 기능을 LOW정의합니다 (WiringPi에 의해 정의 됨).

19-22 행은 사용자가 프로그램을 종료하고 Ctrl + C를 누르고 싶을 때 호출되는 함수를 정의합니다. 그러면 모든 조명이 꺼지고 쉘로 돌아갑니다.

24 ~ 64 행은 진입 점 / main함수로, 먼저 19 ~ 22에 정의 된 함수를 SIGINT(Ctrl + C)에 대한 핸들러로 등록하고 신호를 트래핑하고 처리하여 깔끔하게 종료하고 도중에 조명을 끌 수 있도록합니다. 밖. 라인 27-30은 WiringPi 라이브러리를 초기화하고 라인 32-34는 우리가 출력으로 사용하는 각 GPIO 핀을 구성합니다. 상수 pinMode와 마찬가지로 WiringPi에서 제공하는 함수 OUTPUT입니다.

그런 다음 36 행에서 모든 조명을 꺼서 시작할 때 알려진 상태에 있는지 확인합니다. 코드 while는 WiringPi의 digitalWrite기능을 사용하여 개별 조명을 켜 HIGH거나 끄는 무한 루프에 들어갑니다 ( WiringPi에서 LOW제공하는 상수). 또한 delayWiringPi에서 제공 하는 기능 을 사용 하여 조명 상태를 변경하기 전에 몇 초 동안 대기합니다. 빨간색, 빨간색 / 노란색, 녹색, 노란색을 순환하면 루프가 다시 시작되고 사용자가 Ctrl + C를 눌러 SIGINT신호 처리기 를 호출 할 때까지 무한정 계속됩니다 .

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

Suggested posts

AI 기반 자동화는 산업 운영에서 점점 더 중요한 요소가되고 있습니다

Christine Boles, 사물 인터넷 그룹 부사장, Intel Corporation의 산업 솔루션 부문 총괄 관리자

AI 기반 자동화는 산업 운영에서 점점 더 중요한 요소가되고 있습니다

4 차 산업 혁명 (종종 인더스트리 4.0이라고도 함)이 가속화되고 있으며 많은 기업이이를 최대한 활용하고 있습니다.

MySQL 8 성능 벤치 마크

MySQL 8 성능 벤치 마크

이 기사에서는 MySQL 8 기본 구성과 innodb_dedicated_server 지원 구성과

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.