第四集 GPIO模块

GPIO模块比较简单,一共4个函数,如下表所示

视频地址:

函数名 参数 返回值 功能
gpio.mode() pin, mode, pullup nil 设置io口模式
gpio.write() pin,level nil 设置io口电平高低
gpio.read() pin 0 or 1 读取io口电平高低
gpio.trig() pin, type, function(level) nil 外部中断函数
首先看看ESP8266和nodeMCU引脚对应关系,如下图所示
第四集 GPIO模块_第1张图片
nodemcu引脚对照.jpg

需要注意的是
D0(GPIO16) 只能用作 gpio 读写,不支持中断,i2c/pwm/ow

gpio.mode()

这是配置io口输入输出模式或中断模式的函数,参数定义如下
gpio.mode(pin, mode, pullup)

pin:
——number,0~12,io口标号
mode:
——gpio.OUTPUT(输出模式)
——gpio.INPUT(输入模式)
——gpio.INT(中断模式)
pullup:(可选参数)
——gpio.PULLUP(上拉模式)
——gpio.FLOAT(浮动模式,默认为浮动)

--示例:
led = 4
gpio.mode(4,gpio.OUTPUT,gpio.PULLUP)
--将4号脚设置为输出模式,上拉模式

gpio.write()

这是配置io口输出高低电平的函数,配置参数如下
gpio.write(pin,level)

pin:
——number,0~12,io口标号
level:
——gpio.HIGH(输出高电平)
——gpio.LOW(输出低电平)

实验:点亮第一个LED

我们让nodeMCU的4号脚(ESP8266的GPIO02)输出一个高电平,点亮LED
注意:4号脚与板子上的指示灯连在一起,如果输出低电平,指示灯亮,反之则灭,这里我们外接一个led

--示例
pin=4
gpio.mode(pin, gpio.OUTPUT)  --设置4号脚为输出模式
gpio.write(pin, gpio.HIGH)   --4号脚输出高电平
参考电路
第四集 GPIO模块_第2张图片

gpio.read()

这是读取io口高低电平的函数,参数配置如下
返回值为01,0是低电平,1是高电平
gpio.read(pin)

pin:
——number,0~12,io口标号

实验:按键控制LED

按键按下,灯亮,再按灯灭
LED灯连在4号角脚上,按键连在7号脚上,
注意,上拉电阻可以不接,直接在配置函数中添加上拉参数也可以,但至少需要其中一个,如果没有上拉电阻并且没有配置上拉参数,会引起混乱

示例
led=4
key=7
flag=true
gpio.mode(led, gpio.OUTPUT)  --设置4号脚为输出模式
gpio.mode(key, gpio.INPUT,gpio.PULLUP)  --设置7号脚为输入模式,上拉模式
while true do  --一直检测按键的状态
    if gpio.read(key)==0 and  flag == true then
        gpio.write(pin, gpio.HIGH)
        flag=false
    elseif gpio.read(key)==0 and  flag == false
        gpio.write(pin, gpio.LOW)
        flag=true
    end
    while gpio.read(key)==0 do   --如果按键没松开就停在这里
        tmr.wdclr()
    end
    tmr.wdclr()
end

参考电路

第四集 GPIO模块_第3张图片

gpio.trig()

这是配置io口外部中断的函数,配置参数如下
`gpio.trig(pin, type, function(level))

pin:
——number,0~12,io口标号
type: 触发方式
——up:上升沿触发
——down:下降沿触发
——both:双边沿触发
——low:低电平触发
——high:高电平触发
function(level):中断回掉函数,如果省略则默认调用上次调用的函数
——level:中断时,io口的电平高低,低电平为0,高电平为1

实验:记录按键按下的时间长度

电路图还是按键点亮小灯的电路图

--示例
pin = 7
time = 0
gpio.mode(pin,gpio.INT,gpio.PULLUP) 
function fun(level)    
    if level == 1 then 
        print(tmr.now()-time)
        gpio.trig(pin , "down")
    else 
        time = tmr.now()
        gpio.trig(pin , "up") 
    end 
end 
gpio.trig(pin, "down",fun)

你可能感兴趣的:(第四集 GPIO模块)