create account

3. 라즈베리 파이 Python3 tkinter GUI에 의한 LED ON OFF by codingart

View this thread on: hive.blogpeakd.comecency.com
· @codingart · (edited)
$11.72
3. 라즈베리 파이 Python3 tkinter GUI에 의한 LED ON OFF
https://youtu.be/vmY9D-PuKgo

아두이노와 라즈베리 파이에서는 와이파이(WiFi) IOT 코딩에 의해 원격의 웹브라우저에서 ON OFF 버튼을 만들어 클릭하면 LED를 ON OFF 할 수 있었다. 

반면에 라즈베리 파이 파이선 3 코딩에서는 GUI(graphical User Interface)를 지원하는 tkinter  모듈에 의해서 그래픽 화면 정의와 아울러 LED ON OFF 및 EXIT를 위한 버튼을 생성하여 LED 제어가 가능하다. LED는 BCM 넘버링을 기준으로 T-bar의 16번에 배선해 두기로 한다.

참고사항으로 윈도우즈에 버튼 코딩을 포함하여 GUI를 지원하는 마이크로소프사의 비쥬얼 베이직이 있었는데 바로 tkinter 가 비슷한 역할을 하는 듯하다.

파이선 3 GUI 모듈 tkinter는 라즈베리 파이 설치 시에 함께 설치되므로 그냥 불러서 사용하면 된다. 파이선 2.7 버전에서는 모듈명이 Tkinter 임에 반해 파이선 버전 3에서는 소문자로 시작하는 tkinter 임에 유의하자. 여기에 소개되는 코드는 파이선 3 기준이다.

