70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
import serial
|
|
import serial.tools.list_ports
|
|
import threading
|
|
import time
|
|
|
|
def list_com_ports():
|
|
"""Вывод списка доступных COM-портов"""
|
|
ports = serial.tools.list_ports.comports()
|
|
if not ports:
|
|
print("COM-порты не обнаружены")
|
|
return []
|
|
|
|
print("\nДоступные COM-порты:")
|
|
for index, port in enumerate(ports):
|
|
print(f"{index + 1}. {port.device}")
|
|
return ports
|
|
|
|
def read_com_port(ser):
|
|
"""Функция для чтения данных из COM-порта"""
|
|
while True:
|
|
try:
|
|
if ser.in_waiting > 0:
|
|
data = ser.readline().decode('utf-8').strip()
|
|
print(f"\nПолучено: {data}")
|
|
print("Введите ответ (или 'exit' для выхода): ", end='')
|
|
except Exception as e:
|
|
print(f"Ошибка при чтении: {e}")
|
|
break
|
|
time.sleep(0.1)
|
|
|
|
def main():
|
|
# Установка COM-порта
|
|
COM_PORT = 'COM19' # Укажите нужный COM-порт здесь
|
|
|
|
try:
|
|
ser = serial.Serial(
|
|
port=COM_PORT,
|
|
baudrate=9600,
|
|
bytesize=serial.EIGHTBITS,
|
|
parity=serial.PARITY_NONE,
|
|
stopbits=serial.STOPBITS_ONE,
|
|
timeout=1
|
|
)
|
|
print(f"\nПодключено к {COM_PORT}")
|
|
except Exception as e:
|
|
print(f"Ошибка при открытии порта: {e}")
|
|
return
|
|
|
|
# Запуск потока для чтения данных
|
|
read_thread = threading.Thread(target=read_com_port, args=(ser,), daemon=True)
|
|
read_thread.start()
|
|
|
|
# Основной цикл для отправки данных
|
|
print("\nВведите 'exit' для выхода")
|
|
while True:
|
|
try:
|
|
user_input = input("Введите ответ: ")
|
|
if user_input.lower() == 'exit':
|
|
break
|
|
ser.write(f"{user_input}\n".encode('utf-8'))
|
|
except Exception as e:
|
|
print(f"Ошибка при отправке: {e}")
|
|
break
|
|
|
|
# Закрытие соединения
|
|
ser.close()
|
|
print("\nСоединение закрыто")
|
|
|
|
if __name__ == "__main__":
|
|
main() |