软硬件 - 通信
# GPIO(通用输入输出端口)
最常用的外设之一
- General Purpose Input Output,即通用输入输出端口,简称 GPIO
- 用于写入和读取引脚状态。被广泛用于点灯和检测按键。

# 函数
pinMode() // 设置引脚的工作模式
digitalWrite() // 设置引脚输出高低电平数字信号
digitalRead() // 从制定引脚读取外部输入的数字信号
# pinMode (pin, mode) - 设置引脚工作模式
pinMode() | Arduino Documentation (opens new window)
void setup() {
pinMode(13, OUTPUT); // sets the digital pin 13 as output
}
void loop() {
digitalWrite(13, HIGH); // sets the digital pin 13 on
delay(1000); // waits for a second
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000); // waits for a second
}
# digitalWrite (pin, value) - 设置引脚高 / 低电平
Warning
仅在 pinMode(x, OUTPUT) 为 OUTPUT 模式时生效
# digitalRead (pin) - 读取引脚电平状态
Warning
仅在 pinMode(x, INPUT) 为 INPUT 模式时生效
# 延迟函数
// 阻塞延迟
delay(500); // 毫秒
delayMicroseconds(1000); // 微妙
// 非阻塞实现
millis(); // 读取自程序启动以来的毫米数;通过判断毫秒数的变化实现延迟执行
# 实验
# LED 点亮

- 灌入电流:指 LED 供电电流是由外部提供电流,将电流灌入 MCU,因此 MCU 需要设置低电平才可点亮。
- 输出电流:指由 MCU 提供电压电流,将电流输出给 LED,因此 MCU 需要设置高电平才可点亮。
而至于一个开发板是使用灌入电流还是输出电流实现的 LED 点亮,最佳的办法是查看原理图,如果没有原理图或只能靠蒙。
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, HIGH); // 设置高电平,如果不亮就低电平;但通常在初始化时设置为不亮
}
void loop() {
digitalWrite(13, LOW);
delay(200);
digitalWrite(13, HIGH);
delay(200);
}
Note
Arduino 内置了大量的示例代码,如(顶部)文件 - 示例 - ESP32 - GPIO - BlinkRGB
优化延迟逻辑
unsigned long time0 = 0;
unsigned long temp = 0;
unsigned long t = 1000;
....
void loop(){
time = millis();
if((time - temp) >= t){
temp = time;
// 执行1000毫秒一次的逻辑
}
}
# 蜂鸣器
蜂鸣器是一种将电信号转换为声音信号的器件,常用于产生按键音、报警音等提示信号。 蜂鸣器按驱动方式可分为 有源蜂鸣器 和 无源蜂鸣器。
有源蜂鸣器:内部自带震荡源,将正负极接上直流电源就会叫。 无源蜂鸣器:内部不带震荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音,比如 “多来米发索拉西”。
Note
- 有源蜂鸣器不能跟 LED 一样直接用单片机 IO 口驱动,一般来说,蜂鸣器的电流需求比较大,通常 30ma 左右,而单片机的 IO 口驱动能力有限往往无法提供这么大的电流。可以使用外部驱动电路驱动蜂鸣器工作(三极管开关电路)。
- 具体见:ESP 芯片数据手册及蜂鸣器数据手册的参数
与 LED 代码类似,主要区别为 GPIO 操控的是三极管的
上次更新: 2025/12/30, 22:02:38