![noname01.png](https://cdn.steemitimages.com/DQmQYgVkA49EqQMSt9HgRrgvErFyZmy4i7GC2bV7UPy7hEp/noname01.png)

그림은 코드를 실행했을 때 나타나는 버튼과 버튼을 클릭했을 때 터미날에 뜨는 출력이다. 필자가 OpenCV 와 파이선 3을 묶어서 가상환경에 설치한 이후로 IDLE3과 셸을 사용함에 있어서 별도로 root 에 설치한 라이브러리 모듈 RPi.GPIO와 상충되어 부득이 하게 터미널에서 command line 방식으로 처리 한다. IDLE3에서 자연스럽게 실행이 되면 출력이 셸에 나타나게 된다.

LED 배선은 사진을 참조하자. 한 번 배선 후 벌써 3번째 우려먹는 배선 사진이다. 

![noname02.png](https://cdn.steemitimages.com/DQmNZ6FSVeVJH8YQTGqwT97dFYwgtUxUTe9StU4XpyvC6b3/noname02.png)

LED ON 버튼을 클릭하면 버튼이 LED OFF 로 변경되며 EXIT 버튼을 클릭하면 코드 실행이 끝난다. 비록 와이파이는 아니지만 IOT(사물인터넷) LED ON OFF 코드를 작성 실행해본 경험이 있다면 이 파이선3 코드도 버튼으로 동작하기 때문에 비슷한 느낌이 들 듯하다. 

![noname03.png](https://cdn.steemitimages.com/DQma58ZgPYg8CsE9fte5eNV75R7VuaHSnz64nmY1snwpPvJ/noname03.png)

코드 구성을 세부분으로 나눠 검토해 보기로 한다.
LED를 BCM 넘버 16번에 전류제한 저항과 함께 배선하고 RPi.GPIO 모듈을 사용하기로 한다. 아울러 tkinter 모듈의 모든 것을 사용하기로 하자. 와일드 캐릭터인 * 는 모든 것을 뜻한다. 그럼에도 불구하고 font 모듈을 또 불러들여야 한다. 파이선 3에서는 다 소문자를 사용함에 유의하자.

GPIO 모드를 BCM 넙버링으로 설정하고 16번 핀을 출력으로 설정함과 동시에 LOW 즉 LED를 OFF 하도록 한다.  코드 시작에 있어 Tk()를 불러 win 이란 명칭으로 그래픽 화면을 핸들링할 수 있도록 클라스 명령으로 선언한다.

![noname04.png](https://cdn.steemitimages.com/DQmeUR2bJz5WuqWkqU5vp6WNpbWCkFeF8jkSEe6JYwhbRdd/noname04.png)

첫줄에 폰트를 불러 정의한 후 버튼 입력에 따라 실행할 2개의 함수를 정의한다. 하나는 ledON() 이며 다른 하나는 exitProgram() 이다. ledON() 은 내부에 ON 과 OFF 2가지를 실행하며 exitProgram()은 GPIO.cleanup()과 함께 quit() 즉 빠져나오게 된다.

![noname05.png](https://cdn.steemitimages.com/DQmVqr5YsF2mvmwib27N2XLrfmk2iYAfJgZxJ3txP9ZNCGU/noname05.png)

세 번째 파트는 GUI 화면의 해상도(600x300) 지정과 함께 타이틀을 부여한다. 아울러 2개의 버튼 즉 exitButton 과 ledButton 을 정의한다. ledButton 처음에는 LED on을 텍스트로 출력하게 되어 있으나 ledON() 함수에서 텍스트 내용을 바꾸어 출력할 수도 있다.

※ 파이선 2.7  코드로 실행해 보고 싶은 분은 필자의 다음 블로그 주소에서 내용과 코드를 다운받아 사용하기 바란다.
http://blog.daum.net/ejleep1/463


첨부한 파이선 3 코드를 다운 받아 실행해 보자.  항상 콜론(:)부호 다음에 indentation 이 무너져 있는 경우가 많으므로 indentation 을 주의 깇게 살펴보고  살려서 실행하기 바란다.

#tkinter_led_on_off.py
import RPi.GPIO as GPIO
from tkinter import *
from tkinter import font


GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.OUT)
GPIO.output(16, GPIO.LOW)

win = Tk()

myFont = font.Font(family = 'Helvetica', size = 36, weight = 'bold')

def ledON():
    print("LED button pressed")
    if GPIO.input(16):
        GPIO.output(16, GPIO.LOW)
        ledButton["text"] = "LED ON"

    else:
        GPIO.output(16, GPIO.HIGH)
        ledButton["text"] = "LED OFF"

def exitProgram():
    print("Exit button pressed")
    GPIO.cleanup()
    win.quit()

win.title("FIrst GUI")
win.geometry("600x300")

exitButton = Button(win, text = "Exit", font = myFont, command = exitProgram, height = 2, width =6)
exitButton.pack(side = BOTTOM)

ledButton = Button(win, text = "LED ON", font = myFont, command = ledON, height = 2, width =8)
ledButton.pack()


mainloop()
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
properties (23)
authorcodingart
permlink3-python3-tkinter-gui-led-on-off
categorykr
json_metadata{"tags":["kr","kr-newbie","manamine","jjangjjangman","kr-dev"],"image":["https://img.youtube.com/vi/vmY9D-PuKgo/0.jpg","https://cdn.steemitimages.com/DQmQYgVkA49EqQMSt9HgRrgvErFyZmy4i7GC2bV7UPy7hEp/noname01.png","https://cdn.steemitimages.com/DQmNZ6FSVeVJH8YQTGqwT97dFYwgtUxUTe9StU4XpyvC6b3/noname02.png","https://cdn.steemitimages.com/DQma58ZgPYg8CsE9fte5eNV75R7VuaHSnz64nmY1snwpPvJ/noname03.png","https://cdn.steemitimages.com/DQmeUR2bJz5WuqWkqU5vp6WNpbWCkFeF8jkSEe6JYwhbRdd/noname04.png","https://cdn.steemitimages.com/DQmVqr5YsF2mvmwib27N2XLrfmk2iYAfJgZxJ3txP9ZNCGU/noname05.png"],"links":["https://youtu.be/vmY9D-PuKgo","http://blog.daum.net/ejleep1/463"],"app":"steemit/0.1","format":"markdown"}
created2018-10-25 00:31:51
last_update2018-10-25 01:14:06
depth0
children0
last_payout2018-11-01 00:31:51
cashout_time1969-12-31 23:59:59
total_payout_value8.869 HBD
curator_payout_value2.855 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length3,288
author_reputation41,833,111,979,966
root_title"3. 라즈베리 파이 Python3 tkinter GUI에 의한 LED ON OFF"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id73,991,998
net_rshares10,294,335,299,067
author_curate_reward""
vote details (54)