라즈베리파이의 GPIO는 General Purpose Input/Output의 약자로 범용 입출력 인터페이스를 의미합니다. 푸시버튼, LED, 센서 등의 다양한 외부장치를 제어하는 데 사용되는 핀입니다.
현재 출시되는 모든 라즈베리파이 모델은 40 pin의 GPIO를 제공하며, 각 핀의 기능은 모델에 관계없이 동일합니다. 핀의 번호를 매기는 방법은 커넥터의 핀번호를 기준으로 하는 방법 (Physical/Board)과 Broadcom CPU의 채널번호를 기준으로 하는 방법(GPIO/BCM)이 있습니다.
그래블로에서 사용되는 모든 핀번호는 GPIO/BCM 기준입니다. 그러므로 GPIO 핀번호와 커넥터의 핀 번호를 혼동하지 않도록 유의해야 합니다.
위 그림의 핀 맵에서 원 안에 표시된 번호가 커넥터의 핀 번호이며 “GPIO xx” 로 표시된 번호가 GPIO 핀 번호입니다.
시중에 판매중인 GPIO 확장보드를 이용하면 보다 편리하게 GPIO에 연결할 수 있습니다.
각 핀의 기능을 좀 더 자세히 살펴보면 아래와 같습니다.
3.3V, 5V, GND(Ground)
외부장치에 전원을 공급하기 위한 핀 (3.3V/5V는 +극, GND는 -극)
연결되는 외부장치의 소모 전류는 핀의 최대 허용전류를 초과하지 않아야 합니다. – 3.3V 핀 : 약 800mA – 5V 핀 : 약 2.5A 에서 라즈베리파이 자체 소모 전류 (카메라, USB 등 포함) 와 3.3V 핀 소모 전류를 뺀 값
모터, 많은 갯수의 LED 등 외부장치의 소모 전류가 큰 경우에는 가급적 별도의 외부전원으로 공급하는 것을 권장합니다.
하드웨어 I2C 핀
GPIO 2,3 은 I2C 통신을 위한 핀입니다. 일반 디지털 입출력 핀으로도 사용할 수 있습니다.
하드웨어 SPI 핀
GPIO 7,8,9,10,11은 SPI통신을 위한 핀입니다. 일반 디지털 입출력 핀으로도 사용할 수 있습니다.
시리얼(UART) 통신 핀
GPIO 14, 15는 시리얼(UART)통신을 위한 핀입니다. 일반 디지털 입출력 핀으로도 사용할 수 있습니다.
하드웨어 PWM 핀
GPIO 12, 13은 하드웨어 PWM 출력을 위한 핀입니다. 일반 디지털 입출력 핀으로도 사용할수 있습니다.
기타 GPIO 핀
일반 디지털 입출력을 위한 핀입니다.
라즈베리파이는 아날로그 입력 핀이 존재하지 않습니다. 그러므로 아날로그 신호를 입력받기 위해서는 ADS1115 와 같은 별도의 아날로그-디지털 컨버터 (ADC)를 사용해야 합니다.
¹ 블루투스가 탑재된 라즈베리파이 모델은 Secondary UART가 블루투스 전용으로 사용됩니다. ² 라즈베리파이 3의 경우, GPU frequency scaling 기능으로 인해 Mini UART 통신에 문제가 발생할 수 있습니다. ³ 라즈베리파이 4에는 숨겨진 Full UART 4개 (UART2 ~ UART5) 가 존재합니다. 설정을 변경하여 UART 포트를 추가할 수 있습니다.
장치
UART는 라즈베리파이OS (리눅스)에서 장치로 인식하며 장치명은 아래와 같습니다.
UART
장치명
Full UART (UART 0)
/dev/ttyAMA0
Mini UART (UART 1)
/dev/ttyS0
라즈베리파이 모델에 따라 Primary UART의 타입이 다르므로 아래와 같이 Symbolic link 이름을 사용할 수도 있습니다.
UART
장치명
Primary
/dev/serial0
Secondary
/dev/serial1
Mini UART 대신 Full UART 사용하기 (라즈베리파이 3)
라즈베리파이3에서는 GPU frequency scaling 기능으로 인해 Mini UART (UART 1)를 사용한 시리얼통신에 문제가 발생할 수 있습니다. 다음 설정을 통해 Full UART (UART 0)를 시리얼 통신에 사용하도록 변경할 수 있습니다.
라즈베리파이 터미널을 열고 아래와 같이 입력합니다.
sudonano/boot/config.txt
내용의 마지막에, 다음 내용을 추가합니다.
dtoverlay=miniuart-bt
Ctrl + O -> 엔터 -> Ctrl + X 를 눌러 저장하고 편집기를 종료합니다.
아래 명령으로 라즈베리파이를 재부팅합니다.
sudoreboot
이제 시리얼통신에 Full UART (UART 0)을 사용하므로 안정적인 통신이 가능합니다. 다만, 이제 블루투스 통신은 사용이 불가능합니다.
숨겨진 UART 사용하기 (라즈베리파이 4)
라즈베리파이 4에는 숨겨진 4개의 Full UART가 존재하며, 설정을 변경하여 사용할 수 있습니다. 라즈베리파이 터미널을 열고 아래와 같이 입력합니다.
sudonano/boot/config.txt
내용의 마지막에, 사용하고자 하는 숨겨진 UART를 추가합니다. 여기서는 4개 모두 추가해봅니다.
동작-미디어 재생 또는 전자 악기을 실행할 때, 라즈베리파이의 오디오 잭 또는 HDMI에서 사운드가 출력되지 않는 문제입니다.
원인
라즈베리파이 OS 는 PulseAudio 를 기본 사운드 서버로 사용합니다. 그래블로 컨트롤러 소프트웨어는 관리자 권한으로 실행되지만 PulseAudio는 관리자 권한을 허용하지 않습니다. 그러므로 아래와 같이 라즈베리파이 OS의 볼륨조절 및 사운드 출력 변경은 그래블로에는 적용되지 않습니다.
해결방법
관리자 권한에서는 PulseAudio 대신 Alsa가 기본 사운드 서버로 사용됩니다. 그러므로 별도의 명령을 통해 볼륨을 조절하거나 출력 사운드카드를 변경할 수 있습니다.
볼륨조절
콘솔에서 아래의 명령을 입력합니다.
sudoalsamixer
키보드의 F6키를 누르면 볼륨을 조절할 사운드 카드를 선택할 수 있습니다.
키보드의 상,하 방향키를 이용하여 사운드 카드의 볼륨을 조절할 수 있습니다.
출력 사운드카드 변경
아래의 명령은 현재 사용가능한 사운드카드의 목록을 번호와 함께 보여줍니다.
cat/proc/asound/cards
다음의 명령으로 파일을 엽니다.
sudonano/etc/asound.conf
아래의 내용에서 숫자 부분을 목록 중 출력을 원하는 사운드 카드의 번호로 변경합니다. (예: hdmi0 -> 1)
라즈베리파이는 영국의 캠브리지 대학교의 라즈베리파이 재단에서 학생들의 프로그래밍 학습을 위한 저비용 컴퓨터로 개발되었습니다.
라즈베리파이는 CPU, 그래픽 드라이버, 메모리, 운영체제, 이더넷, 블루투스, 와이파이 등 일반적인 PC의 특징을 모두 가지고 있습니다. 그렇기 때문에 라즈베리파이와 같은 시스템을 싱글 보드 컴퓨터 (SBC, Single Board Computer)라고도 부릅니다.
사용자는 키보드, 모니터, 마우스 등을 연결해서 인터넷 사용, 음악/동영상 재생, 프로그래밍 작성과 같이 PC에서 가능한 작업을 모두 할 수 있습니다. 또한 40핀 GPIO를 제공하므로 외부 장치와 연결하여 제어하거나 통신이 가능합니다.
PC, 라즈베리파이 등에 사용되는 CPU를 마이크로 프로세서 (Micro Processor)라고 부르며 복잡한 연산, 그래픽 처리를 수행할 수 있습니다. 또한 멀티 쓰레드를 지원하므로 여러 작업을 동시에 수행할 수 있는 장점이 있습니다.
다만 아두이노에 비해 비교적 가격이 비싸며, 외부 장치를 제어하기 위해서는 파이썬, C/C++, C# 등 다양한 프로그래밍 언어를 사용할 수 있으나 전용 개발 환경 (IDE)가 존재하지 않고 오픈 소스 라이브러리가 부족한 단점이 있습니다.
아두이노
아두이노는 이탈리아의 Massimo Banzi와 David Cuartielles 교수에 의해 개발된 오픈소스 하드웨어/소프트웨어 플랫폼으로 센서, 액츄에이터와 같은 주변기기를 쉽게 제어할 수 있는 저렴하고도 쉬운 툴을 목표로 개발되었습니다.
아두이노는 마이크로 컨트롤러 (Micro Controller) 기반의 소형 보드이며 외부 장치를 직접 제어할 수 있는 모든 필요한 기능을 내장하고 있습니다. 그러나 아두이노에는 펌웨어나 운영체제가 존재하지 않아 외부의 PC에서 C/C++ 언어로 프로그래밍 후 업로드해야 합니다.
인터넷, 음악/동영상, 블루투스, 와이파이등의 기능은 탑재되어 있지 않으며 CPU의 성능이 낮아 복잡한 연산이나 그래픽 처리는 불가능합니다. 또한 여러 개의 작업을 동시에 실행할 수 없으며 한번에 하나의 작업만 실행 가능합니다.
다만 외부 장치의 제어에 특화되어 있어 전용 개발 환경 (IDE)를 사용하여 프로그래밍할 수 있으며 다양한 오픈소스 라이브러리를 활용할 수 있고 가격이 매우 저렴한 것이 장점입니다.