Python编程小车零基础开发教程(ESP32-NodeMCU-DevKit开发板)

PS2手柄遥控器编程-使用摇杆和PWM脉冲信号控制小车行驶速度完整程序

1. 课程介绍
2. ESP32开发板引脚号说明
3. Python编程软件Thonny安装与使用
4. Python编程给引脚设置数字值-点亮ESP32开发板自带LED小灯
5. Python编程给引脚设置数字值-点亮ESP32开发板外接LED小灯
6. sleep()暂停函数-实现LED小灯闪烁效果
7. while循环语句-LED小灯无限次闪烁
8. while循环语句-LED小灯有限次闪烁
9. for循环语句-LED小灯有限次闪烁
10. 程序代码保存到芯片上运行
11. Python编程驱动电机-L298N两路电机驱动板
12. Python编程手机WIFI遥控电机-L298N两路电机驱动板
13. Python编程手机WIFI遥控四轮小车接线-L298N两路电机驱动板
14. Python编程手机WIFI遥控四轮小车完整代码-L298N两路电机驱动板
15. PS2手柄遥控器编程-遥控ESP32开发板自带LED小灯
16. PS2手柄遥控器编程-遥控四轮小车-接线安装-L298N两路电机驱动板
17. PS2手柄遥控器编程-遥控四轮小车-完整程序代码-L298N两路电机驱动板
18. PS2手柄遥控器编程-摇杆使用
19. PS2手柄遥控器编程-使用摇杆和PWM脉冲信号控制小车行驶速度完整程序
20. I2C串行总线-LCD1602显示屏
21. I2C串行总线-LCD1602显示屏-文字动画
22. I2C串行总线-LCD1602显示屏-文字滚动动画
23. Python编程ESP32播放MP3
24. Python编程ESP32播放MP3-指令格式
25. Python编程MP3播放器-手机WIFI遥控播放

1. 课程目标

使用摇杆和PWM脉冲信号控制小车行驶速度。

2. 硬件接线

图片.png 

3. 程序代码

import machine

import time

import ps2

 

#电机1转动方向控制引脚,设置18号、19号引脚为输出引脚

pin18 = machine.Pin(18, machine.Pin.OUT)

pin19 = machine.Pin(19, machine.Pin.OUT)

#电机1转速控制,5号引脚输出PWM到电机驱动板的ENA引脚上

pwm5=machine.PWM(machine.Pin(5), freq=1000, duty=0)

 

#电机2转动方向控制引脚,设置22号、23号引脚为输出引脚

pin22 = machine.Pin(22, machine.Pin.OUT)

pin23 = machine.Pin(23, machine.Pin.OUT)

#电机2转速控制,17号引脚输出PWM到电机驱动板的ENB引脚上

pwm17=machine.PWM(machine.Pin(17), freq=1000, duty=0)

 

#PS2遥控接收器参数设置

ps2ctl = ps2.PS2Controller(di_pin_no=26, do_pin_no=27, cs_pin_no=14, clk_pin_no=12)

ps2ctl.init()

 

while True:

    key_str= ps2ctl.read_once()   # 接收指令,收到的指令字符格式为 keys:UP,RIGHT: pos(lx,ly):0,-1: pos(rx,ry): 0,-1:

    

    key_list= key_str.split(':')  # 用冒号来将字符串进行分割,写入数组key_list中,key_list[1]值为输入的按键,key_list[3]值为左摇杆坐标,key_list[5]值为右摇杆坐标

    

    if len(key_list)>=6 :

        #获取左摇杆的位置

        leftJoystickX = int( key_list[3].split(',')[0] )

        leftJoystickY = int( key_list[3].split(',')[1] )

        

        #打印获取到的左摇杆位置

        print( "左摇杆X方向值:"+str(leftJoystickX) )

        print( "左摇杆Y方向值:"+str(leftJoystickY) )

                

        command = "" #FORWARDBACKLEFTRIGHTSTOP

        speed = 1023 #速度

        

        if leftJoystickY<0:

            command = "FORWARD"

        elif leftJoystickY>0:

            command = "BACK"

        elif leftJoystickY==0:

            command = "STOP"

        

        speed = int( abs(leftJoystickY) * (1023/128) )

        

        if leftJoystickX<-100:

            command = "LEFT"

        elif leftJoystickX>100:

            command = "RIGHT"

        

        if command=="FORWARD": #“前进

            pwm5.duty(speed) #设置电机1速度。

            pwm17.duty(speed) #设置电机2速度。

            

            #电机1,向前转

            pin18.value(1)

            pin19.value(0)

            #电机2,向前转

            pin22.value(1)

            pin23.value(0)

        elif command=="BACK": #“后退

            pwm5.duty(speed) #设置电机1速度。

            pwm17.duty(speed) #设置电机2速度。

 

            #电机1,向后转

            pin18.value(0)

            pin19.value(1)

            #电机2,向后转

            pin22.value(0)

            pin23.value(1)

        elif command=="LEFT": #“左转

            pwm5.duty(1023) #设置电机1速度。

            pwm17.duty(1023) #设置电机2速度。

            

            #电机1,向后转

            pin18.value(0)

            pin19.value(1)

            #电机2,向前转

            pin22.value(1)

            pin23.value(0)

        elif command=="RIGHT": #“右转

            pwm5.duty(1023) #设置电机1速度。

            pwm17.duty(1023) #设置电机2速度。

 

            #电机1,向前转

            pin18.value(1)

            pin19.value(0)

            #电机2,向后转

            pin22.value(0)

            pin23.value(1)

        elif command=="STOP": #“右转

            #电机1,停止

            pin18.value(0)

            pin19.value(0)

            #电机2,停止

            pin22.value(0)

            pin23.value(0)

 

4. 实验结果

参看实验结果视频。

 


附件:
PS2手柄遥控器编程-使用摇杆和PWM脉冲信号控制小车行驶及速度完整程序.py
【象大帅】PS2手柄遥控器编程-使用摇杆和PWM脉冲信号控制小车行驶速度完整程序.pdf