일단 라즈베리파이에 sd 카드가 꽃혀있어야 제어가 가능하므로, Rasberry Pi Imager 로 우분투 설치 후 진행하도록 하자
1. 빌드 도구 설치 (먼저 수행)
코드를 직접 빌드하기 위해 필요한 도구들을 먼저 설치합니다.
sudo apt update
sudo apt install wget unzip make gcc -y

2. pigpio 소스 코드 다운로드 및 설치
공식 소스 코드를 가져와서 컴파일하고 시스템에 설치하는 과정입니다. (약 1~2분 소요)
wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
cd pigpio-master
make
sudo make install
3. 설치 확인
설치가 잘 되었는지 확인하기 위해 다음 명령어를 쳐보세요. 버전 숫자가 나오면 성공입니다!
pigpiod -v
4. C언어 테스트 코드 작성
nano 편집기를 이용해 servo_test.c 파일을 만들기.
nano servo_test.c
아래 코드를 그대로 복사해서 붙여넣기. (SG90 서보모터 기준이다.)
#include <stdio.h>
#include <pigpio.h>
#define SERVO_PIN 18 // GPIO 18번 핀 사용 (물리적 12번 핀)
int main() {
// 1. pigpio 라이브러리 초기화
if (gpioInitialise() < 0) {
printf("pigpio 초기화 실패\n");
return 1;
}
printf("서보모터 테스트 시작 (Ctrl+C로 종료)\n");
while (1) {
// 0도 (500us)
printf("0도 이동\n");
gpioServo(SERVO_PIN, 500);
time_sleep(1);
// 90도 (1500us)
printf("90도 이동\n");
gpioServo(SERVO_PIN, 1500);
time_sleep(1);
// 180도 (2500us)
printf("180도 이동\n");
gpioServo(SERVO_PIN, 2500);
time_sleep(1);
}
// 3. 라이브러리 종료
gpioTerminate();
return 0;
}
(작성 후 Ctrl + O, Enter, Ctrl + X를 순서대로 눌러 저장하고 나오기.)
5. C코드 컴파일하고 실행하기
이제 라이브러리가 설치되었으니, 아까 작성한 servo_test.c 파일이 있는 곳으로 가서 다시 컴파일을 시도해 보세요.
컴파일:
gcc -o servo_test servo_test.c -lpigpio -lpthread -lrt
(우분투에서는 -lrt를 추가해주는 것이 더 안전합니다.)
실행:
sudo ./servo_test
처음에는 라즈베리파이랑 서보모터랑 바로 연결을 시켰다. 하지만 되지 않았고, 1.5V 짜리 건전지 2개랑 서보모터 연결해서도 해봤는데 전력이 부족한지 아예 동작이 안됐다.
하지만 갖고있는 3.7V 짜리 건전지를 사용하면 라즈베리파이나 모터가 타버릴수도 있다고 한다.
그래서 집에 있는 브레드보드 전원모듈을 사용해서 5V 로 맞춰주었더니 잘 동작했다.


이제 동작은 시켰으니 브레드보드 전원모듈 사용하지 않고도 동작하는 방법을 알아봐야겠다
제미나이 요약:
라즈베리 파이(Ubuntu) 서보모터 제어 가이드
라즈베리 파이에서 서보모터를 제어하기 위해서는 정확한 핀 맵 이해와 전원 공급, 그리고 라이브러리 실행 환경 최적화가 필수적이다.
1. 주요 준비물 및 하드웨어 구성
- 제어 보드: 라즈베리 파이 3/4 (Ubuntu OS)
- 모터: SG90 서보모터
- 전원: 7.4V 리튬이온 배터리 + 브레드보드 전원 모듈
- 연결 선: Freenove 키트의 수-암(M-F) 점퍼 와이어
2. 하드웨어 연결 (배선)
서보모터의 세 가지 선은 각각의 역할에 맞춰 정확한 위치에 연결해야 한다. 특히 외부 전원을 사용할 경우 라즈베리 파이와 배터리의 GND를 하나로 묶는 '공통 그라운드(Common Ground)' 작업이 반드시 필요하다.
| 서보모터 선 색상 | 역할 | 연결 위치 |
| 주황색 (Orange) | 신호 (Signal) | 라즈베리 파이 물리 12번 핀 (GPIO 18) |
| 빨간색 (Red) | 전원 (VCC) | 전원 모듈 5V 출력 |
| 갈색 (Brown) | 접지 (GND) | 전원 모듈 GND 및 라즈베리 파이 GND 공통 연결 |
주의: 서보모터는 전력 소모가 크므로 AA 건전지 2개($3\text{V}$)로는 구동이 어렵다. 7.4V 배터리를 전원 모듈에 연결하여 안정적인 5V를 공급하는 것이 권장된다.
3. 소프트웨어 환경 구축 및 실행
라즈베리 파이에서 정밀한 PWM 신호를 제어하기 위해 pigpio 라이브러리를 사용한다.
라이브러리 초기화 에러 해결
C언어 코드를 실행할 때 initInitialise: Can't lock /var/run/pigpio.pid 에러가 발생한다면, 이미 배경에서 pigpiod 데몬이 실행 중인 상태이다. C 프로그램이 직접 하드웨어 제어권을 갖기 위해서는 기존 데몬을 종료해야 한다.
# 1. 실행 중인 pigpiod 데몬 종료
sudo killall pigpiod
# 2. C 코드 컴파일 (pthread와 rt 라이브러리 링크 필수)
gcc -o servo_test servo_test.c -lpigpio -lpthread -lrt
# 3. 프로그램 실행
sudo ./servo_test
4. 트러블슈팅 요약
- Socket connect failed: pigs 명령어 사용 시 데몬(sudo pigpiod)이 실행되지 않았을 때 발생한다.
- 무반응 상태: 대부분 핀 번호 오해(Physical 12 = BCM 18)나 전원 부족, 또는 공통 그라운드 미연결이 원인이다.
- 하드웨어 보호: 7.4V 배터리를 컨버터나 전원 모듈 없이 라즈베리 파이에 직접 연결하면 보드가 손상될 위험이 크다.
참고영상: