라즈베리파이:GPIO: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
편집 요약 없음
 
(같은 사용자의 중간 판 2개는 보이지 않습니다)
6번째 줄: 6번째 줄:
===유의===
===유의===


* GPIO 핀으로 3.3V 이상이 들어오지 않게 각별히 주의하자.
*GPIO 핀으로 3.3V 이상이 들어오지 않게 각별히 주의하자.
* 코드가 종료되는 등 상황에서 GPIO.cleanup() 을 실행해주어 자원을 돌려주고 점유한 핀을 초기화 해야 한다.
*코드가 종료되는 등 상황에서 GPIO.cleanup() 을 실행해주어 자원을 돌려주고 점유한 핀을 초기화 해야 한다.


다양하게 제어하는 방식이 있지만, 파이썬이 적절한 대안일 듯하다.
다양하게 제어하는 방식이 있지만, 파이썬이 적절한 대안일 듯하다.
17번째 줄: 17번째 줄:
===입력===
===입력===
3.3V까지 받아들이며, 디지털신호만 받는다. 아날로그를 받기 위해선 ADC기능을 가진 IC를 사용해야 한다.
3.3V까지 받아들이며, 디지털신호만 받는다. 아날로그를 받기 위해선 ADC기능을 가진 IC를 사용해야 한다.
<br />
==SPI 통신==
Serial Peripheral Interface. 시리얼 통신을 사용하려면 다음과 같은 과정이 필요하다.
{| class="wikitable"
{| class="wikitable"
!과정
!의도
!설명
!설명
!방법
!방법
|-
|-
|설정
|호출
|라즈베리파이의 설정을 변경한다.
|
|라즈베리파이 설정 > 인터페이스 > SPI, I2C를 Enable로 설정
|import RPi.GPIO as GPIO
|-
|-
|리부팅
|핀 설정
|설정을 반영하기 위해.
|
|sudo reboot
|GPIO.setmode(GPIO.BOARD)  # 핀 번호로 사용하겠다는 설정.
GPIO.setmode(GPIO.BCM)  # GPIO번호로 사용하겠다는 설정.
|-
|-
|SPI라이브러리 설치
|핀 설정2
|설치하고자 하는 위치에서 실행한다.
|스위치를 누르지 않은 상태에선 0이 되야 할 것 같지만..
|git clone [./Git://github.com/doceme/py-spidev git://github.com/doceme/py-spidev]
|-
|파이썬에서의 활용
|
|<syntaxhighlight lang="python">
import spidev


spi = spidev.SpiDev()  # 인스턴스 생성.
라즈베리파이에선 아무 값도 들어오지 않는 floating 상태가 된다.
spi.open(0,0)  # 통신 시작.
spi.max_speed_hz = 100000  # 통신속도 설정.
</syntaxhighlight>
|}


==I^2C 통신==
이를 위해 풀다운 저항을 달아주어 이를 통해 GND에 연결되게 하는데, 소프트웨어로도 조작이 가능하다.
Inter-Integrated Circuit. 동기식 시리얼 통신. SPI통신에선 슬레이브 기기가 추가될 때마다 통신라인이 필요한 것에 비해, IIC에선 간단하게 많은 기기를 설치할 수 있다. 대신 느리다. 때문에 저속 장치들 사이의 통신에 사용된다.
|GPIO.setup(채널, GPIO.OUT)  # 출력으로 사용.
GPIO.setup(채널, GPIO.IN)  # 입력으로 사용.


모든 기기들을 SCL과 SDA핀에 병렬연결해주면 된다.
GPIO.setup(채널, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)  # 신호가 들어오지 않을 땐 0을 주겠다는 의미.
{| class="wikitable"
!과정
!설명
!방법
|-
|-
|설정
|핀 출력
|라즈베리파이의 설정을 변경한다.
|
|라즈베리파이 설정 > 인터페이스 > SPI, I2C를 Enable로 설정
|GPIO.output(채널, 1)  # 3.3v 출력. GPIO.HIGH, True로 대체 가능.
|-
GPIO.output(채널, 0)  # GPIO.LOW, False로 대체 가능.
|리부팅
|설정을 반영하기 위해.
|sudo reboot
|-
|확인
|/dev/i2c-1 과 같은 답변을 얻었다면 설정이 제대로 된 것.
|ls /dev/i2c*
|-
|-
|툴 설치
|초기화
|기기를 SCL과 SDA에 연결한 후에
|세팅을 초기화하고 리소스 반환.
<code>i2cdetect -y 1</code>을 명령하면 연결된 주소가 나온다.
GPIO 핀 쇼트 등의 하드웨어 문제를 방지한다.
|sudo apt-get install -y i2c-tools
|-
|파이썬에서의 활용
|보통 기기를 활용하는 라이브러리를 사용할 때 자동으로 지정하여 읽는데..


라이브러리별로 지정하는 방법이 다르다.
코드의 시작이나 끝에 넣어주면 좋다.
|
|GPIO.cleanup()
|}
|}<br />


#
#

2022년 11월 3일 (목) 08:27 기준 최신판

틀:라즈베리파이

  1. 라즈베리파이:개요
    1. 틀:우분투
    2. 라즈베리파이:무선랜
    3. 라즈베리파이:블루투스
  2. 라즈베리파이:파이썬 제어
  3. 라즈베리파이:하드웨어
    1. 라즈베리파이:GPIO
      1. 라즈베리파이:시리얼 통신
    2. 라즈베리파이:카메라
    3. 라즈베리파이:서보모터
    4. 라즈베리파이:모터

개요[편집 | 원본 편집]

general-purpose input/output. 다용도 입출력. 라즈베리파이 보드에서 센서들을 추가하기 위해 기본적으로 사용되는 인터페이스. 기본적으로 아두이노와 유사한 구조로, 핀을 통해 신호를 읽거나 내뱉는 방식이다.

유의[편집 | 원본 편집]

  • GPIO 핀으로 3.3V 이상이 들어오지 않게 각별히 주의하자.
  • 코드가 종료되는 등 상황에서 GPIO.cleanup() 을 실행해주어 자원을 돌려주고 점유한 핀을 초기화 해야 한다.

다양하게 제어하는 방식이 있지만, 파이썬이 적절한 대안일 듯하다.

파이썬의 RPi.GPIO, WiringPi로 제어가 가능하다.

입출력[편집 | 원본 편집]

입력[편집 | 원본 편집]

3.3V까지 받아들이며, 디지털신호만 받는다. 아날로그를 받기 위해선 ADC기능을 가진 IC를 사용해야 한다.

의도 설명 방법
호출 import RPi.GPIO as GPIO
핀 설정 GPIO.setmode(GPIO.BOARD) # 핀 번호로 사용하겠다는 설정.

GPIO.setmode(GPIO.BCM) # GPIO번호로 사용하겠다는 설정.

핀 설정2 스위치를 누르지 않은 상태에선 0이 되야 할 것 같지만..

라즈베리파이에선 아무 값도 들어오지 않는 floating 상태가 된다.

이를 위해 풀다운 저항을 달아주어 이를 통해 GND에 연결되게 하는데, 소프트웨어로도 조작이 가능하다.

GPIO.setup(채널, GPIO.OUT) # 출력으로 사용.

GPIO.setup(채널, GPIO.IN) # 입력으로 사용.

GPIO.setup(채널, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # 신호가 들어오지 않을 땐 0을 주겠다는 의미.

핀 출력 GPIO.output(채널, 1) # 3.3v 출력. GPIO.HIGH, True로 대체 가능.

GPIO.output(채널, 0) # GPIO.LOW, False로 대체 가능.

초기화 세팅을 초기화하고 리소스 반환.

GPIO 핀 쇼트 등의 하드웨어 문제를 방지한다.

코드의 시작이나 끝에 넣어주면 좋다.

GPIO.cleanup()