nodecu8266 lua应用(三)----模块基础

本文详细介绍了NodeMCU与ESP8266的开发过程,包括timer模块的使用,如延时、系统计数器、周期函数等;GPIO模块的配置,如设置IO口模式、读写电平、外部中断;以及uart模块的串口设置与数据接收。适合初学者入门及进阶学习。

timer模块

是一些关于时间的函数,一共有5个函数,具体如下

函数名参数返回值功能
tmr.wdclr()nilnil清除看门狗
tmr.delay()numbernil延时函数
tmr.now()nilnumber系统计数器函数
tmr.alarm()id, interval, repeat, functionnil周期函数
tmr.stop()idnil停止周期函数

 

tmr.wdclr()

清除看门狗函数,没有参数,没有返回值
当有一个比较长的循环时使用,防止重启

示例请参考`tmr.delay()`的示例

 

tmr.delay()

延时函数,以下是参数说明
tmr.delay(us)

us:
——number:延时的微秒数,输入1就是延时1微秒

 

实验:每秒打印一个OK

while true do
    print("ok")
    tmr.delay(1000000)
    tmr.wdclr()   --防止重启,清除看门狗
end

 

tmr.now()

系统计时器函数,可以看成已开机多少时间,没有参数

没有参数,返回已经开机多少时间,单位为微秒

示例:请参考`tmr.alarm()`

 

tmr.alarm()

周期函数,也叫闹钟函数,参数说明如下
tmr.alarm(id, interval, repeat, function do())

id:
——number:0~6,一共可以设置7个周期函数
interval:
——number:定时的时间,单位为毫秒
repeat:
——011是重复函数,0是一次性函数
function:
——函数名:时间到了需要做的函数

 

实验

每秒打印一次系统计数器时间,10秒后停止

i=0
tmr.alarm(0, 1000,1, function()
  
    print(tmr.now())
    if(i>=10)then
        tmr.stop(0)
    end
    i=i+1
end)

 

tmr.stop()

停止周期函数,参数入下
tmr.stop(id)

id:
——number:0~6,需要停止的周期函数

示例:参考tmr.alarm()

 

 

GPIO模块

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

函数名参数返回值功能
gpio.mode()pin, mode, pullupnil设置io口模式
gpio.write()pin,levelnil设置io口电平高低
gpio.read()pin0 or 1读取io口电平高低
gpio.trig()pin, type, function(level)nil外部中断函数

 

ESP8266和nodeMCU引脚对应关系,如下图所示

需要注意的是
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.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.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)


 

uart模块

串口主要由三个函数
uart.setup( id, baud, databits, parity, stopbits, echo )
uart.on(method, function, [run_input])
uart.write( id, string1, string2... )

 

uart.setup()

 uart.setup(0, 115200, 8, 0, 1, 1 )

此时的波特率为115200,改变波特率会改变这一项即可,其他的不要变,
**注意**:波特率设置一定要写在代码的最后,不然会出错。

 

uart.on(method, function, [run_input])

uart.on("data",'x',function(msg)
  --在这里写你的代码
end, 0)
--‘x’为中断标志,省略这默认为“\n”,msg为接收到的数据

 

uart.write( id, string1, string2... )

 uart.write( 0, string)

--参数string为要向串口输出的数据,
一般都用print()函数代替此函数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值