Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/radiopizza/serial_communicator
A module for Python projects that provides interaction with a microcontroller via a COM port
https://github.com/radiopizza/serial_communicator
arduino pyserial-library python python-library serial serial-communication
Last synced: about 2 months ago
JSON representation
A module for Python projects that provides interaction with a microcontroller via a COM port
- Host: GitHub
- URL: https://github.com/radiopizza/serial_communicator
- Owner: RadioPizza
- License: mit
- Created: 2024-11-12T08:40:52.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2024-11-19T11:33:34.000Z (about 2 months ago)
- Last Synced: 2024-11-19T12:47:35.149Z (about 2 months ago)
- Topics: arduino, pyserial-library, python, python-library, serial, serial-communication
- Language: Python
- Homepage:
- Size: 23.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![MIT License][license-shield]][license-url]
# Serial Communicator
Модуль для Python-проектов, обеспечивающий взаимодействие с микроконтроллером через COM-порт.
## Содержание
* [Описание](#chapter-0)
* [Требования](#chapter-1)
* [Установка](#chapter-2)
* [Использование](#chapter-3)
* [Дополнительные советы](#chapter-4)
* [Тестирование](#chapter-5)
* [Обратная связь](#chapter-6)## Описание
Serial Communicator упрощает процесс установления связи с микроконтроллерами или другими устройствами через последовательный порт, предоставляет удобные для использования функции, позволяет абстрагироваться от деталей работы с COM-портом.
- Основан на `pySerial`
- Отправка команд без ожидания ответа
- Отправка команд с ожиданием ответа от контроллера
- Чтение команд от контроллера
- Автопоиск подключенного контроллера по всем доступным портам
- Гибкая настройка ретраев и таймаутов## Требования
- Python 3.6 или выше
- pySerialДля установки `pySerial` используйте следующую команду:
```bash
pip install pySerial
```## Установка
Вы можете установить модуль напрямую с помощью `pip`:
```bash
pip install serial-communicator
```Или клонировать репозиторий и установить из исходников:
```bash
git clone https://github.com/RadioPizza/serial_communicator.git
cd serial_communicator
pip install .
```## Использование
Класс `SerialCommunicator` предназначен для взаимодействия с устройствами через последовательный порт. Ниже представлены примеры того, как можно использовать этот класс в вашем проекте.
### Инициализация и отправка команды
```Python
from serial_communicator import SerialCommunicator# Параметры подключения
port_name = 'COM3' # Замените на соответствующий порт
baudrate = 115200 # Скорость передачи данных
timeout = 1.0 # Таймаут чтения в секундах# Создаем экземпляр SerialCommunicator
comm = SerialCommunicator(port=port_name, baudrate=baudrate, timeout=timeout)# Отправляем команду и ожидаем ответ
command = "i"
expected_response = "OK"success = comm.send_command(command, expected_response)
if success:
print("Команда успешно отправлена и получен ожидаемый ответ.")
else:
print("Не удалось получить ожидаемый ответ от устройства.")# Закрываем соединение
comm.close()
```### Использование в блоке with
Рекомендуется использовать контекстный менеджер `with` для автоматического закрытия порта независимо от того, произошла ошибка или нет.
```Python
from serial_communicator import SerialCommunicator# Параметры подключения
port_name = 'COM3'
baudrate = 115200
timeout = 1.0# Использование контекстного менеджера
with SerialCommunicator(port=port_name, baudrate=baudrate, timeout=timeout) as comm:
command = "i"
expected_response = "OK"success = comm.send_command(command, expected_response)
if success:
print("Команда успешно отправлена и получен ожидаемый ответ.")
else:
print("Не удалось получить ожидаемый ответ от устройства.")
```### Автоматический поиск контроллера
Если вы не знаете, к какому порту подключено устройство, вы можете использовать cтатический метод `find_controller_port` для автоматического поиска.
```Python
from serial_communicator import SerialCommunicator# Поиск порта с подключенным контроллером
port = SerialCommunicator.find_controller_port(
command="i",
expected_response="i",
baudrate=115200,
timeout=1.0,
retries=5,
delay=1.0,
delay_between_ports=1.0
)if port:
print(f"Контроллер найден на порту: {port}")
# Подключаемся к найденному порту
with SerialCommunicator(port=port, baudrate=115200, timeout=1.0) as comm:
# Дополнительные действия с устройством
pass
else:
print("Контроллер не найден.")
```### Чтение ответа без отправки команды
Иногда необходимо просто прочитать данные из порта без отправки какой-либо команды.
```Python
from serial_communicator import SerialCommunicatorwith SerialCommunicator(port='COM3', baudrate=115200, timeout=1.0) as comm:
response = comm.read_response()
if response:
print(f"Получен ответ: {response}")
else:
print("Нет данных для чтения или произошла ошибка.")
```### Обработка исключений
Для более надежной работы рекомендуется обрабатывать возможные исключения, связанные с последовательным портом.
```Python
from serial_communicator import SerialCommunicator
import serialtry:
with SerialCommunicator(port='COM3', baudrate=115200, timeout=1.0) as comm:
command = "i"
expected_response = "OK"
success = comm.send_command(command, expected_response)
if success:
print("Команда успешно отправлена и получен ожидаемый ответ.")
else:
print("Не удалось получить ожидаемый ответ от устройства.")
except serial.SerialException as e:
print(f"Ошибка при работе с последовательным портом: {e}")
```## Дополнительные советы
### Проверка доступных портов
Вы можете использовать `serial.tools.list_ports` для получения списка всех доступных последовательных портов.
```Python
import serial.tools.list_portsports = serial.tools.list_ports.comports()
for port in ports:
print(f"Найден порт: {port.device}")
```### Настройка логирования
Класс SerialCommunicator может использовать модуль logging для вывода отладочной информации. Настройте логирование в своем основном скрипте, если необходимо.
```Python
import logginglogging.basicConfig(level=logging.INFO) #
```## Тестирование
Для проверки и демонстрации работы модуля `Serial Communicator` в репозитории предусмотрен мок-контроллер, имитирующий поведение реального устройства. Он расположен в папке `ControllerMock` и представлен скетчем Arduino — `ControllerMock.ino`. С его помощью вы сможете протестировать функции модуля.
## Обратная связь
Мы всегда рады вашим предложениям и идеям по улучшению нашего проекта! Вы можете принять участие в его развитии следующими способами:
- Сообщите о найденных ошибках. Если вы обнаружили баг, пожалуйста, создайте **Issue**, указав в описании проблему, используемое оборудование и программное обеспечение. Это поможет нам быстро найти и исправить ошибку.
- Внесите свои предложения. Если у вас есть идеи по улучшению проекта, не стесняйтесь делиться ими!
- Отправьте **Pull Request**. Если вы решили внести улучшения или исправления непосредственно в коде, создайте **Pull Request**. Мы с удовольствием рассмотрим ваши изменения.
Ваши комментарии и участие помогут нам сделать проект лучше! Спасибо за вашу поддержку!
[license-shield]: https://img.shields.io/github/license/othneildrew/Best-README-Template.svg?style=for-the-badge
[license-url]: https://github.com/RadioPizza/serial_communicator/blob/main/LICENSE