ESP32 引脚说明

ESP32 共有 38 个引脚如下所示:

ESP32-GPIO

引脚功能分类

功能简介引脚编号
ADC: 模拟信号采样32, 33, 34, 35, 36, 39
DAC: 模拟信号输出25, 26
UART: 串行通信1(TX0),3(RX0) ; 10(TX1),9(RX1) ; 17(TX2),16(RX2)
TOUCHPAD: 触摸传感器(检测手指接触引脚产生的电容差)0, 2, 4, 12, 13, 14, 15, 27, 32, 33
SPI: SPI总线接口hspi(14,12,13,15) vspi(23,19,18,5)
I2C: I2C总线接口SDA(21) SCL(22)

只能作为输入的引脚

除了 GPIO34, GPIO35, GPIO36, GPIO39 这四个 GPIO 引脚只能作为输入,而无法作为输出外,其他所有 GPIO 引脚都能进行双向输入输出

信息-数据-信号

理解使用引脚接收传感器数据的过程,首先要理解 信息, 数据信号 的概念:

信息是对现实事物存在方式或运动状态的描述,信息的表现形式可以是数学、文字、语言、图形及动画等,信息使这些表示形式包含了具体的内容和意义。
数据是信息的载体,它是信息的表示形式,可以是数字、字符、符号等。单独的数据没有实际的含义。数据和信息既有区别又有联系,数据是独立的,虽然数据本身并没有含义,但把数据按一定规则、形式组织起来时,就可以传达某种意义,这种具体意义的数据集合就是信息。例如,单独的英文字母:“h”,“o”,“r”,“s”,“e”,是没有意义的,但我们把它们组合起来成为一个单词“horse”时,它就具有“马”这样一个信息的意义了。
信号是数据在传输过程中的具体物理表示形式,具有确定的物理描述,如电压、磁场强度等。

使用引脚的目的是为了发送或者接收一些信息,而这些信息是用数据表示的.计算机底层是没有办法理解数据的,但是能理解电平的高低,所以数据最终要以信号的方式从引脚流入或者流出,然后通过程序的处理转换为数据,被人类使用.也就是说信号是运载数据的工具,信号是数据的载体。信号包含光信号、声信号和电信号等.在今天的计算机内部处理中主要是 电信号 (不是全部,比如计算机网络中的光纤是光信号).

电信号

电信号的本质是随着时间而改变电压或电流大小.电信号主要分为两种,一种是数字信号,另一种是模拟信号.

  • 数字信号: 电压或者电流的取值是离散的,幅值表示被限制在有限个数值之内。最常用的二进制码就是一种数字信号。在这种二进制体系中,用 0 表示 低电平, 1 表示 高电平.(在编程的时候直接控制引脚 高电平低电平 就可以了,具体高低电平对应什么电压,雨我无瓜)

  • 模拟信号: 电压或者电流的取值是连续的.

假设横轴为时间可以把两种信号的波形化成下面的图展示出来:

digital signal and analog signal

Pin 类的使用

MicroPython 通过 machine 模块的 Pin 类控制各类 GPIO 引脚.

定义一个 Pin

定义 Pin 可以传入以下参数:

  • id:任意引脚号

  • mode:引脚模式(输入,输出)

  • pull:是否接入上拉\下拉电阻

  • value:引脚电平状态(0 —低电平,1 —高电平)

1
2
pin = Pin(12, mode=Pin.OUT, pull=None, value=0)
print(pin)

Pin.init([mode[, pull]])

pin 定义中 id 为必填参数,其他参数可以通过 init 方法传入. init 方法用于初始化引脚

1
2
3
from machine import Pin
pin = Pin(12)
pin.init(mode=Pin.OUT) #也可以写作pin.init(Pin.OUT)

Pin.value([value])

通过 value 方法,控制引脚发出的信号.

1
2
pin = Pin(12, mode=Pin.OUT, pull=None, value=0)
pin.value(1)

Pin.irq(trigger, handler)

设置引脚的中断处理程序,在引脚的电平满足条件时运行回调函数

trigger 可选的参数有:

  • Pin.IRQ_FALLING — 下降沿触发

  • Pin.IRQ_RISING — 上升沿触发

handler 为中断被触发之后的回调函数

1
2
pin = Pin(32, Pin.IN)
pin.irq(trigger=Pin.IRQ_FALLING, handler=lambda t: print("Triggered"))

然后用手触摸 32 号引脚之后,可以在终端看到输出.

数字信号示例: 闪烁LED灯

led

使用 ESP32 开发板点亮上面的 LED 灯.点亮 LED 灯两种方式:

  • 灯正极接输出端, 灯负极接板子的 GND, 当输出端输出高电平时灯点亮;
  • 灯负极接输出端, 灯正极接板子的 V5, 当输出端输出低电平时灯点亮.

首先从 machine 模块中导入了 Pin 这个类. 然后定义引脚为输入类型还是输出类型, 最后通过给引脚写入高低电平来控制 LED 灯的亮暗:

1
2
3
4
5
6
7
8
9
10
from machine import Pin
import time

led_pin = Pin(12, mode=Pin.OUT, pull=None, value=0)
print(led_pin)
while True:
led_pin.value(1)
time.sleep(1)
led_pin.value(0)
time.sleep(1)