pin.py: Raspberry Pi & Arduino 제어 라이브러리
pin.py는 라즈베리파이의 GPIO 핀을 직접 제어하고, 시리얼 통신을 통해 아두이노를 제어할 수 있는 기능을 제공하는 파이썬 라이브러리입니다. Rasp 클래스와 Ard 클래스로 구성되어 있습니다.
주요 기능
- 라즈베리파이 GPIO 제어 (
Rasp클래스):- 디지털 입력/출력
- 초음파 센서(HC-SR04) 거리 측정
- 서보 모터 제어 (PWM)
- 인터럽트(Edge) 감지
- 아두이노 시리얼 제어 (
Ard클래스):- 디지털/아날로그 입출력
- 서보 모터 제어
- 인터럽트(Edge) 감지
- 다중 아두이노 지원
설치 및 요구사항
pip 를 통해 설치
pip install rpi-arduino-pin
주의: gpiozero 라이브러리는 rpi-arduino-pin 설치 시 자동으로 함께 설치됩니다.
주의
- 이 라이브러리는 RaspberryPi 환경에서만 사용할수 있습니다.
아두이노 설정
Ard 클래스를 사용하려면, pin.py에서 보내는 시리얼 명령어를 해석하여 실행할 수 있는 스케치가 아두이노에 업로드되어 있어야 합니다. (pin/Ard_ino/ard.ino 파일 참조)
Rasp 클래스 사용법 (라즈베리파이)
1. 초기화 및 정리
GPIO를 사용하기 전에 Setup을 호출하고, 사용이 끝나면 Clean을 호출하여 리소스를 정리해야 합니다.
from pin import Rasp
import time
# GPIO 핸들 초기화
Rasp.Setup()
try:
# 여기에 코드 작성
Rasp.Write(17, 1) # GPIO 17번 핀에 HIGH 출력
time.sleep(1)
print(f"GPIO 17번 핀 상태: {Rasp.Read(17)}")
finally:
# 사용한 모든 핀을 정리하고 핸들을 닫습니다.
Rasp.Clean()
print("GPIO가 정리되었습니다.")
2. 디지털 입출력
Rasp.Write(pin_num, value):value(0 또는 1)를 지정된 핀에 출력합니다.Rasp.Read(pin_num): 지정된 핀의 디지털 값을 읽어 0 또는 1을 반환합니다.
3. 초음파 센서 거리 측정
Rasp.GetDistance(trig_pin, echo_pin): 트리거 핀과 에코 핀을 사용하여 거리를 cm 단위로 측정합니다.
# Trig: GPIO 23, Echo: GPIO 24
distance = Rasp.GetDistance(23, 24)
if distance != -1:
print(f"측정된 거리: {distance:.2f} cm")
else:
print("측정 실패")
4. 서보 모터 제어
Rasp 클래스의 서보 모터 제어는 내부적으로 gpiozero 라이브러리를 사용합니다. 이는 라즈베리파이 5와 같은 최신 모델에서 서보 제어의 안정성과 호환성을 높이기 위함입니다.
Rasp.ServoWrite(pin_num, angle): 지정된 핀에 연결된 서보 모터를angle(0~180도)만큼 회전시킵니다.Rasp.ServoStop(pin_num): 서보 모터 작동을 중지합니다.
# GPIO 18번 핀에 연결된 서보 모터
Rasp.ServoWrite(18, 90) # 90도로 회전
time.sleep(1)
Rasp.ServoStop(18)
Ard 클래스 사용법 (아두이노)
Ard 클래스는 이제 인스턴스 기반으로 작동하며, 여러 아두이노를 동시에 제어할 수 있습니다. 핀 모드 설정은 각 메소드 호출 시 자동으로 처리됩니다.
1. 아두이노 연결 및 종료
아두이노와 통신을 시작하려면 Ard 객체를 생성하고, 사용이 끝나면 close 메소드를 호출합니다.
from pin import Ard
import time
# 아두이노와 시리얼 연결 시작 (포트와 보드레이트 지정)
# 여러 아두이노를 연결하려면 각각 다른 포트로 Ard 객체를 생성합니다.
uno = Ard(port="/dev/ttyACM0", baud=9600)
# mega = Ard(port="/dev/ttyACM1", baud=9600) # 예시: 두 번째 아두이노
try:
# LED를 1초간 켭니다. (핀 모드 자동 설정)
uno.write(13, 1) # 13번 핀에 HIGH 출력
time.sleep(1)
uno.write(13, 0) # 13번 핀에 LOW 출력
# 아날로그 값 읽기
# sensor_val = uno.analog_read(A0) # A0 핀의 아날로그 값 읽기
# print(f"A0 핀 아날로그 값: {sensor_val}")
finally:
# 아두이노 연결을 닫고 서보를 해제합니다.
uno.close()
# mega.close() # 예시: 두 번째 아두이노 정리
print("아두이노 연결이 종료되었습니다.")
2. 핀 제어
instance.write(pin_num, value): 디지털 핀에value(0 또는 1)를 씁니다. (자동으로OUTPUT모드 설정)instance.read(pin_num): 디지털 핀의 값을 읽습니다. (자동으로INPUT모드 설정)instance.analog_write(pin_num, value): 아날로그(PWM) 핀에value(0~255)를 씁니다. (자동으로OUTPUT모드 설정)instance.analog_read(pin_num): 아날로그 핀의 값을 읽습니다. (자동으로INPUT모드 설정)
3. 서보 모터 제어
instance.servo_write(pin_num, angle): 아두이노의 지정된 핀에 연결된 서보 모터를angle(0~180도)만큼 회전시킵니다.instance.servo_stop(pin_num): 서보 모터 작동을 중지합니다.
Metadata
Release files for rpi-arduino-pin 0.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rpi_arduino_pin-0.2.4.tar.gz | 7.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rpi_arduino_pin-0.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.8 kB
Release files / rpi_arduino_pin-0.2.4.tar.gz
| Download URL | rpi_arduino_pin-0.2.4.tar.gz |
|---|---|
| Size | 7.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f7aa00ee002a502736ecdae8280ff2b3e7dca9432701d7db0d768a3c66e560c8
|
|
BLAKE2b-256 checksum How to use checksums |
a2bf9d74ca59c97f918f67b1ad11d804d79623c2835a39e56d8e13fec99ec72b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.3
|
Release files / rpi_arduino_pin-0.2.4-py3-none-any.whl
| Download URL | rpi_arduino_pin-0.2.4-py3-none-any.whl |
|---|---|
| Size | 7.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db25e89e612c7d0565065149977b1850b730ac075b79bc60294e81c27fd3435f
|
|
BLAKE2b-256 checksum How to use checksums |
6e5c689adcc3a1b9f6c434f90d491b527e7637c7100f5fb7846988e062d5dbae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.3
|