이번에 쓰는 방식은 멀티쓰레드이다
아무래도 파이썬에 생성자인 __init__를 통해 값을 초기화하는데는 에러가 발생해서(이유는 모르겠다)
약간 편법으로 생성자가 아닌 함수를 통해 값을 지정하여 쓰레드 3개를 생성하여 각자의 쓰레드가
10번씩 Led 를 깜빡이게 구성했다.
모든 쓰레드가 종료될경우 GPIO를 초기화하고 종료 문자열을 출력하는 코드이다
- import RPi.GPIO as GPIO
- import threading
- import time
- import datetime
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(23, GPIO.OUT)
- GPIO.setup(24, GPIO.OUT)
- GPIO.setup(25, GPIO.OUT)
- class LED(threading.Thread):
- PORT = 0
- def setPort(self, PORT):
- self.PORT = PORT
- print ("%s Port : %s" % (self.getName(), PORT))
- def run(self):
- try:
- for i in range(10):
- now = datetime.datetime.now()
- GPIO.output(self.PORT, False)
- print "%s >> %s Port OFF [%s] " % (self.getName(), self.PORT, now)
- if(self.PORT == 23):
- time.sleep(1)
- else:
- time.sleep(2)
- GPIO.output(self.PORT, True)
- print "%s >> %s Port ON [%s] " % (self.getName(), self.PORT, now)
- if(self.PORT == 23):
- time.sleep(1)
- else:
- time.sleep(2)
- except KeyboardInterrupt:
- GPIO.cleanup()
- print "Interrupt..."
- print "%s >> Thread End..." % (self.getName())
- try:
- thread1 = LED()
- thread2 = LED()
- thread3 = LED()
- thread1.setPort(23)
- thread2.setPort(24)
- thread3.setPort(25)
- thread1.start()
- thread2.start()
- thread3.start()
- thread3.join()
- except KeyboardInterrupt:
- GPIO.cleanup()
- print "Interrupt..."
- print "All Thread End..."
- GPIO.cleanup()
우선 GPIO를 통해 회선을 통해 연결될수 있게 설정해주고 쓰레드를 생성해준다.
sleep가 현동작중인 파이썬 전체를 잠자게 할거라고 예상했지만 예상과 달리 해당 스레드만을 대기하게 하는것으로 판단되었다.
sleep부분을 판단하기 위해 23번 led는 1초 간격으로 나머지는 2초간격으로 깜빡이게 설정해두었다.
그리고 스레드 3이 제일 마지막으로 선언 / 동작되었기에 스레드 3이 끝나기를 대기 모두 끝나면 출력문을 보내고 gpio를 초기화 하고 프로세스를 종료한다.

