NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 资料

  • 笔记

  • ESP32入门

    • 硬件 - ESP32
    • 软件 - Arduino
    • 软硬件 - 通信
      • GPIO(通用输入输出端口)
        • 函数
        • pinMode(pin, mode) - 设置引脚工作模式
        • digitalWrite(pin, value) - 设置引脚高/低电平
        • digitalRead(pin) - 读取引脚电平状态
        • 延迟函数
        • 实验
        • LED点亮
        • 蜂鸣器
  • 嵌入式
  • ESP32入门
NipGeihou
2025-12-30
目录

软硬件 - 通信

# GPIO(通用输入输出端口)

最常用的外设之一

  • General Purpose Input Output,即通用输入输出端口,简称 GPIO
  • 用于写入和读取引脚状态。被广泛用于点灯和检测按键。 image.png

# 函数

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 点亮

image.png

  • 灌入电流:指 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
软件 - Arduino

← 软件 - Arduino

最近更新
01
硬件 - ESP32
12-25
02
软件 - Arduino
12-25
03
软件源
12-19
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式