控制 GPIO 输出 - 点亮 LED
不论学习什么单片机,最简单的外设莫过于 IO 口的高低电平控制 LED,本节课将向大家介绍如何使用 MicroPython 控制 ESP32 的 GPIO 输出。通过本节课的学习,让大家对 MicroPython 的程序架构有一定的认识,为以后大型项目程序学习打下基础,增强信心。
实验原理
1. GPIO 引脚
引脚又叫管脚,英文叫 Pin, 就是从集成电路(芯片以及一些电子元件)内部电路引出与外围电路的接线的接口。
在我们的 ESP32 开发板上, 我们可以把这些称为引脚, 这些引脚其实是从 ESP32 芯片内部引出来的, 我们可以看到每个引脚都标了自己独特的名字。
其中有一类引脚叫 GPIO 引脚, 负责输入/输出电压。开发板上 D 开头的引脚都是这种引脚, 比如 D2、D4、D15 等等
输入我们暂时不讲,这里我们先讲一下输出,简单来说,每个 GPIO 都可以输出高低电平。
什么是电平?
电路上某点的电压(对公共参考点)或电位是高还是低。比如在逻辑电路中,高于某个数值的电位称其为高电位,或高电平,低于某个数值的,为低电位或低电平。比如 ESP32 中,高电平的数值大于2.5V,低电平的数值小于0.5V,具体的数值最好通过测试研究来确定。
2. LED
LED(light-emitting diode) 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在 3mA-20mA 之间,通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为限流电阻
。当发光二极管发光时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的导通压降
。
发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为阳极,短脚为阴极。
硬件电路设计
物料清单(BOM 表):
材料名称 | 数量 |
---|---|
直插式 LED | 1 |
1kΩ 电阻 | 1 |
杜邦线(跳线) | 若干 |
面包板 | 1 |
LED 的正极接开发板的 D12 引脚,并串联一个电阻,负极接 GND,如下图:
注意
一定要接电阻,不然会由于电流过大,烧坏 LED。
软件设计
1. 点亮一颗 LED
因此,如果我们想要点亮这颗 LED 的话,只需要先设定相关引脚为输出模式,然后给这个引脚赋值一个高电平即可。
// 设置 LED 引脚
int led_pin = 12;
void setup() {
// 设定引脚为输出模式
pinMode(led_pin, OUTPUT);
// 点亮 LED
digitalWrite(led_pin, HIGH);
}
void loop() {
}
通过 IDE 编写上述代码,然后运行,此时会看到电路中的 LED 灯被点亮了。
2. 闪烁的 LED 灯
我们已经成功点亮一颗 LED 了,接下来,可以尝试一下稍微复杂一点的逻辑,比如让这颗 LED 闪烁。
实现 LED 闪烁的原理很简单,就是在 loop
函数中使用延时函数 delay
。先设置高电平,延时 X 秒,再设置低电平,延时 X 秒,之后就不断循环该语句即可。
在之前的 初识 Arduino 编程语言 中,我们学习了 loop
函数的用法,如果我们想要让灯泡一直闪烁,则需要在 loop
函数中不断改变 LED 状态。
// 设置 LED 引脚
int led_pin = 12;
void setup() {
// 设定引脚为输出模式
pinMode(led_pin, OUTPUT);
}
void loop() {
// 点亮 LED
digitalWrite(led_pin, HIGH);
// 等待一段时间
delay(1000);
// 关闭 LED
digitalWrite(led_pin, LOW);
// 等待一段时间
delay(1000);
}
运行程序,LED 就闪烁了。