接线接好了,这期开始写代码。我们用Python控制树莓派的GPIO,让电机按我们的指令转动。
一、准备工作
sudo apt update sudo apt install python3-rpi.gpio -y
二、基础驱动代码
import RPi.GPIO as GPIO
import time
IN1, IN2, IN3, IN4 = 17, 18, 22, 23
ENA, ENB = 27, 24
GPIO.setmode(GPIO.BCM)
GPIO.setup([IN1, IN2, IN3, IN4, ENA, ENB], GPIO.OUT)
pwmA = GPIO.PWM(ENA, 100)
pwmB = GPIO.PWM(ENB, 100)
pwmA.start(0); pwmB.start(0)
def forward(speed=80):
GPIO.output(IN1, GPIO.HIGH); GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.HIGH); GPIO.output(IN4, GPIO.LOW)
pwmA.ChangeDutyCycle(speed); pwmB.ChangeDutyCycle(speed)
def backward(speed=80):
GPIO.output(IN1, GPIO.LOW); GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN3, GPIO.LOW); GPIO.output(IN4, GPIO.HIGH)
pwmA.ChangeDutyCycle(speed); pwmB.ChangeDutyCycle(speed)
def turn_left(speed=60):
GPIO.output(IN1, GPIO.LOW); GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN3, GPIO.HIGH); GPIO.output(IN4, GPIO.LOW)
pwmA.ChangeDutyCycle(speed); pwmB.ChangeDutyCycle(speed)
def turn_right(speed=60):
GPIO.output(IN1, GPIO.HIGH); GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.LOW); GPIO.output(IN4, GPIO.HIGH)
pwmA.ChangeDutyCycle(speed); pwmB.ChangeDutyCycle(speed)
def stop():
GPIO.output([IN1, IN2, IN3, IN4], GPIO.LOW)
pwmA.ChangeDutyCycle(0); pwmB.ChangeDutyCycle(0)
if __name__ == "__main__":
try:
forward(); time.sleep(2)
backward(); time.sleep(2)
turn_left(); time.sleep(1)
turn_right(); time.sleep(1)
stop()
finally:
GPIO.cleanup()
三、PWM调速说明
speed参数范围0~100。30~50慢速精确控制,60~80中速行驶,90~100全速。如果左右电机速度不一致(小车走不直),分别给pwmA和pwmB不同的值补偿。
四、常见问题
运行报错:用sudo运行:sudo python3 car.py
电机只有一个转:检查不转那个电机的接线,或交换OUT1/OUT2测试电机本身是否坏了。
方向反了:代码里对调IN1/IN2的HIGH/LOW即可,不用拆线。

微信联系
淘宝联系