Как я могу использовать команды настройки gpio Raspberry pi и pwm в __init__ функции класса?

#python #oop #raspberry-pi #gpio

#python #ооп #raspberry-pi #gpio

Вопрос:

Я новичок в объектно-ориентированном программировании.Я работаю с Raspberry pi и создаю множество классов с разными выводами GPIO. Я не знаю, как создавать команды setup и pwm. Все они должны оставаться вне классов или я должен поместить их в функцию инициализации для каждого класса? Как это изменится для ООП в функции инициализации? Можете ли вы показать мне пример этого кода?

 GPIO.setup(33, GPIO.OUT)
pwmservo=GPIO.PWM(33,50)
pwmservo.start(6)

class zmove(object):
    def __init__(self):
        pass

    def update(self,angle):
        duty=float(angle)/10.0 2.5
        pwmservo.ChangeDutyCycle(duty)
        time.sleep(0.3)
 

Комментарии:

1. GPIO Zero имеет Servo и AngularServo классы: gpiozero.readthedocs.io/en/stable/api_output.html#servo

Ответ №1:

Вопрос: команды настройки gpio и pwm в функции инициализации класса?

 class PWMServo:
    """
    Base class doing setup and get PWM instance
    """
    def __init__(self, pin):
        GPIO.setup(pin, GPIO.OUT)
        self.pwm = GPIO.PWM(pin, 50)
        self.pwm.start(6)

    def change_duty_cycle(self, duty):
        self.pwm.ChangeDutyCycle(duty)
        time.sleep(0.3)

class ZMove(PWMServo):
    """
    Inherit from class PWMServo
    ZMove use PIN 33
    """
    def __init__(self):
        super().__init__(pin=33)
        self.pwm.start(6)

    def update(self,angle):
        duty=float(angle)/10.0 2.5
        self.change_duty_cycle(duty)

if __name__ == '__main__':
    zmove = ZMove()

    zmove.update(45.0)

    # Or, call direct
    zmove.change_duty_cycle(45.0/10.0 2.5)