ESP32—S3学习--入门五个基础实验

大家好,从今天开始和大家一起学习esp32嵌入式开发,期待我们一起学习更多嵌入式相关知识,在这里我会分享我的一些学习笔记以及在学习中遇到的困难,欢迎大家一起跟我学习。

目录

第一部分:初识

1.Arduino是什么

2.选择esp32具有以下优点

3.Arduino语言和程序结构

4.c++语言基础了解

[4.1 数据类型](#4.1 数据类型)

[4.1.1 常量](#4.1.1 常量)

[4.1.2 变量](#4.1.2 变量)

[4.2 数组](#4.2 数组)

4.3字符串

第二部分:基础实验

1.LED实验

1.1目的

[1.2 Arduino函数使用](#1.2 Arduino函数使用)

[1.2.1 pinMode()函数](#1.2.1 pinMode()函数)

参数说明:

[1.2.2 digitalWrite()函数](#1.2.2 digitalWrite()函数)

参数说明:

[1.2.3 delay()函数](#1.2.3 delay()函数)

参数说明:

1.3接线说明

1.4代码

2.蜂鸣器实验

2.1目的

[2.2 delayMicroseconds()函数](#2.2 delayMicroseconds()函数)

参数说明:

2.3接线说明

2.4代码

3.继电器实验

3.1目的

3.2接线说明

3.3代码

4.按键控制实验

4.1目的

[4.2 digitalRead()函数](#4.2 digitalRead()函数)

4.3接线说明

4.4代码

5.直流电机实验

5.1目的

5.2接线说明

5.3代码


第一部分:初识

1.Arduino是什么

Arduino是一套便捷、灵活、容易上手的硬件开发平台,它包括多种型号的Arduino控制电路板和专用编程开发软件(Arduino IDE)。

2.选择esp32具有以下优点

1、跨平台 2、开放性 3、强大的开源库 4、硬件开发趋势

3.Arduino语言和程序结构

4.c++语言基础了解

4.1 数据类型

4.1.1 常量

在程序运行过程中,值不能改变的量称为常量。

#define 常量名 常量值

#define LED1 3

4.1.2 变量

程序中可变的值称为变量。

类型 变量名称;

int i=0; int i; i=0;

4.2 数组

数组是由一组相同数据类型的数据构成的集合。

数据类型 数组名称 [数组元素个数];

int a[5]; 数组名称[下标]

4.3字符串

字符串的定义方式有两种,一种是以字符型数组方式定义,另一种是使用String类型定义。

char 字符串名称 [字符个数]; String 字符串名称;

第二部分:基础实验

1.LED实验

1.1目的

点亮LED模块中的一个LED灯,即让GPIO输出高或低电平,对ESP32来说,高电平约3.3V,低电平约0V。

1.2 Arduino函数使用

1.2.1 pinMode()函数

作用:设置指定引脚的输入/输出模式

cpp 复制代码
pinMode(pin, mode);
参数说明:
  • pin:要设置的引脚编号(如 4, 5, 12, 13 等)

  • mode:引脚模式,主要有:

    • INPUT:设置为输入模式(读取外部信号)

    • OUTPUT:设置为输出模式(控制外部设备)

    • INPUT_PULLUP:输入模式 + 内部上拉电阻

    • INPUT_PULLDOWN:输入模式 + 内部下拉电阻(ESP32 特有)

cpp 复制代码
pinMode(2, OUTPUT);      // 将 GPIO2 设置为输出模式
pinMode(4, INPUT);       // 将 GPIO4 设置为输入模式
pinMode(5, INPUT_PULLUP);// 将 GPIO5 设置为输入模式并启用内部上拉电阻
1.2.2 digitalWrite()函数

作用:向指定的数字引脚输出高电平或低电平

cpp 复制代码
digitalWrite(pin, value);
参数说明:
  • pin:要操作的引脚编号

  • value:要设置的电平值:

    • HIGH​ 或 1:输出高电平(通常是 3.3V)

    • LOW​ 或 0:输出低电平(0V,接地)

注意:

  • 只有设置为 OUTPUT​ 模式的引脚才能使用此函数

  • ESP32 的 GPIO 高电平是 3.3V,不是 5V

cpp 复制代码
digitalWrite(2, HIGH);   // GPIO2 输出 3.3V
digitalWrite(4, LOW);    // GPIO4 输出 0V
1.2.3 delay()函数

作用:让程序暂停(阻塞)指定的时间(毫秒)

cpp 复制代码
delay(ms);
参数说明:
  • ms:暂停的时间,单位是毫秒(1秒 = 1000毫秒)

特点:

  • 阻塞式延迟:程序会完全暂停在这行代码,不执行其他任何操作

  • 常用于简单的定时控制

  • 对于需要同时处理多任务的情况,建议使用非阻塞的 millis()函数

cpp 复制代码
delay(1000);     // 暂停 1 秒
delay(500);      // 暂停 0.5 秒
delay(100);      // 暂停 0.1 秒

1.3接线说明

1.4代码

cpp 复制代码
 * 实验名称:点亮第一个LED实验
 * 
 * 接线说明:LED模块-->ESP32 IO
 *         D1-->3
 * 
 * 实验现象:程序下载成功后,D1指示灯点亮
 * 
 * 注意事项:
 * 
 */

//定义LED1管脚
#define LED1 3

void setup() {
  //设置LED1引脚为输出模式
  pinMode(LED1, OUTPUT);
  //LED1引脚输出高电平,点亮
  digitalWrite(LED1, HIGH);
}

void loop() {
  
}

2.蜂鸣器实验

2.1目的

让ESP32的IO口输出一个2KHz频率的脉冲信号控制板载无源蜂鸣器发声。

2.2 delayMicroseconds()函数

作用 :提供微秒级 的精确延迟,是 delay()函数的高精度版本。

cpp 复制代码
delayMicroseconds(us);

参数说明:

  • us:延迟时间,单位是微秒(µs)

    • 1 秒 = 1,000,000 微秒

    • 1 毫秒 = 1,000 微秒

2.3接线说明

2.4代码

cpp 复制代码
* 实验名称:蜂鸣器实验
 * 
 * 接线说明:蜂鸣器模块-->ESP32 IO
 *         (BEEP)-->(15)
 * 
 * 实验现象:程序下载成功后,BEEP模块发出声音
 * 
 * 注意事项:
 * 
 */

//定义蜂鸣器控制管脚
#define beep_pin  15
char g_i=0;

void setup() {
  pinMode(beep_pin, OUTPUT);//设置引脚为输出模式
}

void loop() {
  g_i=!g_i;
  digitalWrite(beep_pin,g_i);//引脚输出电平翻转
  delayMicroseconds(250);//延时250us
}

3.继电器实验

3.1目的

将D1指示灯连接到继电器的常开触点上,间隔1S控制继电器开和断,从而让D1指示灯间隔1S亮和灭。

3.2接线说明

3.3代码

cpp 复制代码
* 实验名称:继电器实验
 * 
 * 接线说明:继电器模块-->ESP32 IO
 *         (REL)-->(45)
 *         
 *         继电器模块输出-->LED模块
 *         (COM)-->(3V3)
           (NO)-->(D1)
 * 
 * 实验现象:程序下载成功后,继电器模块间隔一定时间吸合断开,吸合时D1指示灯亮,断开时灭
 * 
 * 注意事项:
 * 
 */

//定义继电器控制管脚
#define relay_pin   45
char g_i=0;

void setup() {
  pinMode(relay_pin, OUTPUT);//设置引脚为输出模式
}

void loop() {
  g_i=!g_i;
  digitalWrite(relay_pin,g_i);//引脚输出电平翻转
  delay(1000);//延时1000ms
}

4.按键控制实验

4.1目的

通过板载按键K1-K4控制LED模块中的D1指示灯亮灭。通过板载按键K1-K4控制LED模块中的D1指示灯亮灭。

4.2 digitalRead()函数

作用:读取指定数字引脚的电平状态(高电平或低电平)

cpp 复制代码
int value = digitalRead(pin);

返回值:

  • HIGH ​ 或 1:引脚检测到高电平(通常 ≥ 2.0V)

  • LOW ​ 或 0:引脚检测到低电平(通常 ≤ 0.8V)

4.3接线说明

4.4代码

cpp 复制代码
* 实验名称:按键控制实验
 * 
 * 接线说明:按键模块-->ESP32 IO
 *         (K1-K4)-->(1,38,39,40)
 *         
 *         LED模块-->ESP32 IO
 *         (D1)-->(3)
 * 
 * 实验现象:程序下载成功后,操作K1-K4键控制D1指示灯亮灭;
 * 
 * 注意事项:
 * 
 */

//定义按键控制管脚
#define key1_pin  1 
#define key2_pin  38
#define key3_pin  39
#define key4_pin  40
//定义LED控制管脚
#define led1_pin  3

//类型重定义
typedef unsigned char u8;
typedef unsigned int u16;

//定义全局变量
u8 g_key=0;
u8 g_led1_sta=0;

//使用宏定义独立按键按下的键值
#define KEY1_PRESS  1
#define KEY2_PRESS  2
#define KEY3_PRESS  3
#define KEY4_PRESS  4
#define KEY_UNPRESS 0 

/*******************************************************************************
* 函 数 名       : key_scan
* 函数功能        : 检测独立按键是否按下,按下则返回对应键值
* 输    入       : mode=0:单次扫描按键
                  mode=1:连续扫描按键
* 输    出       : KEY1_PRESS:K1按下
                  KEY2_PRESS:K2按下
                  KEY3_PRESS:K3按下
                  KEY4_PRESS:K4按下
                  KEY_UNPRESS:未有按键按下
*******************************************************************************/
u8 key_scan(u8 mode)
{
  static u8 key=1;

  if(mode)key=1;//连续扫描按键
  if(key==1&&(digitalRead(key1_pin)==0||digitalRead(key2_pin)==0||digitalRead(key3_pin)==0||digitalRead(key4_pin)==0))//任意按键按下
  {
    delay(10);//消抖
    key=0;
    if(digitalRead(key1_pin)==0)
      return KEY1_PRESS;
    else if(digitalRead(key2_pin)==0)
      return KEY2_PRESS;
    else if(digitalRead(key3_pin)==0)
      return KEY3_PRESS;
    else if(digitalRead(key4_pin)==0)
      return KEY4_PRESS;  
  }
  else if(digitalRead(key1_pin)==1&&digitalRead(key2_pin)==1&&digitalRead(key3_pin)==1&&digitalRead(key4_pin)==1) //无按键按下
  {
    key=1;      
  }
  return KEY_UNPRESS;   
}

void setup() {
  pinMode(key1_pin, INPUT_PULLUP);//设置引脚为输入上拉模式
  pinMode(key2_pin, INPUT_PULLUP);
  pinMode(key3_pin, INPUT_PULLUP);
  pinMode(key4_pin, INPUT_PULLUP);

  pinMode(led1_pin, OUTPUT);//设置引脚为输出模式

  digitalWrite(led1_pin,0);//引脚输出低电平
}

void loop() {
  g_key=key_scan(0);  //检测按键
  if(g_key==KEY1_PRESS || g_key==KEY2_PRESS || g_key==KEY3_PRESS || g_key==KEY4_PRESS)//KEY按下,D1指示灯状态翻转
    g_led1_sta=!g_led1_sta; 
  digitalWrite(led1_pin,g_led1_sta);
}

5.直流电机实验

5.1目的

通过板载ULN2003驱动直流电机旋转3S后停止。

5.2接线说明

5.3代码

cpp 复制代码
* 实验名称:直流电机实验
 * 
 * 接线说明:电机模块-->ESP32 IO
 *         (IN1)-->(15)
 *         
 *         电机模块输出-->直流电机
 *         (5V)-->任意一脚
 *         (O1)-->任意一脚
 * 
 * 实验现象:程序下载成功后,直流电机旋转3S后停止
 * 
 * 注意事项:
 * 
 */

//定义电机控制管脚
#define motor_pin   15

//类型重定义
typedef unsigned char u8;
typedef unsigned int u16;

//定义全局变量

void setup() {
  pinMode(motor_pin, OUTPUT);//设置引脚为输出模式
  digitalWrite(motor_pin,1);//输出高电平,电机开启
  delay(3000);//延时3S
  digitalWrite(motor_pin,0);//输出低电平,电机停止
}

void loop() {
  
}
相关推荐
wit_yuan2 小时前
openbmc 支持mctp over pcie(三)(支持作为endpoint)
linux·服务器·嵌入式硬件
renhongxia12 小时前
学习基于数字孪生的质量预测与控制
人工智能·深度学习·学习·语言模型·自然语言处理·制造
小郭团队2 小时前
1_2_五段式SVPWM (传统算法反正切+DPWMmin)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·matlab·dsp开发
开开心心_Every2 小时前
重复图片智能清理工具:快速查重批量删除
java·服务器·开发语言·前端·学习·edge·powerpoint
小郭团队2 小时前
1_3_五段式SVPWM (传统算法反正切+DPWMmax)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·matlab·dsp开发
2301_772204282 小时前
51单片机——UART
单片机·嵌入式硬件·51单片机
开开心心_Every2 小时前
一键隐藏窗口到系统托盘:支持任意软件摸鱼
服务器·前端·python·学习·edge·django·powerpoint
qq_411262422 小时前
如果 4G 模块的 UART TX 高电平真的是 3.7V,直接接到 ESP32 的 UART RX/GPIO 不建议,存在风险。
单片机·嵌入式硬件
烤麻辣烫2 小时前
Java开发手册规则精选
java·开发语言·学习