이 가이드는 Raspberry Pi Press 책에 있습니다. GPIO Zero를 사용한 간단한 전자 장치. 최신 Raspberry Pi 장치용으로 업데이트된 이 책에는 Raspberry Pi의 GPIO 핀을 사용하여 전자 프로젝트 구축을 시작하는 데 필요한 모든 정보가 포함되어 있습니다. GPIO Zero 라이브러리를 사용하여 Python으로 코딩된 프로젝트에는 LED 조명, 동작 경보, 거리 측정기, 레이저 그물 및 Raspberry Pi 로봇이 포함됩니다.
~ 안에 공식 라즈베리 파이 매거진 167호우리는 아날로그 센서에서 판독값을 얻기 위해 커패시터를 사용하는 트릭을 사용했습니다. Raspberry Pi가 아날로그 입력을 감지하는 가장 좋고 가장 신뢰할 수 있는 방법은 센서 및 기타 아날로그 입력을 연결하기 위한 8개의 입력 채널을 제공하는 MCP3008과 같은 아날로그-디지털 변환기(ADC) 칩을 사용하는 것입니다. 이렇게 하면 커패시터가 필요하지 않을 뿐만 아니라 전체 센서 출력 범위에 걸쳐 더 정확하고 즉각적인 판독값을 얻을 수 있습니다.
이 튜토리얼에서는 전위차계를 MCP3008에 연결하여 손잡이를 돌려 LED의 밝기를 제어합니다. 그런 다음 두 번째 전위차계를 추가하고 두 개의 전위차계를 사용하여 방송국을 변경하고 볼륨을 조정하는 인터넷 라디오를 만듭니다.

SPI 활성화
ADC 칩의 아날로그 값은 SPI 프로토콜을 사용하여 Raspberry Pi로 전송됩니다. 이는 기본적으로 GPIO Zero에서 작동하지만 전체 SPI 지원을 활성화하면 더 나은 결과를 얻을 수 있습니다. 먼저 Python이 spidev 패키지가 설치되어 있습니다(기본적으로 설치되어 있어야 함). 터미널 창을 열고 다음을 입력하세요.
$ sudo apt install python3-spidev
그런 다음 Raspberry Pi 메뉴를 클릭하고 기본 설정을 선택한 후 제어 센터를 연 다음 인터페이스 섹션에서 SPI를 활성화합니다. 확인을 클릭하고 Raspberry Pi를 다시 시작하세요. 다음을 실행하여 명령줄 도구를 사용할 수도 있습니다. sudo raspi-config 명령줄에서 인터페이스 옵션으로 이동하여 SPI를 활성화하고 Raspberry Pi를 다시 시작하세요.
ADC 연결
평소와 같이 회로를 만들 때 Raspberry Pi를 꺼야 합니다. 그것에서 알 수 있듯이 그림 1MCP3008 ADC를 Raspberry Pi의 GPIO 핀에 연결하려면 많은 케이블이 필요합니다.
먼저 MCP3008을 브레드보드 중앙에 놓고 중앙 홈에 맞춥니다. 이제 그림과 같이 점퍼선을 연결합니다. 두 개는 핀 3V3에 연결되는 ‘+’ 전원 레일에 연결됩니다. 나머지 두 개는 ‘-‘ 경로를 통해 GND 핀에 연결됩니다. ADC의 가운데 4개 핀은 GPIO 8(CE0), 10(MOSI), 9(MISO), 11(SCLK)에 연결됩니다.

값 읽기
ADC를 Raspberry Pi에 연결하면 장치를 8개의 입력 채널(0~7번)에 연결할 수 있습니다. 여기에는 가변 저항인 첫 번째 전위차계(가장 왼쪽)를 연결합니다. 손잡이를 돌리면 Raspberry Pi가 전압(0V에서 3.3V까지)을 읽습니다. 이를 사용하여 LED와 같은 다른 구성 요소를 제어할 수 있습니다. 에서와 같이 그림 1전위차계(왼쪽 하단)의 바깥쪽 다리 중 하나를 파워 레일 ‘+’에 연결하고, 다른 다리를 접지 트랙 ‘-‘에 연결하고, 가운데 다리를 MCP3008의 첫 번째 입력인 채널 0에 연결합니다.
이제 Python에서 전위차계 값을 읽을 수 있습니다. 새 파일을 만들고 다음 코드를 다음과 같이 저장합니다. test_pot.py그리고 그것을 하세요.
from gpiozero import MCP3008
pot = MCP3008(channel=0)
while True:
print(pot.value)
위에서 우리는 수입합니다 MCP3008 GPIO Zero 클래스를 조정한 다음 pot ADC 채널 0에 대한 변수입니다. A while True: 그런 다음 원은 화면에 전위차계 값(0에서 1까지)을 지속적으로 표시합니다. 숫자 변경을 확인하려면 코드를 실행하는 동안 변환해 보세요. 클릭하다 Ctrl+C 나가세요
LED를 켜세요
다음으로 LED 회로에 LED를 추가하겠습니다. 그림 2긴(양극) 다리를 GPIO 21에 연결하고 짧은 다리를 저항을 통해 “-” 접지 릴레이에 연결합니다. 새 파일을 만들고 다음 코드를 입력한 후 프로그램을 다음과 같이 저장합니다. 소스_값.py.
from gpiozero import MCP3008, PWMLED
from signal import pause
pot = MCP3008(0)
led = PWMLED(21)
led.source = pot.values
pause()
코드를 입력하세요 MCP3008 그리고 PWMLED 수업도 그렇고 signal 모드 pause 기능 있음 MCP3008 클래스를 사용하면 펄스 폭 변조(PWM)를 사용하여 LED의 밝기를 제어할 수 있습니다. 우리는 창조한다 PWMLED GPIO 21의 개체를 할당합니다. led 변경 가능 전위차계를 이전과 같이 채널 0으로 설정했습니다. 마지막으로 스마트 소스 시스템과 GPIO Zero 값을 사용하여 전위차계와 LED를 페어링하여 후자의 밝기 수준을 초기 값으로 지속적으로 설정합니다. 코드를 실행하고 손잡이를 돌려 LED 밝기를 조정하세요. 클릭하다 Ctrl+C 프로그램을 종료합니다.

