第四章:ESP32零基础教学 - 4.2继电器、舵机与L298N电机
一、硬件准备
-
ESP32开发板
-
5V继电器模块
-
9g微型舵机(SG90)
-
L298N电机驱动模块
-
DC电机(6-12V)
-
面包板与杜邦线
-
外部电源(用于电机供电)
二、继电器控制
接线说明
继电器引脚 | ESP32引脚 |
---|---|
VCC | 5V |
GND | GND |
IN | GPIO23 |
代码实现
#define RELAY_PIN 23 // 继电器信号引脚 void setup() { pinMode(RELAY_PIN, OUTPUT); // 设置引脚为输出模式 } void controlRelay(bool state) { /** * 控制继电器开关 * @param state: true-开启, false-关闭 */ digitalWrite(RELAY_PIN, state ? HIGH : LOW); } // 使用示例 void loop() { controlRelay(true); // 打开继电器 delay(2000); controlRelay(false); // 关闭继电器 delay(2000); }
三、舵机控制(PWM)
接线说明
舵机引脚 | ESP32引脚 |
---|---|
红色(VCC) | 5V |
棕色(GND) | GND |
橙色(SIG) | GPIO13 |
代码实现
#include <ESP32Servo.h> #define SERVO_PIN 13 Servo myServo; // 创建舵机对象 void setup() { myServo.attach(SERVO_PIN); // 初始化舵机 } void setServoAngle(int angle) { /** * 设置舵机角度 * @param angle: 0-180度 */ angle = constrain(angle, 0, 180); // 限制角度范围 myServo.write(angle); // 写入角度值 } // 使用示例 void loop() { setServoAngle(0); // 转到0度位置 delay(1000); setServoAngle(90); // 转到中间位置 delay(1000); setServoAngle(180); // 转到180度位置 delay(1000); }
四、L298N电机控制
接线说明
L298N引脚 | ESP32引脚 |
---|---|
ENA | GPIO12(PWM) |
IN1 | GPIO14 |
IN2 | GPIO27 |
12V供电 | 外部电源正极 |
GND | 外部电源负极 |
代码实现
#define ENA_PIN 12 // PWM使能引脚 #define IN1_PIN 14 // 方向控制1 #define IN2_PIN 27 // 方向控制2 const int PWM_CHANNEL = 0; // 使用PWM通道0 const int PWM_FREQ = 1000; // PWM频率1kHz const int PWM_RES = 8; // 8位分辨率(0-255) void setup() { // 初始化GPIO pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); // 配置PWM通道 ledcSetup(PWM_CHANNEL, PWM_FREQ, PWM_RES); ledcAttachPin(ENA_PIN, PWM_CHANNEL); } void controlMotor(int speed, bool direction) { /** * 控制电机运动 * @param speed: 0-255的PWM值 * @param direction: true-正转, false-反转 */ speed = constrain(speed, 0, 255); digitalWrite(IN1_PIN, direction ? HIGH : LOW); digitalWrite(IN2_PIN, direction ? LOW : HIGH); ledcWrite(PWM_CHANNEL, speed); // 输出PWM信号 } // 使用示例 void loop() { controlMotor(200, true); // 正转中等速度 delay(2000); controlMotor(0, true); // 停止 delay(1000); controlMotor(200, false); // 反转中等速度 delay(2000); }
五、系统集成与优化建议
1. 电源管理建议
-
使用独立电源为电机供电
-
添加1000μF电容滤波
-
确保共地连接
2. 扩展功能
// 组合控制示例 void complexControl() { // 打开继电器供电 controlRelay(true); // 舵机转到45度 setServoAngle(45); // 电机低速正转 controlMotor(100, true); delay(3000); // 停止所有设备 controlRelay(false); controlMotor(0, true); setServoAngle(90); }
3. 注意事项
-
避免同时开启多个大电流设备
-
PWM频率不宜过高(建议500Hz-3kHz)
-
确保散热良好
-
先接线后上电