执行器件是指用输出信号控制的器件,如继电器,电机控制模块等。执行器件+传感器件+计算核心(ESP32)可组成带反馈的数字控制系统。
在ESP32-Arduino框架中,Actuator类是所有执行器件的父类,类结构如下:

Actuator类当前是一个未包含数据和方法的类型,主要方便实例集合管理
SwitchActuator类用于开/关型执行器件,如继电器,电磁阀等
SingleMotorDriver类是单路电机驱动类,支持使用两个引脚来控制电机正反转的驱动芯片
继电器是一种电控制器件。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关” 。
从 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来进行智能指针的向下强制转换(父类指针转为子类指针),若指针与预期类型不符,返回空指针。
编译项目并上传开发板检验
电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。
本小节主要讲解红外接收和遥控器件,以及遥控操作LED。
本小节讲解模拟量传感器使用,旋转电位器,DHT11温湿度传感器和实现自定义传感器类。
本小节讲解Sensor类及派生类、数字量传感器使用和传感器的推荐交互流程。
本小节讲解ESP32内置触摸引脚的用法,
本小节主要介绍按键信号转换、Button类及派生类、和Button交互推荐流程。
本小节主要介绍Ws2812灯珠的使用、对父类进行扩展实现自定义功能,和指针向下强制转换的使用。
本小节主要介绍RGB三色LED的使用,以及多态的具体实现。
ESP32 Arduino Framework是专门针对ESP32开发板的Arduino应用开发框架,为用户开发IOT应用、HMI应用提供一致的开发体验。
ESPConnect是一个基于现代浏览器的管理器,在你需要快速验证、调试、管理文件、检查状态的时候,它能帮你省下大量打开和切换重型工具的时间。
本文介绍两种使用TEA5767收音机模块实现FM收音机的方案,感兴趣的朋友可在此基础上实现更丰富的功能。