Обзор архитектуры #
Библиотека RepkaPi.GPIO спроектирована по модульному принципу для обеспечения четкого разделения логических задач. Такая архитектура упрощает поддержку, тестирование и дальнейшее расширение функционала. Взаимодействие между компонентами можно представить в виде следующей высокоуровневой схемы:
Как видно из схемы, весь пользовательский код взаимодействует исключительно с главным модулем-фасадом GPIO.py
, который инкапсулирует всю сложность и делегирует выполнение специализированным модулям.
Структура классов и модулей (UML) #
На следующей диаграмме представлена полная структура классов и их взаимосвязей внутри библиотеки. Она наглядно демонстрирует, как каждый компонент зависит от других.
Ниже приведена декомпозиция каждого ключевого компонента.
Главный модуль-фасад: GPIO.py
Основной интерфейс для взаимодействия с пользователем. Принимает команды, проверяет их корректность, управляет режимами нумерации пинов и динамически загружает карты распиновки в зависимости от модели платы. Делегирует низкоуровневые операции соответствующим исполнителям.
Системный интерфейс: sysfs.py
Низкоуровневый исполнитель, отвечающий за прямое взаимодействие с ядром Linux через файловую систему sysfs
. Формирует пути к системным файлам (/sys/class/...
), открывает их и записывает/читает необходимые значения для управления состоянием пинов и ШИМ-контроллеров.
Обработчик событий: event.py
Реализует механизм асинхронного отслеживания прерываний. Для каждого отслеживаемого пина запускается отдельный поток (_worker
), который блокируется системным вызовом epoll
, ожидая сигнала от ядра. Это обеспечивает мгновенную реакцию на внешние события без нагрузки на CPU.