芯片管脚介绍
开发板能做什么功能,取决于核心芯片的支持,ESP8266EX是乐鑫公司研制的一款物联网wifi低功耗芯片。乐鑫官方产品规格书对芯片的管脚定义如下
黑色:管脚序号 & 名称 | 紫色:管脚类型 | 红色:用途介绍
GPIO Pin
上图中类型为I/O的管脚即为GPIO引脚,作为与外界交互的输入与输出端使用,如控制led灯、蜂鸣器、读取温湿度传感器数据、输出PWM脉冲信号等。
红色用途字体中,有对可用GPIO引脚的说明和号码的定义,实际上只有以下这些才是可用的GPIO引脚
- GPIO
0
- GPIO
2
- GPIO
4
- GPIO
5
- GPIO
12
- GPIO
13
- GPIO
14
- GPIO
15
- GPIO
16
其他的都有特殊用途(如:GPIO1
& GPIO3
被用作UART与硬件进行信息交互的接口,前面进的REPL就是通过这两个引脚来实现的)
代码控制Pin
>>> from machine import Pin # 从machine库中引入Pin
>>> pin = Pin(2, Pin.OUT) # 实例化一个Pin,使用GPIO2,并定义模式为输出
>>> pin.value(0) # 设置pin为低电平
>>> pin.on() # 设置pin为高电平
开发板板载了一个LED灯,接在GPIO2引脚上,而且是反接的。所以当pin.value(0)
给低电平时,反而点亮了灯。
8266开发板在实例Pin对象时,还有一个pull参数,可以定义引脚pull为无模式None
或者上拉模式 PULL_UP
上拉/下拉其实对于没有电工电子基础的我来说也比较蒙圈。查了些资料,大概意思是芯片内部对于GPIO的驱动能力是有限的,当驱动不足时 (以下理解可能有误,待学习深入以后再过来确认和纠正)
配合上拉电阻可以提高引脚电平值,从而达到外部器件的输入要求。(向外拉电流)(外部接GND)
配合下拉电阻可以降低引脚的电流,从而小于外围器件电流,方便外部输入。(向内灌电流)(外部接VCC)
- esp8266没有下拉模式
- GPIO
16
引脚没有上拉模式,所以这个引脚不能用OUT模式来控制外部器件,只能读取外部输入值
外部中断IRQ
除GPIO16
外,其他引脚都可以响应输入中断事件。可以给中断配置回调函数来实现定制的功能。
先定义一个简单的回调:
>>> def callback(p):
... print('pin changed', p)
使用两个引脚来测试中断事件
>>> from machine import Pin
>>> p4 = Pin(4, Pin.IN)
>>> p5 = Pin(5, Pin.IN)
给引脚绑定中断类型和响应回调
>>> p4.irq(trigger=Pin.IRQ_FALLING, handler=callback)
>>> p5.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)
- tigger 中断类型
IRQ_RISIONG
即引脚从低电平转变为高电平,IRQ_FALLING
反过来从高电平转变为低电平
- handler 绑定事件(回调函数)
REPL中执行上面代码后,用手去触碰4、5引脚,可以看到回调函数打印的日志。