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. Мы с удовольствием рассмотрим ваши изменения.
Ваши комментарии и участие помогут нам сделать проект лучше! Спасибо за вашу поддержку!
Metadata
Release files for serial-communicator 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| serial_communicator-1.0.0.tar.gz | 7.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| serial_communicator-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.5 kB
Release files / serial_communicator-1.0.0.tar.gz
| Download URL | serial_communicator-1.0.0.tar.gz |
|---|---|
| Size | 7.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
126253f035fd536ac904a7879d441a5110dfa12c2f2ef76eab7509f4fe57944a
|
|
BLAKE2b-256 checksum How to use checksums |
2ad26e3b6f05f0be6be27504979f61ae71310e4fb09b9a96c19712a5d76efc7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.10.11
|
Release files / serial_communicator-1.0.0-py3-none-any.whl
| Download URL | serial_communicator-1.0.0-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb4b97038e49edc376c85fc66cbfa2616c1f601bd68d7eba39169648ad7eedfd
|
|
BLAKE2b-256 checksum How to use checksums |
a1d986ede71b3426dadf3eff75739419c4ccc067d4754271136d7b150b7b44fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.10.11
|