{"id":21361085,"url":"https://github.com/radiopizza/serial_communicator","last_synced_at":"2026-02-28T00:38:15.754Z","repository":{"id":262424232,"uuid":"887143344","full_name":"RadioPizza/serial_communicator","owner":"RadioPizza","description":"A module for Python projects that provides interaction with a microcontroller via a COM port","archived":false,"fork":false,"pushed_at":"2025-03-25T19:46:45.000Z","size":38,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-15T11:11:32.649Z","etag":null,"topics":["arduino","com-port","embedded","esp32","interface","mcu","microcontroller","protocol","pyserial-library","python","python-library","serial","serial-communication","stm32","uart"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RadioPizza.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-12T08:40:52.000Z","updated_at":"2025-03-25T19:48:51.000Z","dependencies_parsed_at":"2024-11-12T11:40:14.679Z","dependency_job_id":null,"html_url":"https://github.com/RadioPizza/serial_communicator","commit_stats":null,"previous_names":["radiopizza/serial_communicator"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RadioPizza%2Fserial_communicator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RadioPizza%2Fserial_communicator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RadioPizza%2Fserial_communicator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RadioPizza%2Fserial_communicator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RadioPizza","download_url":"https://codeload.github.com/RadioPizza/serial_communicator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249058376,"owners_count":21205909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","com-port","embedded","esp32","interface","mcu","microcontroller","protocol","pyserial-library","python","python-library","serial","serial-communication","stm32","uart"],"created_at":"2024-11-22T06:08:26.724Z","updated_at":"2026-02-28T00:38:15.695Z","avatar_url":"https://github.com/RadioPizza.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![PyPI Version](https://img.shields.io/pypi/v/serial-communicator)](https://pypi.org/project/serial-communicator/)\n[![Python Versions](https://img.shields.io/pypi/pyversions/serial-communicator)](https://pypi.org/project/serial-communicator/)\n[![Downloads](https://img.shields.io/pypi/dm/serial-communicator)](https://pypi.org/project/serial-communicator/)\n\n# Serial Communicator\n\nМодуль для Python-проектов, обеспечивающий взаимодействие с микроконтроллером через COM-порт.\n\n## Содержание\n\n* [Описание](#chapter-0)\n* [Требования](#chapter-1)\n* [Установка](#chapter-2)\n* [Использование](#chapter-3)\n* [Дополнительные советы](#chapter-4)\n* [Тестирование](#chapter-5)\n* [Обратная связь](#chapter-6)\n\n\u003ca id=\"chapter-0\"\u003e\u003c/a\u003e\n\n## Описание\n\nSerial Communicator упрощает процесс установления связи с микроконтроллерами или другими устройствами через последовательный порт, предоставляет удобные для использования функции, позволяет абстрагироваться от деталей работы с COM-портом.\n\n- Основан на `pySerial`\n- Отправка команд без ожидания ответа\n- Отправка команд с ожиданием ответа от контроллера\n- Чтение команд от контроллера\n- Автопоиск подключенного контроллера по всем доступным портам\n- Гибкая настройка ретраев и таймаутов\n\n\u003ca id=\"chapter-1\"\u003e\u003c/a\u003e\n\n## Требования\n\n- Python 3.6 или выше\n- pySerial\n\nДля установки `pySerial` используйте следующую команду:\n\n```bash\npip install pySerial\n```\n\n\u003ca id=\"chapter-2\"\u003e\u003c/a\u003e\n\n## Установка\n\nВы можете установить модуль напрямую с помощью `pip`:\n\n```bash\npip install serial-communicator\n```\n\nИли клонировать репозиторий и установить из исходников:\n\n```bash\ngit clone https://github.com/RadioPizza/serial_communicator.git\ncd serial_communicator\npip install .\n```\n\n\u003ca id=\"chapter-3\"\u003e\u003c/a\u003e\n\n## Использование\n\nКласс `SerialCommunicator` предназначен для взаимодействия с устройствами через последовательный порт. Ниже представлены примеры того, как можно использовать этот класс в вашем проекте.\n\n### Инициализация и отправка команды\n\n```Python\nfrom serial_communicator import SerialCommunicator\n\n# Параметры подключения\nport_name = 'COM3'       # Замените на соответствующий порт\nbaudrate = 115200        # Скорость передачи данных\ntimeout = 1.0            # Таймаут чтения в секундах\n\n# Создаем экземпляр SerialCommunicator\ncomm = SerialCommunicator(port=port_name, baudrate=baudrate, timeout=timeout)\n\n# Отправляем команду и ожидаем ответ\ncommand = \"i\"\nexpected_response = \"OK\"\n\nsuccess = comm.send_command(command, expected_response)\nif success:\n    print(\"Команда успешно отправлена и получен ожидаемый ответ.\")\nelse:\n    print(\"Не удалось получить ожидаемый ответ от устройства.\")\n\n# Закрываем соединение\ncomm.close()\n```\n\n### Использование в блоке with\n\nРекомендуется использовать контекстный менеджер `with` для автоматического закрытия порта независимо от того, произошла ошибка или нет.\n\n```Python\nfrom serial_communicator import SerialCommunicator\n\n# Параметры подключения\nport_name = 'COM3'\nbaudrate = 115200\ntimeout = 1.0\n\n# Использование контекстного менеджера\nwith SerialCommunicator(port=port_name, baudrate=baudrate, timeout=timeout) as comm:\n    command = \"i\"\n    expected_response = \"OK\"\n\n    success = comm.send_command(command, expected_response)\n    if success:\n        print(\"Команда успешно отправлена и получен ожидаемый ответ.\")\n    else:\n        print(\"Не удалось получить ожидаемый ответ от устройства.\")\n```\n\n### Автоматический поиск контроллера\n\nЕсли вы не знаете, к какому порту подключено устройство, вы можете использовать cтатический метод `find_controller_port` для автоматического поиска.\n\n```Python\nfrom serial_communicator import SerialCommunicator\n\n# Поиск порта с подключенным контроллером\nport = SerialCommunicator.find_controller_port(\n    command=\"i\",\n    expected_response=\"i\",\n    baudrate=115200,\n    timeout=1.0,\n    retries=5,\n    delay=1.0,\n    delay_between_ports=1.0\n)\n\nif port:\n    print(f\"Контроллер найден на порту: {port}\")\n    # Подключаемся к найденному порту\n    with SerialCommunicator(port=port, baudrate=115200, timeout=1.0) as comm:\n        # Дополнительные действия с устройством\n        pass\nelse:\n    print(\"Контроллер не найден.\")\n```\n\n### Чтение ответа без отправки команды\n\nИногда необходимо просто прочитать данные из порта без отправки какой-либо команды.\n\n```Python\nfrom serial_communicator import SerialCommunicator\n\nwith SerialCommunicator(port='COM3', baudrate=115200, timeout=1.0) as comm:\n    response = comm.read_response()\n    if response:\n        print(f\"Получен ответ: {response}\")\n    else:\n        print(\"Нет данных для чтения или произошла ошибка.\")\n```\n\n### Обработка исключений\n\nДля более надежной работы рекомендуется обрабатывать возможные исключения, связанные с последовательным портом.\n\n```Python\nfrom serial_communicator import SerialCommunicator\nimport serial\n\ntry:\n    with SerialCommunicator(port='COM3', baudrate=115200, timeout=1.0) as comm:\n        command = \"i\"\n        expected_response = \"OK\"\n        success = comm.send_command(command, expected_response)\n        if success:\n            print(\"Команда успешно отправлена и получен ожидаемый ответ.\")\n        else:\n            print(\"Не удалось получить ожидаемый ответ от устройства.\")\nexcept serial.SerialException as e:\n    print(f\"Ошибка при работе с последовательным портом: {e}\")\n```\n\u003ca id=\"chapter-4\"\u003e\u003c/a\u003e\n\n## Дополнительные советы\n\n### Проверка доступных портов\n\nВы можете использовать `serial.tools.list_ports` для получения списка всех доступных последовательных портов.\n\n```Python\nimport serial.tools.list_ports\n\nports = serial.tools.list_ports.comports()\nfor port in ports:\n    print(f\"Найден порт: {port.device}\")\n```\n\n### Настройка логирования\n\nКласс SerialCommunicator может использовать модуль logging для вывода отладочной информации. Настройте логирование в своем основном скрипте, если необходимо.\n\n```Python\nimport logging\n\nlogging.basicConfig(level=logging.INFO)\n```\n\n\u003ca id=\"chapter-5\"\u003e\u003c/a\u003e\n\n## Тестирование\n\nДля проверки и демонстрации работы модуля `Serial Communicator` в репозитории предусмотрен мок-контроллер, имитирующий поведение реального устройства. Он расположен в папке `ControllerMock` и представлен скетчем Arduino — `ControllerMock.ino`. С его помощью вы сможете протестировать функции модуля.\n\n\u003ca id=\"chapter-6\"\u003e\u003c/a\u003e\n\n## Обратная связь\n\nМы всегда рады вашим предложениям и идеям по улучшению нашего проекта! Вы можете принять участие в его развитии следующими способами:\n\n- Сообщите о найденных ошибках. Если вы обнаружили баг, пожалуйста, создайте **Issue**, указав в описании проблему, используемое оборудование и программное обеспечение. Это поможет нам быстро найти и исправить ошибку.\n\n- Внесите свои предложения. Если у вас есть идеи по улучшению проекта, не стесняйтесь делиться ими!\n\n- Отправьте **Pull Request**. Если вы решили внести улучшения или исправления непосредственно в коде, создайте **Pull Request**. Мы с удовольствием рассмотрим ваши изменения.\n\nВаши комментарии и участие помогут нам сделать проект лучше! Спасибо за вашу поддержку!\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n[license-shield]: https://img.shields.io/github/license/othneildrew/Best-README-Template.svg?style=for-the-badge\n[license-url]: https://github.com/RadioPizza/serial_communicator/blob/main/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradiopizza%2Fserial_communicator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fradiopizza%2Fserial_communicator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradiopizza%2Fserial_communicator/lists"}