当前位置: 首页 > news >正文

第四章:ESP32零基础教学 - 4.2继电器、舵机与L298N电机

一、硬件准备

  • ESP32开发板

  • 5V继电器模块

  • 9g微型舵机(SG90)

  • L298N电机驱动模块

  • DC电机(6-12V)

  • 面包板与杜邦线

  • 外部电源(用于电机供电)


二、继电器控制

接线说明

继电器引脚ESP32引脚
VCC5V
GNDGND
INGPIO23

代码实现

#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引脚
ENAGPIO12(PWM)
IN1GPIO14
IN2GPIO27
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. 注意事项

  1. 避免同时开启多个大电流设备

  2. PWM频率不宜过高(建议500Hz-3kHz)

  3. 确保散热良好

  4. 先接线后上电

相关文章:

  • web客户端存储,IndexDB相关讲解
  • 【实战指南】用MongoDB存储文档和图片等大文件(Java实现)
  • 破解内存瓶颈:如何通过内存池优化资源利用
  • 【算法day18】有效的括号——给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。
  • 【第14届蓝桥杯C/C++B组省赛】01串的熵
  • PCA Jittering 图像增强
  • 【通过Groovy去热修复线上逻辑】1.执行线上数据修复 2.写工具
  • 仿函数 VS 函数指针实现回调
  • RAG现有技术方案
  • 【Golang】defer与recover的组合使用
  • PyCharm中使用pip安装PyTorch(从0开始仅需两步)
  • 设计和布局硬件电路是嵌入式系统开发的重要环节
  • 3.22日西南竞篮,NBA勇士VS老鹰,赛前数据前瞻
  • LeetCode 2643.一最多的行:模拟(更新答案)
  • Wispr Flow,AI语言转文字工具
  • 鸿蒙NEXT开发案例:程序员计算器
  • 使用若依AI生成springBoot的前后端分离版本
  • 为WordPress自定义一个留言板
  • 【QA】QT编译过程和C++编译过程的区别?
  • Flutter Dart 异步支持全面解析
  • 今年3月全国查处违反中央八项规定精神问题16994起
  • 公交公司须关注新出行需求:“单车巴士”能否常态化
  • 最高法改判一起植物新品种侵权案:判赔逾5300万元破纪录
  • 2025年全国贸易摩擦应对工作会议在京召开
  • 5月1日起,涉外婚姻登记将在上海市16区全面铺开
  • 最高法:“盗链”属于信息网络传播行为,构成侵犯著作权罪