esp32-s3 gpio控制
一、GPIO的输出控制
1、点亮led
①、连接LED控制电路(Wokwi上仿真https://wokwi.com/)

②、定义GPIO引脚及配置输出模式
#define LED_PIN 19
void setup(){
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH); //高电平熄灭
Serial.begin(115200);
Serial.println("Hi, ESP32-S3!");
}
③、循环控制
void loop(){
digitalWrite(LED_PIN, LOW);
delay(500);
digitalWrite(LED_PIN, HIGH);
delay(500);
}
二、GPIO的输入控制
1、按键、模拟输入
①、连接摇杆的SEL按键、模拟输入电路图

②、定义GPIO引脚及输入配置
#define VERT_PIN 14
#define HORZ_PIN 13
#define SEL_PIN 12
void setup(){
pinMode(VERT_PIN, INPUT);
pinMode(HORZ_PIN, INPUT);
pinMode(SEL_PIN, INPUT_PULLUP);
}
③、循环读取
void loop(){
unsigned int horz_val = 0;
unsigned int vert_val = 0;
static unsigned char sel_val = 1;
horz_val = analogRead(HORZ_PIN); //模拟信号读取
vert_val = analogRead(VERT_PIN);
sel_val = digitalRead(SEL_PIN); //数字信号读取
Serial.print("Horz_val:");
Serial.println(horz_val);
Serial.print("Vert_val:");
Serial.println(vert_val);
Serial.printf("sel_val:%d\r\n", sel_val);
}
2、执行结果(https://wokwi.com/projects/436691055899307009)

三、PWM控制舵机
1、连接舵机

2、定义PWM输出IO
#define H_SERVO_PIN 20
#define V_SERVO_PIN 21
#define MAX_WIDTH 2500
#define MIN_WIDTH 500
3、初始化定时器及端口
ESP32PWM::allocateTimer(0); // 分配硬件定时器
h_servo.setPeriodHertz(50); // 设定 50Hz 标准舵机频率
h_servo.attach(H_SERVO_PIN, MIN_WIDTH, MAX_WIDTH);
ESP32PWM::allocateTimer(1); // 分配硬件定时器
v_servo.setPeriodHertz(50); // 设定 50Hz 标准舵机频率
v_servo.attach(V_SERVO_PIN, MIN_WIDTH, MAX_WIDTH);
for(i=0; i<=180; i+=10){
h_pos_val = i;
v_pos_val = i;
h_servo.write(h_pos_val);
v_servo.write(v_pos_val);
delay(50);
}
h_pos_val = 90;
v_pos_val = 90;
h_servo.write(h_pos_val);
v_servo.write(v_pos_val);
4、关联摇杆按键控制舵机
if(horz_val >= 4095){
h_pos_val = 5;
h_servo.write(h_pos_val);
}
else if(horz_val <= 0){
h_pos_val = 175;
h_servo.write(h_pos_val);
}
else if(vert_val >= 4095){
v_pos_val = 5;
v_servo.write(v_pos_val);
}
else if(vert_val <= 0){
v_pos_val = 175;
v_servo.write(v_pos_val);
}
else if(sel_val == 0){
h_pos_val = 90;
h_servo.write(h_pos_val);
v_pos_val = 90;
v_servo.write(v_pos_val);
}
5、执行结果


浙公网安备 33010602011771号