라즈베리파이에 gpio pin을 이용하여 LED와 같이 간단한 조작을 테스트한다.
1. 라즈베리파이의 업데이트 및 업그레이드를 한다
-> $ sudo apt-get update
-> $ sudo apt-get upgrade
2. 오픈소스 https://github.com/WiringPi/WiringPi의 소스를 체크아웃하기 위해서
소스관리툴 git를 다운로드한다.
-> $ sudo apt-get install git-core
3. wiringPI 프로젝트를 통째로 받아온다
git을 통해서 소스를 다운받습니다.
-> $ git clone https://github.com/WiringPi/WiringPi.git
4. 빌드 및 설치를 진행한다
-> $ cd wiringPi
-> $./build
5. 설치가 잘 되었는지 아래의 명령어로 확인해 본다. (gpio -v는 버전을 확인하는 명령어이다.)
-> $ gpio -v gpio readall
LED 예제
GPIO Output 테스트에 사용될 GPIO는 GPIO 23번, 24번이다.
이는 각각 P1 헤더핀의 16번, 18번 핀에 해당된다.
LED 2개, 저항 220~330옴을 아래와 같이 라즈베리파이 P1 헤더핀의 16번, 18번핀에 연결해 주도록 하자.
아래의 회로도는 gpio의 output값을 High로 설정해 주면 LED가 ON, Low로 설정해 주면 off가 되는 구성이다.
(위의 예제들은 220~330옴 저항을 사용하는 것을 권장하고 있다. 라즈베리파이 3의 권장전력은 5V 2.5A이다. gpio 핀 출력 신호의 최대 전압은 3.3V이며, 각 pin당 약 18mA로 제한한다. 이때 옴의 법칙을 생각하며 LED의 전압강하에 따른 전류값을 측정하고 알맞은 저항을 선택한다. )
참고로 LED는 그림과 같이 다리가 짧은 쪽이 Cathode -, 긴 쪽이 Anode +이다.
Code 작성
1. 디렉터리 생성
-> mkdir gpio-test
-> cd gpio-test
2. 소스코드 작성
-> vi gpio-test.c
#include <stdio.h>
#include <wiringPi.h>
#define LED1 4 // BCM_GPIO 23
#define LED2 5 // BCM_GPIO 24
int main (void)
{
if (wiringPiSetup () == -1)
return 1 ;
pinMode (LED1, OUTPUT) ;
pinMode (LED2, OUTPUT) ;
for (;;)
{
digitalWrite (LED1, 1) ; // On
digitalWrite (LED2, 1) ; // On
delay (1000) ; // ms
digitalWrite (LED1, 0) ; // Off
digitalWrite (LED2, 0) ; // Off
delay (1000) ;
}
return 0 ;
}
3. 컴파일하기
-> gcc -o gpio-test gpio-test.c -lwiringPi
4. 프로그램 실행
-> ./gpio-test
gpio 관련 프로그램 실행은 항상 루트 권한으로 실행해줘야 한다.
이를 실행해 주면 gpio 23, 24번에 연결된 LED가 모두 켜진 후, 1초 대기, 그리고 두 LED가 모두 꺼지는 작업을 반복 수행하게 된다. 프로그램 종료는 Ctrl + C로 종료하면 된다.
초음파 센서 예제
Trig 핀은 wiringPi 기준 2번핀 (BCM 13번핀)에 연결해줍니다.
Echo 핀은 wiringPi 기준 3번핀 (BCM 15번핀)에 연결해줍니다.
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
int trig = 2 ;
int echo = 3 ;
int start_time, end_time ;
float distance ;
if (wiringPiSetup() == -1) exit(1) ;
pinMode(trig, OUTPUT) ;
pinMode(echo , INPUT) ;
while(1) {
digitalWrite(trig, LOW) ;
delay(500) ;
digitalWrite(trig, HIGH) ;
delayMicroseconds(10) ;
digitalWrite(trig, LOW) ;
while (digitalRead(echo) == 0) ;
start_time = micros() ;
while (digitalRead(echo) == 1) ;
end_time = micros() ;
distance = (end_time - start_time) / 29. / 2. ;
printf("distance %.2f cm\n", distance) ;
}
return 0 ;
}
이 때 음파의 속도 = 343 m/s (공기 온도 섭씨 25도)
343 x 100 cm/s -> 1 / 34300 = 2.9 x 10^-5 s/cm = 29 x 10^-6 s/cm = "29 us/cm" 이다.
음파의 속도 =343 m/s (공기 온도 섭씨 25도)
343x100 cm /s -> 1/ 34300 =2.9x10-5 s/cm = 29x10-6s/cm
=29 us/cm
'IoT > 라즈베리파이' 카테고리의 다른 글
라즈베리파이 GPIO 다루기 (0) | 2023.06.23 |
---|---|
라즈베리파이 Wifi 통신과 데이터베이스 연동 (0) | 2023.02.28 |
라즈베리파이 APM 설치 (0) | 2023.02.24 |
라즈베리파이3 SSH 연결 (0) | 2023.02.23 |
라즈베리파이3 시스템 설정 (0) | 2023.02.23 |