import pigpio import time # Pin numbers (BCM) DIR_PIN = 11 STEP_PIN = 9 EN_PIN = 10 # Connect to pigpio daemon pi = pigpio.pi() if not pi.connected: exit() # Set up pins pi.set_mode(DIR_PIN, pigpio.OUTPUT) pi.set_mode(STEP_PIN, pigpio.OUTPUT) pi.set_mode(EN_PIN, pigpio.OUTPUT) def move_motor(steps, direction=True, step_delay_us=10): """ Moves the motor a specific number of steps. :param steps: Number of step pulses. :param direction: True for one way, False for the other. :param step_delay_us: Microseconds between rising edges (controls speed). """ # Enable motor driver (LOW = enabled) pi.write(EN_PIN, 0) # Set direction pi.write(DIR_PIN, 1 if direction else 0) # Create pulse waveform pulses = [] for _ in range(steps): pulses.append(pigpio.pulse(1 << STEP_PIN, 0, step_delay_us)) # STEP high pulses.append(pigpio.pulse(0, 1 << STEP_PIN, step_delay_us)) # STEP low pi.wave_clear() pi.wave_add_generic(pulses) wave_id = pi.wave_create() if wave_id >= 0: pi.wave_send_once(wave_id) while pi.wave_tx_busy(): time.sleep(0.01) pi.wave_delete(wave_id) # Optional: disable motor pi.write(EN_PIN, 1) # Example: Move 200 steps forward with 1ms step pulse (i.e., ~500 steps/sec) move_motor(1600, direction=True, step_delay_us=200) # Clean up pi.stop()