두 번째 냄비 추가
아직 추가하지 않았다면 다음과 같이 회로에 두 번째 전위차계를 추가합니다. 그림 2가운데 다리는 MCP3008의 채널 1에 연결되어 있습니다. 이제 두 전위차계를 모두 사용하여 LED의 깜박임 속도를 제어하겠습니다. Thonny에서 새 파일을 만들고 다음 코드를 입력한 후 다음 이름으로 저장합니다. two_pots.py.
from gpiozero import MCP3008, PWMLED
pot1 = MCP3008(0)
pot2 = MCP3008(1)
led = PWMLED(21)
while True:
print(pot1.value, pot2.value)
led.blink(on_time=pot1.value)
off_time=pot2.value, n=1, background=False)
여기서는 두 개의 별도 항목을 만듭니다. pot1 그리고 pot2 ADC 채널 0과 1에 각각 할당된 변수입니다. 에서 while True: 루프를 실행한 다음 화면에 두 개의 값을 인쇄하고 LED를 깜박입니다. LED의 켜짐 및 꺼짐 시간은 두 개의 전위차계에 의해 영향을 받습니다. 코드를 실행하고 두 버튼을 비틀어 어떻게 변경되는지 확인하세요.
VLC 설치
우리는 동일한 회로를 사용하여 간단한 인터넷 라디오를 만듭니다. 전위차계 하나는 방송국을 변경하는 데 사용되고 다른 하나는 볼륨을 조정하는 데 사용됩니다. 기본적으로 설치되지 않은 경우 M3U 인터넷 라디오 스트림을 재생하려면 VLC 미디어 플레이어를 설치해야 합니다. 터미널 창을 열고 다음을 입력하세요.
$ sudo apt install vlc
라디오를 만들어라
새 파일을 만들고 표시된 코드를 입력하세요. radio_new.py 위와 같은 이름으로 저장하세요.
먼저 수입합니다 MCP3008 수업도 함께 Popen, run그리고 time; Popen VLC를 시작하고 중지할 수 있습니다. ADC 채널 0과 1에 각각 스테이션과 음성 번호에 대한 변수를 만듭니다. 그런 다음 두 개의 라디오 스트림 URL에 변수를 할당합니다(이 예에서는 SomaFM Groove Salad 및 Indie Pop을 사용했습니다).
다음으로 몇 가지 함수를 만들어 보겠습니다. 첫 번째, set_volume용도 wpctl (WirePlumber용 명령줄 관리 도구, PipeWire 세션 관리자) 사운드 제어용. 두번째, change_station포함 if 전위차계의 첫 번째 위치에 설정된 스테이션이 현재 선택된 위치와 다른 경우에만 동작합니다.current_station). 그렇다면 현재 스트림을 중지하고 스트림을 재설정하기 전에 재생을 다시 시작합니다. current_station 그것에 변수.
마지막으로, while True: 반지, 안에 try … except 블록, 각 전위차계를 차례로 읽고 사용합니다. if 관련 함수를 호출하는 조건문, set_volume 그리고 change_station필요할 때.
코드를 실행하고 두 전위차계를 모두 변경하여 스테이션을 변경하고 볼륨을 조정해 보세요. 작업을 단순하게 하기 위해 이 예에서는 두 개의 라디오 방송국만 사용했지만 더 많은 방송국을 쉽게 추가할 수 있습니다. station.dial.value 각각 최소.
덕분에 try … except 차단하다, 진압하다 Ctrl+C 프로그램을 종료하기 전에 라디오 스트림을 중지합니다.
GPIO Zero를 사용한 간단한 전자 장치

이 가이드는 Raspberry Pi Press 책에 있습니다. GPIO Zero를 사용한 간단한 전자 장치. 최신 Raspberry Pi 장치용으로 업데이트된 이 책에는 Raspberry Pi의 GPIO 핀을 사용하여 전자 프로젝트 구축을 시작하는 데 필요한 모든 정보가 포함되어 있습니다. GPIO Zero 라이브러리를 사용하여 Python으로 코딩된 프로젝트에는 LED 조명, 동작 경보, 거리 측정기, 레이저 그물 및 Raspberry Pi 로봇이 포함됩니다.