라즈베리 파이 파이선 Tkinter GUI 모듈 에 의한 LED ON OFF 코딩
아두이노 코딩의 소중한 경험을 시작하고 싶으신가요?
이 책에서 해답을 찾으세요.
교보문고에서 판매중입니다
_______________________________________________________upto here, commercial!______________________
아두이노나 라즈베리 파이에서 와이파이 IOT 코딩에 의해 웹브라우저에서 on OFF 버튼을 만들어 클릭하여 LED를 on OFF 할 수 있었다.
반명에 라즈베리 파이ㅡ이 파이선 코딩에서는 GUI(graphical User Interface)를 지원하는 Tkinter 모듈에 의해서 그래픽 화면 정의와 아울러 LED on OFF 및 EXIT를 위한 버튼을 생성하여 LED를 제어해 보자. LED는 BCM 넘버링 기준 17번에 배선해 두기로 한다.
참고사항으로 윈도우즈에 버튼 코딩을 포함하여 GUI를 지원하는 마이크로소프사의 비쥬얼 베이직이 있었는데 바로 Tkinter 가 비슷한 역할을 하는 듯하다.
파이선 GUI 모듈 Tkinter는 라즈베리 파이 설치시에 함께 설치되므로 그냥 불러서 사용하면 된다.
파이선 2.7 버전에서는 모듈명이 Tkinter 임에 반해 버전 3에서는 소문자로 시작하는 tkinter 임에 유의하자. 여기에 소개되는 코드는 파이선 2 기준이다.
그림은 코드를 실행했을 때 나타나는 버튼과 버튼을 클릭했을 때 셸에 뜨는 출력이다. LED on 버튼을 클릭하면 버튼이 LED OFF 로 변경되며 EXIT 버튼을 클릭하면 코드 실행이 끝난다.
비록 와이파이는 아니지만 IOT(사물인터넷) LED on OFF 코드를 작성 실행해본 경험이 있다면 이 파이선 코드도 버튼으로 동작하기 때문에 비슷한 느낌이 들 듯하다.
코드 구성을 세부분으로 나눠 검토해 보기로 한다.
LED를 BCM 넘버 17번에 전류제한 저항과 함께 배선하고 RPi.GPIO 모듈을 사용하기로 한다. 아울러 Tkinter 모듈의 모든 것을 사용하기로 하자. 와일드 캐릭터인 * 는 모든 것을 뜻한다. tkFont 전용 폰트 모듈을 불러들인다.
GPIO 모드를 BCM 넙버링으로 설정하고 17번 핀을 출력으로 설정함과 동시에 LOW 즉 LED를 OFF 하도록 한다. 코드 시작에 있어 Tk()를 불러 win 이란 명칭으로 클라스 명령화 한다.
첫줄에 폰트를 정의한 후 버튼 입력에 따라 실행할 2개의 함수를 정의한다. 하나는 ledON() 이며 다른 하나는 exitProgram() 이다. ledON() 은 내부에 on 과 OFF 2가지를 실행하며 exitProgram()은 GPIO.cleanup()과 함께 quit() 즉 멈추게 된다.
세 번째 파트는 GUI 화면의 해상도(600x300) 지정과 함께 타이틀을 부여한다. 아울러 2개의 버튼 즉 exitButton 과 ledButton 을 정의한다. ledButton 처음에는 LED on을 텍스트로 출력하게 되어 있으나 ledON() 함수에서 텍스트 내용을 바꾸어 출력할 수도 있다.
이번에는 이 코드를 조금 변경하여 LED를 on OFF 하는 버튼을 따로 만들어 보도록 하자. 아래와 같이 변경된 함수와 버튼 코드를 살펴보자.
ledON() 함수에서17번 입력 상태가 1 즉 HIGH 가 아니면 LOW 이므로 OFF 되어 있는 상태이다. 그러면 HIGH를 출력한다. 즉 on 시키는 것이다.
ledOFF() 함수에서 17번 입력 상태가 1 이면 즉 HIGH 이므로 on 되어 있는 상태이다. 그러면 LOW를 출력한다. 즉 OFF 시키는 것이다.
버튼 코딩에서 3개의 버튼을 수용할 수 있도록 높이 발향으로 즉 600x300에서 800x600 정도로 해상도를 높여 줄 필요가 있다. ledON 과 ledOFF 버튼을 따로 분리한다.