라즈베리 파이, WiringPi를 이용한 GPIO 제어
WiringPi 설치하기전 Git 설치
sudo apt-get install git-core
라즈베리 파이 업데이트
sudo apt-get update
sudo apt-get upgrade
Git을 통해 WiringPi 내려받기
git clone git://git.drogon.net/wiringPi
다운로드 완료 후, 빌드 수행
cd wiringPi
./build
gpio 유틸리티 실행
GPIO 확장보드의 28과 29핀을 쓸 것. (BCM 20, 21)
라즈베리파이 GPIO (General purpose input/output)
74HC08N, Quad 2-input AND gate
#include <wiringPi.h>
#include <stdio.h>
#define A 28
#define B 29
int main(void)
{
wiringPiSetup();
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
while(1)
{
printf("A = Lo, B = Lo: Out = ?\n");
digitalWrite(A,LOW);
digitalWrite(B,LOW);
delay(1000);
printf("A = Lo, B = Hi: Out = ?\n");
digitalWrite(A,LOW);
digitalWrite(B,HIGH);
delay(1000);
printf("A = Hi, B = Lo: Out = ?\n");
digitalWrite(A,HIGH);
digitalWrite(B,LOW);
delay(1000);
printf("A = Hi, B = Hi: Out = ?\n");
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
delay(1000);
}
return 0;
} |
컴파일시 -lwiringPiDev 붙여줘야 함
pi@raspberrypi:~/wiringPi $ gcc -o Gpio GPIO_RPi.c -l wiringPi
실행
pi@raspberrypi:~/wiringPi $ sudo ./Gpio
실행결과
AND GATE이므로 28,29핀에 HIGH 신호가 들어올 때(4번째 PRINTF문) 불이 켜지는 것을 볼 수 있다.
digitalWrite(A,HIGH); digitalWrite(B,HIGH);
LED없이 출력값 보기
#include <wiringPi.h>
#include <stdio.h>
#define IN 27
#define A 28
#define B 29
int main(void)
{
wiringPiSetup();
pinMode(IN,INPUT);
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
while(1)
{
printf("A = Lo, B = Lo: Out = ");
digitalWrite(A,LOW);
digitalWrite(B,LOW);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
printf("A = Lo, B = Hi: Out = ");
digitalWrite(A,LOW);
digitalWrite(B,HIGH);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
printf("A = Hi, B = Lo: Out = ");
digitalWrite(A,HIGH);
digitalWrite(B,LOW);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
printf("A = Hi, B = Hi: Out = ");
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
}
return 0;
} |
위 소스 if 문에 대한 설명
1 == digitalRead(IN)) // 1은 참을 의미, 디지털 신호가 들어올 때.
1 =! digitalRead(IN)) // 1이 아닐때는 왼쪽과 같이 소스를 짤 수 있음.
결과 : 두 핀 모두 HIGH일 때, Hi라는 문장이 출력된다.
printf("A = Hi, B = Hi: Out = ");digitalWrite(A,HIGH); digitalWrite(B,HIGH); if(digitalRead(IN)) { printf("Hi\n"); }
'Linux & Network' 카테고리의 다른 글
해커스쿨에서 공부하기 / 텔넷 접속법 (0) | 2017.03.29 |
---|---|
TCP, 그리고 UDP 쉽게 알아보는 두 개념과 차이점 (0) | 2016.12.28 |
2016 04 18 TCP/IP / 유닉스 프로그래밍 (0) | 2016.04.18 |
2016 04-14 소켓 (0) | 2016.04.15 |
20160401_리눅스 터미널 및 통신 (0) | 2016.04.01 |