/
yeexzdev
/
frontiersystem
Обзор
Документация
Войти
/
yeexzdev
/
frontiersystem
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/hardware.py
115 строк
3 KB
yeexzdev
initial commit
15 май 2026, 20:25
15 май 2026, 20:25
bc97861
Код
Авторство
О чём код?
import pigpio import time import threading import logging logger = logging.getLogger(__name__) class AccessHardware: def __init__(self, pi, config): self.pi = pi self.cfg = config self.lock_type = config.get("type", "relay") self.all_pins = [] if self.lock_type == "stepper": self.all_pins.extend(self.cfg.get("pins_stepper", [])) #Добавление других двигателей else: self.all_pins.append(self.cfg.get("pin_relay")) self.all_pins.extend([ self.cfg.get("pin_led"), self.cfg.get("pin_buzzer"), self.cfg.get("pin_border"), self.cfg.get("pin_passled") ]) self._setup_gpio() def _setup_gpio(self): for pin in self.all_pins: if pin is not None: self.pi.set_mode(pin, pigpio.OUTPUT) if pin == self.cfg.get("pin_led") or pin == self.cfg.get("pin_border"): self.pi.write(pin, 1) else: self.pi.write(pin, 0) def _run_stepper(self): pins = self.cfg.get("pins_stepper") step_sequence = [ [1, 0, 0, 1], [1, 0, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1], [0, 0, 0, 1] ] for _ in range(169): for step in step_sequence: for i in range(4): self.pi.write(pins[i], step[i]) time.sleep(0.002) for p in pins: self.pi.write(p, 0) def _run_relay(self): pin = self.cfg.get("pin_relay") self.pi.write(pin, 1) time.sleep(5) self.pi.write(pin, 0) def _blink_success(self): buz = self.cfg.get("pin_buzzer") led = self.cfg.get("pin_led") border = self.cfg.get("pin_border") passled = self.cfg.get("pin_passled") if passled: self.pi.write(passled, 1) self.pi.write(led, 0) for _ in range(5): if border: self.pi.write(border, 0) if buz: self.pi.write(buz, 0) time.sleep(0.35) if border: self.pi.write(border, 1) if buz: self.pi.write(buz, 1) time.sleep(0.3) self.pi.write(led, 1) if passled: self.pi.write(passled, 0) def _blink_error(self): buz = self.cfg.get("pin_buzzer") if buz: for _ in range(3): self.pi.write(buz, 0) time.sleep(0.1) self.pi.write(buz, 1) time.sleep(0.1) def open_lock(self): threading.Thread(target=self._blink_success, daemon=True).start() if self.lock_type == "stepper": threading.Thread(target=self._run_stepper, daemon=True).start() else: threading.Thread(target=self._run_relay, daemon=True).start() def deny_access(self): threading.Thread(target=self._blink_error, daemon=True).start() def signal_step(self): buz = self.cfg.get("pin_buzzer") led = self.cfg.get("pin_led") self.pi.write(buz, 0) self.pi.write(led, 0) time.sleep(0.1) self.pi.write(buz, 1) self.pi.write(led, 1) time.sleep(0.1) self.pi.write(buz, 0) self.pi.write(led, 0) time.sleep(0.1) self.pi.write(buz, 1) self.pi.write(led, 1)