【ESP32 C++教程】Unit5-1 执行器件之继电器

本节主要讲解执行器件类型和用按键控制继电器。

执行器件是指用输出信号控制的器件,如继电器,电机控制模块等。执行器件+传感器件+计算核心(ESP32)可组成带反馈的数字控制系统。

在ESP32-Arduino框架中,Actuator类是所有执行器件的父类,类结构如下:

【ESP32 C++教程】Unit5-1 执行器件之继电器

Actuator类当前是一个未包含数据和方法的类型,主要方便实例集合管理
SwitchActuator类用于开/关型执行器件,如继电器,电磁阀等
SingleMotorDriver类是单路电机驱动类,支持使用两个引脚来控制电机正反转的驱动芯片


继电器是一种电控制器件。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关” 。

【ESP32 C++教程】Unit5-1 执行器件之继电器
继电器模块详情


示例:用按键控制继电器开关

从 https://gitee.com/billyzh/esp32-cpp-lesson 下载本教程的源码到本地硬盘文件夹,如d:\esp32-cpp-lesson
在VSCode中,选择【文件】->【打开文件夹...】选择上一步保存的文件夹打开

打开项目后,选择config.h文件,修改第10行为
#define APP_LESSON51 1

打开unit5-lesson51/board_config文件,设置器件使用的引脚,
#define MANUAL_BUTTON_PIN GPIO_NUM_39
#define IR_SENSOR_PIN GPIO_NUM_26

创建传感器实例,代码如下(unit5-lesson51/my_board.cpp):

MyBoard::MyBoard() : Board() {
    Log::Info(TAG, "===== Create Board ...... =====");

    Log::Info(TAG, "initial led.");
    led_ = new GpioLed(BUILTIN_LED_PIN, false);

    // 创建按键对象
    std::shared_ptr<Button> button = std::make_shared<OneButtonImpl>(kManualButton, MANUAL_BUTTON_PIN, true, false);
    button->BindAction(ButtonAction::Click);
    AddButton(button);

    // 创建执行器件对象
    std::shared_ptr<SwitchActuator> actuator_ptr = std::make_shared<SwitchActuator>(RELAY_PIN);
    AddActuator(kRelay, actuator_ptr);

    Log::Info( TAG, "===== Board config completed. =====");
}

程序解读
1. 创建一个按钮Button类实例,绑定单击(Click)动作;
2. 创建一个继电器实例,继电器只有开和关两个操作,故可以直接使用SwitchActuator类进行实例化;

控制继电器

继电器控制代码如下(unit5-lesson51/my_application.cpp):

void MyApplication::OnLoop() {
    MyBoard *board = static_cast<MyBoard*>(&Board::GetInstance());
    board->ButtonTick();
    
    delay(1);
}

bool MyApplication::OnPhysicalButtonEvent(const std::string& button_name, const ButtonAction action) {
    if (button_name == kManualButton) {
        Board& board = Board::GetInstance();
        std::shared_ptr<Actuator> act_ptr = board.GetActuator(kRelay);
        std::shared_ptr<SwitchActuator> relay_ptr = std::static_pointer_cast<SwitchActuator>(act_ptr);
        if (action == ButtonAction::Click) {
            relay_ptr->Switch();
            if (relay_ptr->IsOn()) {
                board.GetLed()->TurnOn();
            } else {
                board.GetLed()->TurnOff();
            }
            return true;
        }
    }

    return Application::OnPhysicalButtonEvent(button_name, action);
}

程序解读
1. 在OnLoop方法中调用MyBoard的ButtonTick事件,以捕捉按键动作;
2. 重载Application类的OnPhysicalButtonEvent方法响应按键动作,这里先获取继电器实例的智能指针,然后调用Switch方法,根据执行器的开/关状态控制LED;

此处使用static_pointer_cast来进行智能指针的向下强制转换(父类指针转为子类指针),若指针与预期类型不符,返回空指针。

编译项目并上传开发板检验

- 本文由用户 老张 发布,文中观点仅代表作者本人,不代表本站立场。
- 如需转载,请联系作者;如有侵权,请联系本站处理。

18:27   阅读(1)   评论(0)
 标签: 创客 ESP32 继电器

涨知识
EDA

电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。

评论:
相关文章
【ESP32 C++教程】Unit4-3 红外接收和遥控

本小节主要讲解红外接收和遥控器件,以及遥控操作LED。


【ESP32 C++教程】Unit4-2 模拟量传感器

本小节讲解模拟量传感器使用,旋转电位器,DHT11温湿度传感器和实现自定义传感器类。


【ESP32 C++教程】Unit4-1 数字量传感器

本小节讲解Sensor类及派生类、数字量传感器使用和传感器的推荐交互流程。


【ESP32 C++教程】Unit3-2 触摸输入

本小节讲解ESP32内置触摸引脚的用法,


【ESP32 C++教程】Unit3-1 按键输入

本小节主要介绍按键信号转换、Button类及派生类、和Button交互推荐流程。


【ESP32 C++教程】Unit2-2 Ws2812灯珠

本小节主要介绍Ws2812灯珠的使用、对父类进行扩展实现自定义功能,和指针向下强制转换的使用。


【ESP32 C++教程】Unit2-1 RGB三色LED

本小节主要介绍RGB三色LED的使用,以及多态的具体实现。


【ESP32 C++教程】Unit1-3 ESP32 Arduino 开发框架

ESP32 Arduino Framework是专门针对ESP32开发板的Arduino应用开发框架,为用户开发IOT应用、HMI应用提供一致的开发体验。


ESPConnect:基于浏览器的ESP32管理器

ESPConnect是一个基于现代浏览器的管理器,在你需要快速验证、调试、管理文件、检查状态的时候,它能帮你省下大量打开和切换重型工具的时间。


用ESP32做一个FM收音机

本文介绍两种使用TEA5767收音机模块实现FM收音机的方案,感兴趣的朋友可在此基础上实现更丰富的功能。