esp8266学习笔记③:GPIO模块

版权声明:本博客内容仅供学习使用 https://blog.csdn.net/weixin_42573320/article/details/86413616

GPIO引脚映射

IO INDEX EXP8266 PIN IO
0[*] GPIO16
1 GPIO5
2 GPIO4
3 GPIO0
4 GPIO2
5 GPIO14
6 GPIO12
7 GPIO13
8 GPIO15
9 GPIO3
10 GPIO1
11 GPIO9
12 GPIO10
备注 [*] D0(GPIO16) 只能用作 gpio 读写,不支持中断,i2c/pwm/ow

每个开发版上GPIO映射的管脚都不一样,一般官方的资料上都有。

GPIO用到的常量


gpio.OUTPUT ——GPIO输出
gpio.INPUT ——GPIO输入
gpio.INT ——GPIO中断
gpio.HIGH ——GPIO高电平
gpio.LOW ——GPIO低电平
gpio.PULLUP ——GPIO上拉模式
gpio.FLOAT ——GPIO浮空模式


GPIO的使用

gpio.mode()
功能:选择pin管脚,设置gpio的模式
语法:gpio.mode(pin, mode, pullup)
参数:
pin为I/O口映射的编号0~12
mode为GPIO的输入输出模式,分别为:gpio.OUTPUT,gpio.INPUT,gpio.INT
pullup分为两种:gpio.PULLUPHgpio.FLOAT,默认为gpio.FLOAT
返回值:nil

gpio.read
功能:读取pin管脚的高低电平
语法:gpio.read(pin)
参数:
pin为I/O口映射的编号0~12
返回值:0表示低电平1表示高电平

gpio.write()
功能:设置管脚的高低电平
语法:gpio.write(pin,level)
参数:
pin为I/O口映射的编号0~12
level为高低电平gpio.HIGHgpio.LOW
返回值:nil

gpio.trig()
功能:设置管脚中断模式的回调函数
语法:gpio.trig(pin, type, function(level))
参数:
pin为I/O口映射的编号1~12,0不支持中断
type取值为up——上升沿触发,down——下降沿触发,both——双边沿触发,low——低电平触发,high——高电平触发
function(level) 中断触发的回调函数,GPIO 的电平作为输入参数。如果此处 没有定义函数,则使用之前定义的回调函数。
返回值:nil

GPIO应用实例

按键控制LED灯的亮灭

led=4
key=7
flag=true	--设置一个标志位
gpio.mode(led, gpio.OUTPUT)	--设置PIN4为输出模式,接LED
gpio.mode(key, gpio.INPUT,gpio.PULLUP)	--设置PIN7为输入模式,接按键
while true do	--一直在循环检测按键是否按下
    if gpio.read(key)==1 and  flag == true then  --按键按下
        gpio.write(led, gpio.HIGH)	--PIN4输出高电平
        flag=false
    elseif gpio.read(key)==1 and  flag == false then		--按键再次按下
        gpio.write(led, gpio.LOW)	--PIN4输出低电平
        flag=true
    end
    while gpio.read(key)==0 do		--如果按键没松开就停在这里
        tmr.wdclr()	--关闭看门狗
    end
    tmr.wdclr()
end

注:tmr.wdclr是清除看门狗的函数,在timer模块中会讲到,当有一个长时间的循环时,要加上tmr.wdclr防止重启。

记录按键按下的时间

pin = 5
time = 0
gpio.mode(pin,gpio.INT,gpio.PULLUP) 	--设置gpio的模式为上拉,中断模式
function fun(level)    	--定义一个fun()函数
    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)

注:tmr.now()函数可以看成已开机多少时间,没有参数,单位为微秒。

猜你喜欢

转载自blog.csdn.net/weixin_42573320/article/details/86413616