点亮LED

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
--init.lua
--定义 IO 口
LEDB = 5
LEDR = 6
LEDG = 7
--设置 IO 口模式
gpio.mode(LEDB, gpio.OUTPUT)
gpio.mode(LEDR, gpio.OUTPUT)
gpio.mode(LEDG, gpio.OUTPUT)
--初始设置输出低电平, 所有灯都不亮
gpio.write(LEDB, gpio.LOW)
gpio.write(LEDR, gpio.LOW)
gpio.write(LEDG, gpio.LOW)
--初始化 COUNTER
COUNTER = 0
print("----Hello----")
--注册定时器 0
tmr.register(0, 1000, tmr.ALARM_AUTO,
function()
COUNTER = COUNTER + 1;
if(COUNTER % 3 == 0) then
gpio.write(LEDR, gpio.HIGH)
gpio.write(LEDG, gpio.LOW)
gpio.write(LEDB, gpio.LOW)
print("----Red Led ON----")
elseif (COUNTER % 3 == 1) then
gpio.write(LEDR, gpio.LOW)
gpio.write(LEDG, gpio.HIGH)
gpio.write(LEDB, gpio.LOW)
print("----Green Led ON----")
elseif (COUNTER % 3 == 2) then
gpio.write(LEDR, gpio.LOW)
gpio.write(LEDG, gpio.LOW)
gpio.write(LEDB, gpio.HIGH)
print("----Blue Led ON----")
else
print("----Exception Error----")
end
end
)
--启动定时器 0
tmr.start(0)

在NodeMCU中init.lua是定义的系统启动时运行的文件, 相当于以前我们DOS系统里的autoexec.bat文件和linux系统中的rc.local文件,即开机运行的意思。将脚本命名为 init.lua 方便开机直接运行。

GPIO

关于GPIO的文档网站文档Github文档
GPIO(General Purpose I/O Ports)通用输入输出口,简单的说就是这个开发板上留出的针脚。上面程序中的gpio就是nodeMCU的GPIO模块,用于提供对开发板上GPIO针脚的编程控制 。模块和开发板上的针脚并不一定是一一对应的,如这块板的14口控制蓝色LED是对应模块的第5口。GPIO模块有如下方法

gpio.mode()

原型: gpio.mode(pin, mode,pullup)
作用: 初始化引脚的输入输出模式
参数:

  1. 引脚io索引
  2. 引脚模式gpio.OUTPUT,gpio.INPUT或gpio.INT(中断模式)
  3. 内部上拉方式取值为:gpio.PULLUP or gpio.FLOAT, 默认为gpio.FLOAT(即悬空)

例子: gpio.mode(0, gpio.OUTPUT)
返回值: nil

gpio.read( )

原型: gpio.read(pin)
作用: 读取引脚值
参数: 引脚索引
例子: gpio.read(0)
返回值: 0或1,即高低电位

gpio.write( )

原型: gpio.write(pin, level)
作用: 设置引脚值
参数:

  1. 引脚索引
  2. 引脚值gpio.HIGH或gpio.LOW

例子: gpio.write(0, gpio.HIGH)
返回值: nil


由上图可知5,6,7口用于控制蓝红绿三色LED,输出模式,高电平时LED灯亮,当输出模式低电平时灯不亮。
所以点亮LED,首先设置对应IO口的模式为输出模式,然后设置对应IO为高电平,这样即可点亮,简化版的代码:

1
2
3
4
5
6
7
8
--统一设置输出模式
gpio.mode(6,gpio.OUTPUT)
gpio.mode(7,gpio.OUTPUT)
gpio.mode(5,gpio.OUTPUT)
--将其他LED关闭,开启蓝灯
gpio.write(6,gpio.LOW)
gpio.write(7,gpio.LOW)
gpio.write(5,gpio.HIGH)

Timer

上面还用到了定时器模块,定时器用于执行定时任务,不过需要注意的是,Timer在精度上并不高,准确性有限。

tmr.register()

原型: tmr.register([id/ref], interval_ms, mode, func())
作用: 配置定时器并注册回调函数以在到期时调用。
参数:

  1. 定时器id(0-6,NodeMCU提供7个静态定时器,编号为0-6)
  2. 间隔时间,最多6870947毫秒
  3. 定时器模式:
    1.tmr.ALARM_SINGLE只执行一次,注册后不必调用 tmr.unregister()进行注销
    2.tmr.ALARM_SEMI 手动重复,通过调用tmr.start()重启
    3.tmr.ALARM_AUTO 自动重复
  4. 定时器到时运行的函数

需要注意的是注册后还要调用tmr.start()才会启动定时器

tmr.unregister()

原型: tmr.unregister([id/ref])
作用: 停止并注销定时器
参数:
注册的定时器id

tmr.start( )

原型: tmr.start([id/ref])
作用: 启动定时器
参数:
注册的定时器id

如果启动成功将会返回true

tmr.alarm()

使用和tmr.register()完全一样,不同在于它不用调用tmr.start()手动启动定时器。