https://defendtheplanet.net/2014/05/04/controlling-a-stepper-motor-28byi...
https://tutorials-raspberrypi.com/how-to-control-a-stepper-motor-with-ra...
import RPi.GPIO as gpio import time import math # Clean up GPIOs in case they have been preactivated gpio.cleanup() # Use the BCM GPIO pin numbers rather than the physical pin numbers for # portability. gpio.setmode(gpio.BCM) gpio.setwarnings(False) # Set which pins we're using for the stepper control # The order in the list is: # [ blue, pink, yellow, orange ] stepper_pins = [ 6, 13, 19, 26] # Set the pins as outputs for pin in stepper_pins: gpio.setup(pin,gpio.OUT) gpio.output(pin,False) # Quick pause for things to finish time.sleep(0.5) # Basic variables wait_time = 0.002 # Single step sequence single_steps = 4 # Define single_seq as a list single_seq = [] # Temporarily populate it to make sure it has the right length single_seq = range(single_steps) # Set the sequence single_seq[0] = [1,0,0,0] single_seq[1] = [0,1,0,0] single_seq[2] = [0,0,1,0] single_seq[3] = [0,0,0,1] def setStep(stepper_pins_states): # setStep takes in a list of states (True/False, or 1/0) and sets the GPIO # pins to high/low, accordingly. for i in range(len(stepper_pins)): gpio.output(stepper_pins[i],stepper_pins_states[i]) def turnSteps(num): # turnSteps takes in the number of steps the stepper motor should take, # with the sign determining the direction. The gearing ratio results in # there being 2048 steps in a full circle. count = 0 print('In turnSteps') while abs(count) < abs(num): print(single_seq[count%len(single_seq)]) setStep(single_seq[count%len(single_seq)]) time.sleep(wait_time) print(count) print(math.copysign(1,num)) count += int(math.copysign(1,num)) print(count) def turnCircles(circ): # turnCircles is just a shortcut to define the turn by a fraction of a # circle. turnSteps(circ*2048) def stepperPowerdown(): # Sets all the pins to low so that the stepper motor coils aren't # unnecessarily being powered. for pin in stepper_pins: gpio.setmode(gpio.BCM) gpio.setup(pin,gpio.OUT) gpio.output(pin,False) gpio.setup(21,gpio.IN) # Main loop: Run the stepper motor try: print('trying') while True: print(gpio.input(21)) if not gpio.input(21): turnSteps(-1024) else: stepperPowerdown() time.sleep(0.1) except: print('exception called!!') gpio.cleanup() finally: print('Finally ...') gpio.cleanup() stepperPowerdown()