可以做两个网站指向同一个域名,中山森斯网站建设公司,电子商务网站推广目的分为,创保网app下载基础例程3
01、外部中断
ESP32的外部中断有上升沿、下降沿、低电平、高电平触发模式。
实验目的
使用外部中断功能实现按键控制LED的亮灭
按键按下为0。【即下降沿】 * 接线说明#xff1a;按键模块--ESP32 IO* (K1-K4)--(14,27,26,25)* * …基础例程3
01、外部中断
ESP32的外部中断有上升沿、下降沿、低电平、高电平触发模式。
实验目的
使用外部中断功能实现按键控制LED的亮灭
按键按下为0。【即下降沿】 * 接线说明按键模块--ESP32 IO* (K1-K4)--(14,27,26,25)* * LED模块--ESP32 IO* (D1-D4)--(15,2,0,4)软件程序
对于主函数
/* 深圳市普中科技有限公司PRECHIN 普中技术支持www.prechin.net* 实验名称外部中断实验* 接线说明按键模块--ESP32 IO[输入]* (K1-K4)--(14,27,26,25)* * LED模块--ESP32 IO[输出]* (D1-D4)--(15,2,0,4)* * 实验现象程序下载成功后操作K1键控制D1指示灯亮灭操作K2键控制D2指示灯亮灭操作K3键控制D3指示灯亮灭操作K4键控制D4指示灯亮灭 */#include public.h
#include exti.h//定义LED控制引脚
#define led1_pin 15
#define led2_pin 2
#define led3_pin 0
#define led4_pin 4//定义全局变量void setup() {pinMode(led1_pin, OUTPUT);//设置引脚为输出模式pinMode(led2_pin, OUTPUT);pinMode(led3_pin, OUTPUT);pinMode(led4_pin, OUTPUT);exti_init();
}void loop() {digitalWrite(led1_pin,key1_sta);digitalWrite(led2_pin,key2_sta);digitalWrite(led3_pin,key3_sta);digitalWrite(led4_pin,key4_sta);
}
对于中断函数
#include exti.hvolatile u8 key1_sta0;
volatile u8 key2_sta0;
volatile u8 key3_sta0;
volatile u8 key4_sta0;//端口初始化
void exti_init(void)
{pinMode(key1_pin, INPUT_PULLUP);//设置引脚为输入上拉模式pinMode(key2_pin, INPUT_PULLUP);pinMode(key3_pin, INPUT_PULLUP);pinMode(key4_pin, INPUT_PULLUP);attachInterrupt(digitalPinToInterrupt(key1_pin), key1_isr, FALLING);//设置下降沿触发attachInterrupt(digitalPinToInterrupt(key2_pin), key2_isr, FALLING);attachInterrupt(digitalPinToInterrupt(key3_pin), key3_isr, FALLING);attachInterrupt(digitalPinToInterrupt(key4_pin), key4_isr, FALLING);
}
/*中断函数*/
void key1_isr(void)
{key1_sta!key1_sta;
}void key2_isr(void)
{key2_sta!key2_sta;
}void key3_isr(void)
{key3_sta!key3_sta;
}void key4_isr(void)
{key4_sta!key4_sta;
}02、定时器中断
使用定时器进行定时。
主函数
/* 深圳市普中科技有限公司PRECHIN 普中技术支持www.prechin.net* * 实验名称定时器中断实验* * 接线说明LED模块--ESP32 IO* (D1)--(15)* * 实验现象程序下载成功后D1指示灯间隔0.5s状态翻转* * 注意事项* */#include public.h
#include led.h
#include time.h//定义全局变量void setup() {led_init();time0_init(500000);//定时500ms}void loop() {}#include led.h//led初始化
void led_init(void)
{pinMode(led1_pin, OUTPUT);//设置引脚为输出模式
}
定时器的函数
#include time.h
#include led.hhw_timer_t *timer0 NULL;//创建timer0定时器对象//定时器初始化
//per定时时间单位us
void time0_init(u32 per)
{/* timerBegin初始化定时器指针第一个参数设置定时器0一共有四个定时器0、1、2、3第二个参数80分频设置APB时钟ESP32主频80MHz80则时间单位为1Mhz即1us1000000us即1s。第三个参数计数方式true向上计数 false向下计数*/timer0 timerBegin(0, 80, true);/* timerAlarmWrite配置报警计数器保护值就是设置时间第一个参数指向已初始化定时器的指针第二个参数定时时间这里为500000us 意思为0.5s进入一次中断第三个参数是否重载false定时器中断触发一次 true死循环*/timerAlarmWrite(timer0, per, true);/* timerAttachInterrupt绑定定时器第一个参数指向已初始化定时器的指针第二个参数中断服务器函数第三个参数true边沿触发false电平触发*/timerAttachInterrupt(timer0, time0_isr, true); timerAlarmEnable(timer0);//启用定时器//timerDetachInterrupt(timer0);//关闭定时器}//定时器中断函数
/*当定时时间到进入定时器中断函数
*/
void time0_isr(void)
{static u8 led_sta0; led_sta!led_sta;digitalWrite(led1_pin,led_sta);
}03、PWM
实验目的
通过调节PWM占空比控制LED指示灯亮度变化实现呼吸灯的效果。由暗到亮再由亮到暗的循环过程。 高电平的占空比不同则电压不同则LED的亮度不同
主函数
/* 深圳市普中科技有限公司PRECHIN 普中技术支持www.prechin.net * 实验名称PWM呼吸灯实验 * 接线说明LED模块--ESP32 IO* (D1)--(15)* 实验现象程序下载成功后D1指示灯呈现呼吸灯效果由暗变亮再由亮变暗*/#include public.h
#include led.h
#include pwm.h//定义全局变量
u16 g_duty_value0;
u8 g_fx1;void setup() {pwm_init(led1_pin,0,1000,10);}void loop() {if(g_fx1){g_duty_value10;if(g_duty_value1010)g_fx0;}else{g_duty_value-10;if(g_duty_value10)g_fx1;}pwm_set_duty(0,g_duty_value);delay(10);
}#include led.h//led初始化
void led_init(void)
{pinMode(led1_pin, OUTPUT);//设置引脚为输出模式
}
PWM的函数
#include pwm.h/*
PWM初始化
//pin引脚号
//chanelPWM输出通道0-15
//freqPWM输出频率单位HZ
//resolutionPWM占空比的分辨率1-16比如设置8分辨率范围0-255
*/
void pwm_init(u8 pin,u8 chanel,u8 freq,u8 resolution)
{ledcSetup(chanel, freq, resolution);// PWM初始化ledcAttachPin(pin, chanel);// 绑定PWM通道到GPIO上
}//PWM占空比设置
//chanelPWM的输出通道
//duty占空比
void pwm_set_duty(u8 chanel,u16 duty)
{ledcWrite(chanel,duty);// 改变PWM的占空比
}04、串口通信
实验介绍
在ESP32中有三个硬件的UARTUART0、UART1和UART2。 ESP32 TX——RX
ESP32 RX——TX
GND——GND
其中UART0用于下载程序和调试
UART1内部的通信
代码
/* 深圳市普中科技有限公司PRECHIN 普中技术支持www.prechin.net* * 实验名称串口通信实验* * 接线说明USB转TTL模块--ESP32 IO* (TXD)--(16)(RXD)--(17)(GND)--(GND)* * 实验现象程序下载成功后打开串口调试助手选择好串口、波特率115200参数等在串口助手上发送字符数据ESP32串口接收后原封不动返回到串口助手显示* * 注意事项USB转TTL模块上将电源切换为3.3V* */#include public.h//定义全局变量
//定义串口2
HardwareSerial mySerial2(2);
String serialData;void setup() {//串口0配置Serial.begin(115200);//串口2配置//void HardwareSerial::begin(unsigned long baud, uint32_t configSERIAL_8N1, int8_t rxPin-1, int8_t txPin-1, bool invertfalse, unsigned long timeout_ms 20000UL);//baud串口波特率该值写0则会进入自动侦测波特率程序//config串口参数默认SERIAL_8N1为8位数据位、无校验、1位停止位//rxPin接收管脚针脚号//txPin发送管脚针脚号//invert翻转逻辑电平串口默认高电平为1、低电平为0//timeout_ms自动侦测波特率超时时间如果超过该时间还未获得波特率就不会使能串口mySerial2.begin(115200,SERIAL_8N1,16,17);}void loop() {if(Serial.available()) //当串口0接收到信息后{Serial.println(Serial Data Available...); // 通过串口监视器通知用户serialDataSerial.readString(); // 将接收到的信息使用readString()存储于serialData变量Serial.print(Received Serial Data: ); // 然后通过串口监视器输出serialData变量内容Serial.println(serialData); // 以便查看serialData变量的信息}if(mySerial2.available()) //当串口2接收到信息后{mySerial2.println(Serial2 Data Available...); // 通过串口监视器通知用户serialDatamySerial2.readString(); // 将接收到的信息使用readString()存储于serialData变量mySerial2.print(Received Serial2 Data: ); // 然后通过串口监视器输出serialData变量内容mySerial2.println(serialData); // 以便查看serialData变量的信息}
}
05、ADC
实验介绍
ADC功能在引脚32-39上可用。输入电压必须介于0-1.0V高于1V都读为4095
ADC采集电位器0-3.3V电压。
硬件设计 J2端子的R_ADC脚为电位器的电压输出端可将该引脚与ESP32的ADC脚相连接
旋转底板上的ADC电位器即可改变电压
软件设计
/* 深圳市普中科技有限公司PRECHIN 普中技术支持www.prechin.net* * 实验名称ADC实验* * 接线说明ADC电位器--ESP32 IO* ADC--(34)* * 实验现象程序下载成功后会在软件串口控制台上输出ADC检测电压值调节电位器可改变检测电压* * 注意事项* */#include public.h//定义全局变量
float adc_vol0;void setup() {//串口0配置Serial.begin(115200);}void loop() {adc_vol3.3*(float)analogRead(34)/4095;//读取ADC值---34引脚Serial.print(ADC检测电压);Serial.print(adc_vol);Serial.println(V);delay(500);
}* 接线说明ADC电位器--ESP32 IO* ADC--(34)* * 实验现象程序下载成功后会在软件串口控制台上输出ADC检测电压值调节电位器可改变检测电压* * 注意事项* */#include public.h//定义全局变量
float adc_vol0;void setup() {//串口0配置Serial.begin(115200);}void loop() {adc_vol3.3*(float)analogRead(34)/4095;//读取ADC值---34引脚Serial.print(ADC检测电压);Serial.print(adc_vol);Serial.println(V);delay(500);
}