Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как использовать Python Serial python 3 для чтения данных с COM-порта?

  1. Как использовать Python Serial python 3 для чтения данных с COM-порта?

    Ребята, привет! Пытаюсь разобраться с библиотекой pySerial на Python 3 для чтения данных с COM-порта. Может кто-то уже работал с этим? Нужен пример кода, который может читать и выводить данные. Если есть нюансы и подводные камни, тоже расскажите. Спасибо!



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Привет! Вот простой пример использования pySerial для чтения данных с COM-порта
    [PHP]
    import serial

    ser = serial.Serial('COM3', 9600)
    while True:
    if ser.in_waiting > 0:
    data = ser.readline()
    print(data.decode('utf-8').strip())
    [PHP]
    Держи пример, тут мы открываем порт 'COM3' с скоростью 9600 бод. Не забудь `ser.in_waiting`, чтобы проверить, есть ли данные.

  4. Цитата Сообщение от MaxStorm
    Привет! Вот простой пример использования pySerial для чтения данных с COM-порта
    [PHP]
    import serial

    ser = serial.Serial('COM3', 9600)
    while True:
    if ser.in_waiting > 0:
    data = ser.readline()
    print(data.decode('utf-8').strip())
    [PHP]
    Держи пример, тут мы открываем порт 'COM3' с скоростью 9600 бод. Не забудь `ser.in_waiting`, чтобы проверить, есть ли данные.
    Огонь, спасибо за пример! Особенно полезна проверка `ser.in_waiting`, а то я обычно её упускаю.

  5. Я юзал pySerial с Python 3 пару раз. Важно убедиться, что порт не используется другими приложениями, иначе будет ошибка. Также советую закрывать порт с помощью `ser.close()`
    [PHP]
    ser.close()
    [PHP]
    после работы с ним.

  6. Цитата Сообщение от Obelix
    Я юзал pySerial с Python 3 пару раз. Важно убедиться, что порт не используется другими приложениями, иначе будет ошибка. Также советую закрывать порт с помощью `ser.close()`
    [PHP]
    ser.close()
    [PHP]
    после работы с ним.
    Закрытие порта - это реально важный момент, иначе можно наткнуться на кучу проблем.

  7. Если тебе надо именно читать данные в реальном времени, то рекомендую использовать потоки (threads). Это позволит не заблокировать главный поток выполнения Python.
    [PHP]
    def read_from_port(ser):
    while True:
    if ser.in_waiting > 0:
    data = ser.readline()
    print(data.decode('utf-8').strip())

    ser = serial.Serial('COM3', 9600)
    import threading
    thread = threading.Thread(target=read_from_port, args=(ser,))
    thread.start()
    [PHP]

  8. Цитата Сообщение от CometChaser
    Если тебе надо именно читать данные в реальном времени, то рекомендую использовать потоки (threads). Это позволит не заблокировать главный поток выполнения Python.
    [PHP]
    def read_from_port(ser):
    while True:
    if ser.in_waiting > 0:
    data = ser.readline()
    print(data.decode('utf-8').strip())

    ser = serial.Serial('COM3', 9600)
    import threading
    thread = threading.Thread(target=read_from_port, args=(ser,))
    thread.start()
    [PHP]
    Плюсую за использование потоков, это действительно помогает, когда нужно параллельно обрабатывать данные.

  9. Ещё можно попробовать использовать `pyserial-asyncio` для асинхронного чтения данных. Это модуль надстройка над pySerial. Пример:
    [PHP]
    import asyncio
    import serial_asyncio

    async def read_data(loop):
    reader, _ = await serial_asyncio.open_serial_connection(url='/dev/ttyUSB0', baudrate=115200, loop=loop)
    while True:
    data = await reader.readuntil(b'\
    ')
    print(data.decode('utf-8').strip())

    loop = asyncio.get_event_loop()
    loop.run_until_complete(read_data(loop))
    loop.run_forever()
    [PHP]
    Такой подход поможет избежать блокировок в основном потоке выполнения.

  10. Цитата Сообщение от SofiaValley
    Ещё можно попробовать использовать `pyserial-asyncio` для асинхронного чтения данных. Это модуль надстройка над pySerial. Пример:
    [PHP]
    import asyncio
    import serial_asyncio

    async def read_data(loop):
    reader, _ = await serial_asyncio.open_serial_connection(url='/dev/ttyUSB0', baudrate=115200, loop=loop)
    while True:
    data = await reader.readuntil(b'\
    ')
    print(data.decode('utf-8').strip())

    loop = asyncio.get_event_loop()
    loop.run_until_complete(read_data(loop))
    loop.run_forever()
    [PHP]
    Такой подход поможет избежать блокировок в основном потоке выполнения.
    asyncio - это мощно. Интересный подход для работы с асинхронными задачами, особенно в Python 3.

Страница 1 из 2 12 ПоследняяПоследняя