刚刚接触Arduino平台和ESP32,借用博客的形式做一个简单的学习记录。在这里,我将记录自己的学习过程以及遇到的一些问题,并把容易踩的坑总结出来。话不多说,开始吧。
1.点亮ESP32上的LED灯
理论上购买的各种开发板上都会有内置的LED灯以及对应的管脚。所以想要点亮一个LED,需要查询相应的手册,找到对应的引脚,即可点亮LED。这里放一个网址,可以下载自己所需的ESP32手册:
https://docs.espressif.com/projects/arduino-esp32/en/latest/getting_started.html#examples
我用的ESP32 WROOM 32UE对应的是ESP32-D0WD-V3芯片,下载第一个手册即可。
手册里找了半天没找到,所以:
现在就可以开始点灯了。
(1)在Arduino中打开示例Blink:
(2)打开后,看里面的内容
第一部分是对于这个示例的简单介绍。
功能:点亮LED,亮一秒,暗一秒。
对应管脚:大部分UNO板子是13脚,在MKR1000上是6脚。我们使用的不同于二者,所以需要对其进行更改。
第二部分就是代码了。
对代码做了简单学习。
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
setup(),loop()函数都是Arduino内部已经封装好的函数。
setup()函数用于对程序做一些必要的设置,是程序中第一个被执行的。现在它里面只有一个语句:
pinMode(LED_BUILTIN, OUTPUT);
容易理解,这个语句是对某个引脚的模式做了设置,为输出模式。pinMode()函数也是Arduino中的函数。
loop()函数中有两部分构成,一部分是对引脚的拉高/拉低,另一部分是延时。
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite()函数用于对某个引脚的状态进行赋值,在本例中体现为灯的亮与灭。
延时函数是Arduino为我们写好的,利用delay()即可实现,其单位为1ms。
(3)对内容进行修改实现功能
我们只需对引脚做一个简单的修改即可,将原来的13脚改为2脚。故搜索资料后,对管脚2操作如下:
const int LED_BUILTIN = 2;
const
关键字代表常量。它修改了变量的行为,使得该变量可以像其类型的任何其他变量一样使用。也就是说,LED_BUILTIN就是管脚2。
(4)验证上传
成功。
如果要修改灯的闪烁,就修改延时时间就可以了。
接下来我在DFROBOT网站上学习,第二个简单项目是利用LED输出SOS。实际上就是利用不同的闪烁时间分别代表S、O两个字母,配合循环完成。具体代码如下:
const int LED = 2;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED, OUTPUT);
}
// the loop function runs over and over again forever
void loop()
{
for(int x=0;x<3;x++)
{
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(150);
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
delay(100);//The interval between two letters
for(int x=0;x<3;x++)
{
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(400);
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
delay(100);//The interval between two letters
for(int x=0;x<3;x++)
{
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(150);
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
delay(100);
}
delay(5000);//The interval between two signals
}
最重要的是for语句的应用,注意点:
- 对for中变量类型的声明
- 中间用;间隔
- 所有for循环写在一个loop()中
2.ESP32中的按键使用
学完点灯,自然要学按键。
本实验功能:通过按键控制灯的亮灭,按下时等亮,松开时灭。
这个逻辑很简单,只需要对按键引脚做出判断即可。通过查询:ESP32板上对应按键的引脚是GPIO0。由于被上拉,所以当按下按键时,0口为逻辑0;松开按键时,0口为逻辑1。
故编程如下:
const int LED = 2;
const int KEY_0 = 0;
void setup()
{
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED, OUTPUT);
pinMode(KEY_0,INPUT_PULLUP);
}
void loop()
{
if (digitalRead(KEY_0)==0)//Determine if the key is pressed
{
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(150);
}
else
{
digitalWrite(LED, LOW); // turn the LED on (HIGH is the voltage level)
delay(150);
}
}
对上述代码作说明:
- 按键对应GPIO0,所以对其进行了定义
- 将0口设置为输入上拉模式
pinMode(KEY_0,INPUT_PULLUP);
这也就是为什么按键未按下时是逻辑1,按下时是0。
- 利用digitalRead()函数对0口的状态进行读取,用if……else逻辑进行判断
- 这里在每一个读取后加了一个小延时,做一个简单消抖
最终,结果如下:
按下按键前
按下按键后文章来源:https://www.toymoban.com/news/detail-434257.html
第一次记录到此结束。下一次计划更新利用ESP32实现AD采集。文章来源地址https://www.toymoban.com/news/detail-434257.html
到了这里,关于Arduino+ESP32-WROOM-32UE(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!