目录
介绍
通用输入/输出(GPIO)是IC(集成电路)上的引脚。它可以是输入引脚或输出引脚,其行为可以在运行时控制。
NodeMCU开发套件提供对ESP8266的这些GPIO的访问。唯一需要注意的是NodeMCU Dev kit引脚的编号与ESP8266的内部GPIO符号不同,如下图和表所示。例如,NodeMCU开发套件上的D0引脚映射到ESP8266的内部GPIO引脚16。
NodeMCU GPIO
下表给出了NodeMCU Dev Kit IO引脚和ESP8266内部GPIO引脚映射
蓝色框(1,3,9,10)中显示的GPIO大部分不用于开发套件中的GPIO用途
ESP8266是片上系统(SoC)设计,具有处理器芯片等组件。处理器有大约16条GPIO线,其中一些用于内部与SoC的其他组件接口,如闪存。
由于ESP8266 SoC内部使用了几条线路,因此我们还有大约11个GPIO引脚用于GPIO。
现在,11个中的2个引脚通常被保留用于RX和TX,以便与通过其下载编译的目标代码的主机PC通信。
因此,最后,这只留下了9个通用I / O引脚,即D0到D8。
如NodeMCU Dev Kit的上图所示。我们可以看到RX,TX,SD2,SD3引脚并不主要用作GPIO,因为它们用于其他内部处理。但我们可以尝试使用SD3(D12)引脚,它主要用于响应GPIO / PWM /中断等功能。
注意,D0 / GPIO16引脚只能用作GPIO读/写,不支持特殊功能。
现在让我们看一下将引脚初始化为GPIO模式,设置引脚方向及其状态(高/低)所需的功能
NodeMCU GPIO功能
gpio.mode()
该功能用于将引脚初始化为GPIO模式。
句法:
gpio.mode(pin, mode [, pullup])
参数:
- Pin:引脚号
- Mode: gpio.OUTPUT,gpio.OPENDRAIN,gpio.INPUT或gpio.INT(中断模式)之一
- Pullup: gpio.PULLUP使能弱上拉电阻。默认为gpio.FLOAT
返回: null
例
gpio.mode(0, gpio.OUTPUT) -- Setting 0th pin as GPIO output pin
gpio.read()
该功能用于读取GPIO引脚的数字值。
句法:
gpio.read(pin)
参数:
- Pin:别针 阅读。
例:
gpio.read(0) -- Read digital value of D0 (GPIO16) pin.
gpio.write()
此功能用于设置数字GPIO引脚值。
句法:
gpio.write(pin, level)
参数:
- Pin:引脚写入,IO索引
- Level: gpio.HIGH或gpio.LOW
返回: null
例:
gpio.mode(1, gpio.OUTPUT)–- set 1st pin as GPIO output pin
gpio.write(1, gpio.HIGH) –- set 1st GPIO output pin to High.
例
让我们为D4引脚上的LED写一个闪烁的Lua脚本。
这里我们使用定时器延迟功能来设置LED ON和LED OFF状态之间的延迟。
tmr.delay()
定时器的这个功能用于提供以微秒为单位的延迟。
句法:
tmr.delay(microseconds)
参数:
- microseconds:输入参数不需要微秒。
返回: null
例:
tmr.delay(100) –- delay of 100 microseconds.
用于LED闪烁的Lua脚本
LEDpin = 4 -- Declare LED pin no.
delayuS = 500000 -- Set delay in microSecond. here 0.5 second
gpio.mode(LEDpin,gpio.OUTPUT)-- Set LED pin as GPIO output pin
while(1) -- Define infinite while loop
do
gpio.write(LEDpin,gpio.HIGH)-- Set LED pin HIGH i.e. LED ON
tmr.delay(delayuS) -- timer Delay
gpio.write(LEDpin,gpio.LOW)-- Set LED pin LOW i.e. LED OFF
tmr.delay(delayuS) -- timer Delay
end
还有另一种定时器报警选项,我们可以通过设置特定时间的重复报警来切换LED。下面是定时器报警功能信息和LED闪烁示例。
tmr.alarm()
该功能将tmr.register()定时器寄存器)和tmr.start()(定时器启动)操作组合到一个功能中。要在完成使用后停止计时器,请tmr.unregister()在其上调用(计时器取消注册)。对于一次性定时器,这不是必需的,除非它们在到期之前停止。
句法:
tmr.alarm([id/ref], interval_ms, mode, func())
参数:
- id/ref: timer id(0-6)或object。NodeMCU提供7个静态定时器,编号为0-6。
- interval_ms:定时器间隔,以毫秒为单位。最大值为6870947(1:54:30.947)。
- mode (timer mode):
- tmr.ALARM_SINGLE – 一次性警报(无需拨打电话tmr.unregister())
- tmr.ALARM_SEMI – 手动重复警报(调用tmr.start()重启)
- tmr.ALARM_AUTO – 自动重复警报。
- func(timer) :回调函数。
返回:true如果计时器已启动,则返回false
用于LED闪烁的Lua脚本使用定时器警报
本教程完整程序下载:
ESP8266数据手册下载: