이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Raspberry Pi와 Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560), WiFi 모듈을 사용 합니다.

python-gpio

Python - Raspberry PI GPIO
Python을 사용한 Raspberry Pi GPIO(General Purpose Input Output) 제어


  • 필요한 배경 지식
    • HTML: Web pages 작성에 필요한 Markup language
    • Linux OS: Raspberry Pi의 OS 가 Linux 이다.
    • Python: Programming language
  • Raspberry Pi GPIO(General Purpose Input Output)
    • Raspberry Pi에는 외부 장치와 연결을 위한 2줄의 GPIO Pin(40 Pin)이 준비되어 있다.

      Output pin은 Low(0V) 또는 High(3.3V) 값을 출력 하여 LED와 같은 외부 장치를 제어 할 수 있다.

      Input pin은 Pin의 상태 Low(0V) 또는 High(3.3V) 값을 입력 받을 수 있기 때문에 Push button switch 등의 상태를 입력 받을 수 있다.

    • Raspberry Pi 3의 GPIO Header
    • Raspberry Pi 3의 GPIO Header의 Pin 배치는 아래 그림과 같다.


  • Python의 Gpiozero Library를 사용한 GPIO 제어
    • Gpiozero Library 설치하기
      • Raspberry Pi에는 Python과 Python을 위한 Gpiozero Library가 이미 설치되어 있기 때문에 별도로 설치 할 필요가 없습니다. Update가 필요한 경우 아래 명령으로 Update를 실행 한다.

      • Gpiozero Library Update 하기
      • sudo apt update

        sudo apt install python3-gpiozero python-gpiozero

      • 아래 명령으로 Python3에 설치된 Python package를 확인 할 수 있다.
      • pip3 list

    • piozero Library를 이용하여 LED 제어하기
      • Raspberry Pi와 LED, Button switch를 사용한 실험을 위한 회로와 연결 사진

      • 실험을 위한 준비
        • Raspberry Pi Pin11(GPIO17)과 330옴 저항,
        • 330옴 저항과 LED의 + 단자,
        • LED의 - 단자을 Breadboard의 GND 에 연결 한다.
        • Raspberry Pi의 GND(Pin9)과 Breadboard GND를 연결 한다.
        • 이 실험에서는 LED만 사용한다.

      • Windows PC에서 Notepad++ 편집기를 열고 아래와 같이 프로그램을 작성하여 저장(File name: led-blinking.py) 한다.
      • led-blinking.py

        
        # gpiozero library의 LED Class를 Import 한다.
        from gpiozero import LED
        # time module의 sleep function을 Import 한다.
        from time import sleep
        
        # GPIO17을 LED Port로 사용한다.
        led = LED(17)
        
        while True:
            led.on()
            sleep(1)
            led.off()
            sleep(1)
            

      • WinSCP를 이용하여 led-blinking.py File을 Raspberry Pi의 해당 폴더로 복사 한다
      • 프로그램 실행하기
        • PuTTY를 실행하고 Raspberry Pi에 로그인 한다.
        • led-blinking.py File이 있는 폴더로 이동 한다.
        • 아래 명령으로 Python3에서 led-blinking.py를 실행 한다.
        • python3 led-blinking.py

      • LED 가 1Sec 간격으로 Blinking 하는지 확인 한다.
      • Ctrl C Key를 사용하여 프로그램을 정지 한다. while 문으로 프로그램을 무한히 실행하도록 하였기 때문에 프로그램을 강제로 중지 하여야 함.
      
    • Gpiozero Library를 이용하여 LED와 Button 제어하기
      • 실험을 위한 준비
        • 위 "Raspberry Pi와 LED, Button switch를 사용한 실험을 위한 회로와 연결 사진"을 참고하여 아래와 같이 회로를 연결한다.

        • 위 "piozero Library를 이용하여 LED 제어하기"와 같이 LED를 연결 한다.
        • Raspberry Pi Pin12(GPIO18)와 Button switch의 한 단자을 연결 한다.
        • Raspberry Pi Pin12(GPIO18)에 Button pull up 저항(10K)을 연결한다.
        • Pull up 저항(10K)의 다른 단자를 Vcc에 연결한다.
        • Button switch의 다른 단자와 Breadboard GND를 연결 한다.
        • 위 "piozero Library를 이용하여 LED 제어하기" 사진 참고요. 이 실험에서는 2개의 버튼 중 좌측 1개만 사용함.

      • Windows PC에서 Notepad++ 편집기를 열고 아래와 같이 프로그램을 작성하여 저장(File name: led-button.py) 한다.
      • led-button.py

        
        # gpiozero library의 LED Class를 Import 한다.
        from gpiozero import LED, Button
        
        # GPIO17을 LED Port로 사용한다.
        led = LED(17)
        # GPIO18을 Button Port로 사용한다.
        button = Button(18)
        
        while True:
            if button.is_pressed:
                led.on()
            else:
                led.off()
            

      • WinSCP를 이용하여 led-button.py File을 Raspberry Pi의 해당 폴더로 복사 한다
      • 프로그램 실행하기
        • PuTTY를 실행하고 Raspberry Pi에 로그인 한다.
        • led-button.py File이 있는 폴더로 이동 한다.
        • 아래 명령으로 Python3에서 led-button.py를 실행 한다.
        • python3 led-button.py

      • Button을 누르면 LED 가 Turn on ehlsek.
      • Ctrl C Key를 사용하여 프로그램을 정지 한다. while 문으로 프로그램을 무한히 실행하도록 하였기 때문에 프로그램을 강제로 중지 하여야 함.
    • Gpiozero Library를 이용한 PWM(LED 밝기 제어) 예
      • 실험을 위한 준비
        • 위 "Raspberry Pi와 LED, Button switch를 사용한 실험을 위한 회로와 연결 사진"을 참고하여 아래와 같이 회로를 연결한다.

        • Raspberry Pi Pin11(GPIO17)과 330옴 저항,
        • 330옴 저항과 LED의 + 단자,
        • LED의 - 단자을 Breadboard의 GND 에 연결 한다.
        • Raspberry Pi의 GND(Pin9)과 Breadboard GND를 연결 한다.
        • 이 실험에서는 LED만 사용한다.

      • Windows PC에서 Notepad++ 편집기를 열고 아래와 같이 프로그램을 작성하여 저장(File name: led-pwm.py) 한다.
      • led-pwm.py

        
        # gpiozero library의 PWMLED Class를 Import 한다.
        from gpiozero import PWMLED
        # time module의 sleep function을 Import 한다.
        from time import sleep
        
        # GPIO17을 PWMLED Port로 사용한다.
        led = PWMLED(17)
        
        while True:
            led.value = 0    # off
            sleep(1)
            led.value = 0.3  # 0.3 brightness
            sleep(1)
            led.value = 1    # full brightness
            sleep(1)
            

      • WinSCP를 이용하여 led-pwm.py File을 Raspberry Pi의 해당 폴더로 복사 한다
      • 프로그램 실행하기
        • PuTTY를 실행하고 Raspberry Pi에 로그인 한다.
        • led-pwm.py File이 있는 폴더로 이동 한다.
        • 아래 명령으로 Python3에서 led-pwm.py를 실행 한다.
        • python3 led-pwm.py

      • LED 밝기가 3단계(Off - 0.3밝기 - 최대 밝기)(1Sec 간격)로 변동 하는지 확인 한다.
      • Ctrl C Key를 사용하여 프로그램을 정지 한다. while 문으로 프로그램을 무한히 실행하도록 하였기 때문에 프로그램을 강제로 중지 하여야 함.