timer模块
是一些关于时间的函数,一共有5个函数,具体如下
| 函数名 | 参数 | 返回值 | 功能 |
|---|---|---|---|
tmr.wdclr() | nil | nil | 清除看门狗 |
tmr.delay() | number | nil | 延时函数 |
tmr.now() | nil | number | 系统计数器函数 |
tmr.alarm() | id, interval, repeat, function | nil | 周期函数 |
tmr.stop() | id | nil | 停止周期函数 |
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:
——0或1,1是重复函数,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, 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引脚对应关系,如下图所示

需要注意的是
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口高低电平的函数,参数配置如下
返回值为0或1,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()函数代替此函数
本文详细介绍了NodeMCU与ESP8266的开发过程,包括timer模块的使用,如延时、系统计数器、周期函数等;GPIO模块的配置,如设置IO口模式、读写电平、外部中断;以及uart模块的串口设置与数据接收。适合初学者入门及进阶学习。
9861

被折叠的 条评论
为什么被折叠?



