-
[라즈베리파이] GPIO 제어 3가지 방법SW/Embedded 2018. 1. 12. 17:37
GPIO
-
입력, 출력 동시에 불가능 하다.(2가지 모드중 한가지를 선택)
-
핀은 한가지 이상의 기능을 하기도 한다.(데이터 시트 참조)
-
제어
-
직접 레지스터에 접근 하여 사용하는 방법이 있다.
-
리눅스에서 제공하는 sysfs를 사용하는 방법이 있다.
-
라이브러리를 활용해서 제어할수 있다.
-
-
레지스터를 다루기 위해 먼저 출력/입력 모드를 설정한다.
1. 직접 레지스터에 접근하여
-
가상주소 - 물리주소 - 버스주소가 있다.
-
리눅스의 응용 프로그램은 가상주소 접근만 가능하다.
-
/dev/mem파일 을 사용하여 물리주소를 사용한다.(루트권한)
-
0핀~9 = 레지스터 0 , 10~19 = 레지스터 1 … 레지스터 6까지 있다.(데이터시트 참조)
<stdio.h> <stdlib.h> <fcntl.h><unistd.h> <stdint.h> <sys/mman.h> 선언define MMAP_SIZE 4096define GPIO_PHY_BASE_ADDRESS 0x3F200000 //물리주소 시작INPUT 0b000OUTPUT 0b001HIGH 1LOW 0typedef struct TAG_GPIO_REGSGPIO_REGS, *pGPIO_REGS;pGPIO_REGS pGpio;int fd;intvoidvoidvoidvoid2. sysfs를 사용하여
-
리눅스 커널이 제공하는 가상 파일 시스템
-
쉘 스크립트를 사용한다. (사용안할 것 같아서 여기서는 패스)
3. 라이브러리를 사용하여 (pigpio사용)
-
lpthread : 링커에서 링크할 때 처리한다.
-
pthread : 컴파일 단계에서 처리 한다.+링커에서
-
pigpoio 대몬 실행 : sudo pigpiod / sudo killall pigpiod (소켓, 파이프인터페이스 제공) - 씨,파이썬 또는 다른 언어를 할 때 데몬에다 요청해야…(외부에서 가능?)- #### 해보기!!!
데몬 - (통신)- 씨 I/F- 파이썬 모듈 I/F로 할 수 있고pigpio i/f를 사용 할 수도 있다.(데몬 없이 사용할 때)gpio에서 입력 받기
- level = gpio_read(pi, PIN);
예제 코드
/*스위치 1 led on스위치 2 led off*/include<stdio.h>include<pigpiod_if2.h>define PINNO1 23define PINNO2 16define LED 13int count;voidvoid// bouncing이 발생하여 스위치를 누를 때 여러번 눌리는 현상의 경우// 올라올때 tick - 내려갈때 tick 가 10000보다(thredhold 값) 클때만 실행하게..int결과 (그림클릭)
예제 코드
/*스위치 버튼 여러번 누르고 enter키 led가 누른횟수 블린킹*/include<stdio.h>include<pigpiod_if2.h>define PINNO 23define LED 13int count;uint32_t falling_tick, rising_tick;voidvoidint결과 (그림클릭)
'SW > Embedded' 카테고리의 다른 글
[라즈베리파이] Shift Register (0) 2018.01.28 [라즈베리 자동차] 파이썬을 C/C++에서 사용하기 (0) 2018.01.26 [라즈베리파이] PWM 제어 (0) 2018.01.26 [라즈베리파이] uart 통신 #1 (1) 2018.01.02 [스마트 자동차] 물품 & 조립 #1 (2) 2017.12.31 -