UART 사용하기
2022. 3. 13. 23:37ㆍIT
Arduino를 이용해서 Relay board를 제어하도록 만들었다. 그리고 PC와 UART 통신을 통해서 PC로 Arduino를 제어하고자 한다. Arduino에는 5v로 동작하는 16포트의 Relay가 달려있다. 이 기기를 PC에서 작동시키기 위해서 기본이 되는 UART 제어 루틴을 만들어 보고자 한다.
설치해야 하는 모듈은 다음과 같다.
pip install pyserial
UART를 읽는 코드와 읽고 보내는 루틴은 다음과 같다. Windows와 Mac에서 검증을 했다.
import sys
import time
import glob
import serial
import serial.threaded
from threading import Thread
import datetime
class sUART():
def __init__(self):
self.exitThread = True
def loadSerialPort(self):
self.serialport = self.listup_serial_ports()
def serialPortConnection(self, port):
self.ser = serial.Serial(port, baudrate=9600, timeout=1)
self.serial_thread = Thread(target=self.run_serial, args=(self.ser,))
self.serial_thread.daemon = True
self.serial_thread.start()
def run_serial(self, ser):
while not self.exitThread:
try:
if ser.isOpen():
read = ser.readline().decode("ascii").strip()
if read:
print(datetime.datetime.now(), read)
#self.read_serial(read)
else:
ser.open()
except Exception as ex:
print(ex)
time.sleep(1)
def send_serial(self, data):
if self.ser.isOpen():
print("통신 데이터 보냄 = {}".format(data))
self.ser.write(data)
def listup_serial_ports(self):
if sys.platform.startswith('win'):
ports = ['COM%s' % (i + 1) for i in range(256)]
elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
# this excludes your current terminal "/dev/tty"
ports = glob.glob('/dev/tty[A-Za-z]*')
elif sys.platform.startswith('darwin'):
ports = glob.glob('/dev/tty.*')
else:
raise EnvironmentError('Unsupported platform')
print(f"All serial ports are {ports}")
result = []
for port in ports:
try:
s = serial.Serial(port)
s.close()
result.append(port)
except (OSError, serial.SerialException):
pass
print(f"Usable serial ports are = {result}")
return result
############## Test Code ##############
uart = sUART()
uart.loadSerialPort()
반응형
'IT' 카테고리의 다른 글
#1 전자액자 프로젝트 - 시작 / 슬라이드 쇼 (0) | 2022.03.18 |
---|---|
파이썬 디컴파일 (python de-compile) (0) | 2022.03.18 |
전자액자, 파이썬, 라즈베리파이 (0) | 2022.02.12 |
[Python / 프로그램 자동화] 외부 실행파일 실행시키고 화면 최대화하기 (0) | 2022.01.10 |
[python/pywinauto] cmd.exe에서 출력 읽기 (0) | 2022.01.07 |