大家好,从今天开始和大家一起学习esp32嵌入式开发,期待我们一起学习更多嵌入式相关知识,在这里我会分享我的一些学习笔记以及在学习中遇到的困难,欢迎大家一起跟我学习。
目录
[4.1 数据类型](#4.1 数据类型)
[4.1.1 常量](#4.1.1 常量)
[4.1.2 变量](#4.1.2 变量)
[4.2 数组](#4.2 数组)
[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()函数)
[2.2 delayMicroseconds()函数](#2.2 delayMicroseconds()函数)
[4.2 digitalRead()函数](#4.2 digitalRead()函数)
第一部分:初识
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() {
}