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.PULLUPH
和gpio.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.HIGH
或gpio.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()
函数可以看成已开机多少时间,没有参数,单位为微秒。