Модуль для взаимодействия с устройствами через последовательный порт.
Project description
Serial Communicator
Модуль для Python-проектов, обеспечивающий взаимодействие с микроконтроллером через COM-порт.
Содержание
Описание
Serial Communicator упрощает процесс установления связи с микроконтроллерами или другими устройствами через последовательный порт, предоставляет удобные для использования функции, позволяет абстрагироваться от деталей работы с COM-портом.
- Основан на pySerial
- Отправка команд без ожидания ответа
- Отправка команд с ожиданием ответа от контроллера
- Чтение команд от контроллера
- Автопоиск подключенного контроллера по всем доступным портам
- Гибкая настройка ретраев и таймаутов
Требования
- Python 3.6 или выше
- pySerial
pip install pySerial
Установка
git clone https://github.com/RadioPizza/serial_communicator.git
Использование
Класс SerialCommunicator
предназначен для взаимодействия с устройствами через последовательный порт. Ниже представлены примеры того, как можно использовать этот класс в вашем проекте.
Инициализация и отправка команды
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
для автоматического закрытия порта независимо от того, произошла ошибка или нет.
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
для автоматического поиска.
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("Контроллер не найден.")
Чтение ответа без отправки команды
Иногда необходимо просто прочитать данные из порта без отправки какой-либо команды.
from serial_communicator import SerialCommunicator
with SerialCommunicator(port='COM3', baudrate=115200, timeout=1.0) as comm:
response = comm.read_response()
if response:
print(f"Получен ответ: {response}")
else:
print("Нет данных для чтения или произошла ошибка.")
Обработка исключений
Для более надежной работы рекомендуется обрабатывать возможные исключения, связанные с последовательным портом.
from serial_communicator import SerialCommunicator
import serial
try:
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
для получения списка всех доступных последовательных портов.
import serial.tools.list_ports
ports = serial.tools.list_ports.comports()
for port in ports:
print(f"Найден порт: {port.device}")
Настройка логирования
Класс SerialCommunicator может использовать модуль logging для вывода отладочной информации. Настройте логирование в своем основном скрипте, если необходимо.
import logging
logging.basicConfig(level=logging.INFO) #
Тестирование
Для проверки и демонстрации работы модуля Serial Communicator
в репозитории предусмотрен мок-контроллер, имитирующий поведение реального устройства. Он расположен в папке ControllerMock
и представлен скетчем Arduino — ControllerMock.ino
. С его помощью вы сможете протестировать функции модуля.
Обратная связь
Мы всегда рады вашим предложениям и идеям по улучшению нашего проекта! Вы можете принять участие в его развитии следующими способами:
-
Сообщите о найденных ошибках. Если вы обнаружили баг, пожалуйста, создайте Issue, указав в описании проблему, используемое оборудование и программное обеспечение. Это поможет нам быстро найти и исправить ошибку.
-
Внесите свои предложения. Если у вас есть идеи по улучшению проекта, не стесняйтесь делиться ими!
-
Отправьте Pull Request. Если вы решили внести улучшения или исправления непосредственно в коде, создайте Pull Request. Мы с удовольствием рассмотрим ваши изменения.
Ваши комментарии и участие помогут нам сделать проект лучше! Спасибо за вашу поддержку!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file serial_communicator-1.0.0.tar.gz
.
File metadata
- Download URL: serial_communicator-1.0.0.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 126253f035fd536ac904a7879d441a5110dfa12c2f2ef76eab7509f4fe57944a |
|
MD5 | b3f51af2f9a8bf9c7de0b68535a86a1a |
|
BLAKE2b-256 | 2ad26e3b6f05f0be6be27504979f61ae71310e4fb09b9a96c19712a5d76efc7c |
File details
Details for the file serial_communicator-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: serial_communicator-1.0.0-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb4b97038e49edc376c85fc66cbfa2616c1f601bd68d7eba39169648ad7eedfd |
|
MD5 | 5a69508b2e4f67bc145f37e20504d392 |
|
BLAKE2b-256 | a1d986ede71b3426dadf3eff75739419c4ccc067d4754271136d7b150b7b44fb |