Nodemcu的GPIO接口介绍

  • 内容
  • ....
  • 相关

通用输入/输出(GPIO)是集成电路上的一个引脚功能,它既可以是输入引脚,也可以是输出引脚,这些功能均可以在编写程序时进行控制。

NodeMCU的开发工具包( Dev kit  )提供了对Nodemcu GPIO的支持。唯一需要注意的是,NodeMCU Dev kit引脚的编号与Nodemcu的内部GPIO编号不是一个编号。例如,NodeMCU Dev kit上的D0引脚被映射到ESP8266的内部GPIO引脚16。这和树莓派的BCM编号与GPIO编号不相同是一样的(树莓派GPIO),如下所示。

Nodemcu的GPIO接口
Nodemcu的GPIO接口

下表给出了NodeMCU Dev Kit IO引脚和ESP8266内部GPIO引脚的映射关系:

NodeMCU开发工具包上的Pin名称 ESP8266 内部 GPIO Pin 编号
D0GPIO16
D1GPIO5
D2GPIO4
D3GPIO0
D4GPIO2
D5GPIO14
D6GPIO12
D7GPIO13
D8GPIO15
D9/RXGPIO3
D10/TXGPIO1
D11/SD2GPIO9
D12/SD3GPIO10

ESP8266的GPIO(1,3,9,10)不能按常规的GPIO方式进行理解和使用,根据ESP8266的系统(SoC)设计,其内部包含了处理器芯片等组件,处理器大约有16条GPIO线路,其中一些GPIO规定默认用于与其他内部组件进行通信,比如与内部闪存的通信等。这样我们大约还有11个GPIO引脚可按常规GPIO进行使用,在这11个针脚中,又有2个针脚预留给串口RX和TX。因此,最后只剩下9个通用I/O引脚,即D0到D8。

在实际使用中,从上图我们可以看到一些GPIO引脚同时兼备了其他功能,如RX, TX, SD2, SD3,这些引脚大多不作为GPIO使用,因为它们可用于其他进程。极端情况下,可使用 SD3 (D12)引脚,D12引脚主要用于响应GPIO/PWM/中断等功能。需要注意的是,D0|GPIO16引脚只能作为GPIO读/写使用,不支持任何特殊功能。

来看一个在NodeMCU的D4引脚上的LED闪烁程序:

uint8_t LED_Pin = D4;       // declare LED pin on NodeMCU Dev Kit

void setup() {
pinMode(LED_Pin, OUTPUT);   // Initialize the LED pin as an output
}

void loop() {
digitalWrite(LED_Pin, LOW); // Turn the LED on
delay(1000);                // Wait for a second
digitalWrite(LED_Pin, HIGH);// Turn the LED off
delay(1000);                // Wait for a second
}