目录
三、ESP8266 core for Arduino 源码关于NodeMCU引脚设置的定义
概述
针对基于ESP8266的开发板和模组,本文主要对各GPIO引脚的合理规划使用和注意事项,作了详细归纳整理和详细 说明,对日常IOT开发具体重要的参考作用。
ESP8266 12-E/F 提供了17个GPIO引脚,并非全部的GPIO引脚在全部开发板都会看到,有些GPIO不推荐使用,其他则有很独特的功能。通过这个使用说明,我们可以学会如何正确地使用ESP8266 GPIO引脚 ,在开发工程时尽量避免浪费时间。
一、ESP8266 12—E/F 模组引脚图
二、ESP8266 12-E/F NodeMCU 引脚图
三、ESP8266 core for Arduino 源码关于NodeMCU引脚设置的定义
/*
pins_arduino.h - Pin definition functions for Arduino
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2007 David A. Mellis
Modified for ESP8266 platform by Ivan Grokhotkov, 2014-2015.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#define PIN_WIRE_SDA (4)
#define PIN_WIRE_SCL (5)
static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;
#ifndef LED_BUILTIN
#define LED_BUILTIN 2
#endif
#define LED_BUILTIN_AUX 16
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;
#include "../generic/common.h"
#endif /* Pins_Arduino_h */
四、ESP8266-NodeMCU引脚特性及使用建议
特别需要指出的是,基于ESP8266设计制作的各类开发板,其引脚丝印编号与芯片GPIO序号并没有保持一致性。例如,D0对应于GPIO16,D1对应于GPIO5。
下表显示了NodeMCU1.0 ESP—12E/F 开发板丝印标签和GPIO编号之间的对应关系,以及在项目中最好使用哪些引脚,以及需要谨慎使用哪些引脚。其中,以绿色突出显示的引脚可以放心使用;黄色突出显示的引脚也可以使用,但您需要注意,因为它们可能主要在启动时有意外行为;红色突出显示的引脚,不建议用作输入或输出。
Label (丝印) | GPIO 序号 | Input | Output | Notes |
D0 | GPIO16 | no interrupt | no PWM or I2C support | HIGH at boot used to wake up from deep sleep |
D1 | GPIO5 | OK | OK | often used as SCL (I2C) |
D2 | GPIO4 | OK | OK | often used as SDA (I2C) |
D3 | GPIO0 | pulled up | OK | connected to FLASH button, boot fails if pulled LOW |
D4 | GPIO2 | pulled up | OK | HIGH at boot connected to on-board LED, boot fails if pulled LOW |
D5 | GPIO14 | OK | OK | SPI (SCLK) |
D6 | GPIO12 | OK | OK | SPI (MISO) |
D7 | GPIO13 | OK | OK | SPI (MOSI) |
D8 | GPIO15 | pulled to GND | OK | SPI (CS) Boot fails if pulled HIGH |
RX | GPIO3 | OK | RX pin | HIGH at boot |
TX | GPIO1 | TX pin | OK | HIGH at boot debug output at boot, boot fails if pulled LOW |
A0 | ADC0 | Analog Input | X |
五、需要特别提醒和强调的几个具体问题
1、连接到闪存芯片的GPIO。GPIO6到GPIO11,通常连接到ESP8266板中的闪存芯片FLASH。因此,不建议使用这些引脚。
2、引导过程中使用的引脚所对应的GPIO。如果某些引脚被拉低或拉高,则可以禁止ESP8266正常启动。下面显示了MCU引导启动时(on boot)部分引脚的电平状态。
GPIO16:引导启动时,引脚为高电平。
GPIO0: 如果引脚电平被置为低电平,则会造成引导败。
GPIO2: 引导启动时,引脚为高电平。如果引脚被置为低电平,则会造成引导失败。
GPIO15:如果引脚被置为高电平,则会造成引导失败。
GPIO3: 引导启动时,引脚为高电平。
GPIO1: 引导启动时,引脚为高电平。如果引脚被置为低电平,则会造成引导失败。
GPIO10:引导启动时,引脚为高电平。
GPIO9: 引导启动时,引脚为高电平。
3、引导时被置为高电平的引脚所对应的GPIO。 某些引脚在ESP8266引导时输出3.3V信号。如果这些引脚与继电器或其他外围设备连接,可能会产生诸如误动动等其它问题。 以下GPIO引脚,在引导启动时会输出高电平信号(HIGH):GPIO16、GPIO3、GPIO1、GPIO10、GPIO9。
4、除了GPIO5和GPIO4之外,其他的部分GPIO在引导时会输出低电压信号,如果这些GPIO连接到晶体管或继电器,这可能是产生一些问题的。
如果你想连接或操作继电器,GPIO4和GPIO5所对应的引脚(D1、D2)是最安全的。
5、模拟输入引脚A0对应的GPIO。ESP8266仅支持在一个GPIO中进行模拟读取。GPIO被称为ADC0,模组或开发板丝印通常标记为A0。如果使用的是ESP8266芯片,则ADC0引脚的最大输入电压为0至1V。如果使用开发板如ESP8266 12-E NodeMCU套件,则电压输入范围为0至3.3V,因为这些板包含内部分压器。
6、板载(On-board)LED灯。大多数ESP8266开发板都内置了LED,通常连接到GPIO2。需要说明的是,这个板载LED灯通常以反相逻辑工作,发送HIGH信号会将其熄灭,发送LOW信号将其点亮。
7、RST引脚。当RST引脚被置为低电平时,将会复位ESP8266开发板,功能与按下板载的RESET按钮相同。
8、D3引脚对应的GPIO0。当GPIO0对应的引脚D3被置为低电平时,将会使ESP8266设置为引导加载程序模式,功能与按下板载FLASH/BOOT按钮相同。
9、D0引脚对应的GPIO16。GPIO16可用于将ESP8266从深度睡眠中唤醒,要将ESP8266从深度睡眠中唤醒,GPIO16应连接到RST引脚。
10、I2C通信。ESP8266没有硬件I2C引脚,但可以用软件实现。因此,您可以将任何GPIO用作I2C。通常,以下GPIO用作I2C引脚:GPIO5:SCL, GPIO4:SDA。
11、SPI通信。在ESP8266开发板相,这些引脚通过用于 SPI通信连接,一般对应关系为:GPIO12:MISO,GPIO13:MOSI,GPIO14:SCLK,GPIO15:CS。
12、PWM引脚。ESP8266允许在所有I/O引脚中使用软件PWM(但GPIO16除外),GPIO0到GPIO15。ESP8266上的PWM信号具有10位分辨率。
13、中断引脚。ESP8266支持除GPIO16以外的任何GPIO中的中断。
参考文档
1、ESP8266 Pinout Reference: Which GPIO pins should you use?
2、ESP8266 core for Arduino 部分源代码