http://www.basemu.com/nodemcu-gpio-interface.html
通用输入/输出(GPIO)是集成电路上的一个引脚功能,它既可以是输入引脚,也可以是输出引脚,这些功能均可以在编写程序时进行控制。
NodeMCU的开发工具包( Dev kit )提供了对Nodemcu GPIO的支持。唯一需要注意的是,NodeMCU Dev kit引脚的编号与Nodemcu的内部GPIO编号不是一个编号。例如,NodeMCU Dev kit上的D0引脚被映射到ESP8266的内部GPIO引脚16。这和树莓派的BCM编号与GPIO编号不相同是一样的(树莓派GPIO),如下所示。
Nodecu的GPIO接口
下表给出了NodeMCU Dev Kit IO引脚和ESP8266内部GPIO引脚的映射关系:
NodeMCU开发工具包上的Pin名称 | ESP8266 内部 GPIO Pin 编号 |
---|---|
D0 | GPIO16 |
D1 | GPIO5 |
D2 | GPIO4 |
D3 | GPIO0 |
D4 | GPIO2 |
D5 | GPIO14 |
D6 | GPIO12 |
D7 | GPIO13 |
D8 | GPIO15 |
D9/RX | GPIO3 |
D10/TX | GPIO1 |
D11/SD2 | GPIO9 |
D12/SD3 | GPIO10 |
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 }