안드로이드는 올릴게 너무 많아져서 패쓰하겠다
이번에는 파이썬이다.
파이썬도 지난 led에서 약간 손본것에 불과하다
일단 GPIO는 이제 파이썬(파이)에서 더이상 쓰지않게 되었다.
그러므로 이제 라즈베리파이는 전류쪽에서 안정성을 가지게 됨에 따라 기판의 신뢰도가 올라갔다
또한 작업을 분산시켰으므로 작업의 효율이 높아졌을거라 생각한다.
다음은 소스코드이다.
- import RPi.GPIO as GPIO
- import threading
- import time
- import datetime
- import socket
- import serial
- Arduino = serial.Serial('/dev/ttyS0', 115200)
- Signal = "None"
- Speed = 0
- Quit = False
- class SignalThread(threading.Thread):
- def run(self):
- global Arduino, Signal, Speed, QUIT
- while True:
- signal = -1
- if (Signal != "None" and Quit == False):
- Arduino.write(Signal)
- Arduino.write(Speed)
- #print "Arduino Signal", Arduino.readline()
- #print "Arduino Gear", Arduino.readline()
- time.sleep(0.5)
- elif (Quit == True):
- break
- print "SignalThread End..."
- try:
- print "Server Ready..."
- svrsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- svrsock.bind(('', 7777))
- svrsock.listen(1)
- conn, addr = svrsock.accept()
- print "Client Connected..."
- thread = SignalThread()
- thread.start()
- Signal = "None"
- while True:
- Order = conn.recv(1024)
- Order = Order.split("\n")
- Signal = Order[0]
- Speed = Order[1]
- if (Signal == "Quit"):
- Quit = True
- break
- print "Disconnected..."
- conn.close()
- svrsock.close()
- Arduino.close()
- except KeyboardInterrupt:
- print "Interrupt..."
- conn.close()
- Arduino.close()
- svrsock.close()
- quit()
딱히 다른점은 없는데
아마 다른점이라면 시리얼통신을 통해 아두이노에게 파이가 할 작업을 전가(?)했다는점이 있다.
자세한설명은 이전 LED제어 글을 읽어줬으면 좋겟지만 그곳에도 딱히 설명은 없고...
사실 파이썬 자체가 딱히 읽어보는데 어려운부분이 없다.
메인쓰레드(소켓통신) 그리고 정의 쓰레드(시리얼통신)으로 총 2개의 쓰레드가 돌아가며
소켓은 받고 시리얼은 뿌려주는 작업을 수행한다.
안드로이드는 생략한다.

