nodeMcu API说明

English Version

版本 0.9.2 build 2014-11-19

变更日志:

2014-11-19

增加adc模块,adc.read(0)读取adc的值。

wifi模块增加wifi.sta.getap() 函数,用于获取ap列表。

2014-11-18

修正tcp服务器不能使用:close()函数关闭tcp连接的问题。

tcp服务器: 服务器将关闭30s内未使用的闲置的连接。(修正前为180s)

增加了函数node.input()用来向lua解释器输入lua代码段, 支持多行输入。

增加了函数node.ouput(function)用来将串口输出重定向于回调函数。

file.readline()函数返回值包含了EOL’\n’, 当读到EOF时,返回nil。

2014-11-12

全功能版本固件

2014-11-11

文件模块中增加了file.seek()函数。

最多支持6个PWM输出。

2014-11-10

log模块更名为file模块

文件操作支持多次读写。

当前仅支持打开一个文件进行操作。

2014-11-5

node模块中删除了log函数。

增加了log模块。

修改wifi模块的函数。

修改了node.key长按与短按的默认回调函数。

只有当按钮被松开后,key才会被触发。

flash 错误

注意:有些模块在烧写之后启动,串口输出 ERROR in flash_read: r=。。。

这是因为模块原来的flash内部没有擦除。

可使用blank512k.bin,

内容为全0xFF,从0x00000开始烧入。

烧入之后可以正常运行。

概述

IO indexESP8266 pinIO indexESP8266 pin
0GPIO128GPIO0
1GPIO139GPIO2
2GPIO1410GPIO4
3GPIO1511GPIO5
4GPIO3
5GPIO1
6GPIO9
7GPIO10

固件烧写

地址

nodemcu_512k.bin: 0x00000

node模块

node.restart()

描述

重新启动

语法

node.restart()

参数

nil

返回值

nil

示例

    node.restart();

参见

-

node.dsleep()

描述

进入睡眠模式,计时时间之后唤醒

语法

node.dsleep(us)

-注意: 如需使用此功能,需要将esp8266的PIN32(RST)和PIN8(XPD_DCDC)短接。

参数

us: 睡眠时间,单位:us

返回值

nil

示例

    node.dsleep(us);

参见

-

node.chipid()

描述

返回芯片ID

语法

node.chipid()

参数

nil

返回值

number:芯片ID

示例

    id = node.chipid();

参见

-

node.heap()

描述

返回当前系统剩余内存大小,单位:字节

语法

node.heap()

参数

nil

返回值

number: 系统剩余内存字节数

示例

    heap_size = node.heap();

参见

-

node.key()

描述

定义按键的功能函数, 按键与GPIO16相连。

语法

node.key(type, function())

参数

type: type取字符串”long”或者”short”. long:按下按键持续3s以上, short: 短按按键(时间短于3s)

function(): 用户自定义的按键回调函数。 如果为nil, 则取消用户定义的回调函数。

默认函数:long:改变LED闪烁频率,short:重新启动。

返回值

nil

示例

    node.key("long", function(){print('hello world')})

参见

-

node.led()

描述

设置LED的亮/暗时间, LED连接到GPIO16, 与node.key()复用。

语法

node.led(low, high)

参数

Low: LED关闭时间,如设置为0,则LED处于常亮状态。单位:毫秒,时间分辨率:80~100ms

High: LED打开时间,单位:毫秒,时间分辨率:80~100ms

返回值

nil

示例

    -- LED常亮.
    node.led(0);

参见

-

node.input()

描述

接收字符串并将字符串传入lua解释器。

功能同pcall(loadstring(str)),增加了支持多行输入的功能。

语法

node.input(str)

参数

str: Lua代码段

返回值

nil

示例

    -- 注意:该函数不支持在命令行中使用。
    sk:on("receive", function(conn, payload) node.input(payload) end)

参见

-

node.output()

描述

将lua解释器输出重定向于回调函数。

语法

node.output(function(str), serial_debug)

参数

function(str): 接收lua解释器输出的str作为输入,可以将该输出通过socket发送。

serial_debug: 1:将输出送至串口; 0:输出不送至串口

返回值

nil

示例

    function tonet(str)
      sk:send(str)
      -- print(str) 错误!!! 千万不要在此函数中再使用print函数
      -- 因为这样会导致函数的嵌套调用!!
    end
    node.ouput(tonet, 1)  -- serial also get the lua output.

参见

-

file 模块

file.remove()

描述

删除文件。

语法

file.remove(filename)

参数

filename: 需要删除的文件。

返回值

nil

示例

    -- 删除foo.lua文件
    file.remove("foo.lua")

参见

- file.open()

- file.close()

file.open()

描述

打开文件。

语法

file.open(filename, mode)

参数

filename: 需要打开的文件,不支持文件夹。

mode:

“r”: read mode (the default)

“w”: write mode

“a”: append mode

“r+”: update mode, 文件内的数据保留

“w+”: update mode, 文件内的数据清除

“a+”: append update mode, 文件内的数据保留,要写入的数据仅能增加在文件最后。

返回值

nil

示例

    -- 打开'init.lua',并打印文件的第一行。
    file.open("init.lua", "r")
    print(file.readline())
    file.close()

参见

- file.close()

- file.readline()

file.close()

描述

关闭文件。

语法

file.close()

参数

nil

返回值

nil

示例

    -- 打开'init.lua',并打印文件的第一行,然后关闭文件。
    file.open("init.lua", "r")
    print(file.readline())
    file.close()

参见

- file.open()

- file.readline()

file.readline()

描述

读取文件的一行。

语法

file.readline()

参数

nil

返回值

逐行返回文件内容。返回值末尾包含EOL(‘\n’)

如果读到EOF返回nil。

示例

    -- 打开'init.lua',读取并打印文件的第一行,然后关闭文件。
    file.open("init.lua", "r")
    print(file.readline())
    file.close()

参见

- file.open()

- file.close()

file.writeline()

描述

向文件写入一行,行末尾增加’\n’。

语法

file.writeline(string)

参数

string: 需要写入的字符串

返回值

true: 写入成功

nil: 写入失败

示例

    -- 以'a+'的模式打开'init.lua'
    file.open("init.lua", "a+")
    -- 将'foo bar'写到文件的末尾
    file.writeline('foo bar')
    file.close()

参见

- file.open()

- file.write()

file.write()

描述

向文件写入字符串。

语法

file.write(string)

参数

string: 需要写入的字符串

返回值

true: 写入成功

nil: 写入失败

示例

    -- 以'a+'的模式打开'init.lua'
    file.open("init.lua", "a+")
    -- 将'foo bar'写到文件的末尾
    file.writeline('foo bar')
    file.close()

参见

- file.open()

- file.writeline()

file.flush()

描述

清空缓存写入文件。

语法

file.flush()

参数

nil

返回值

nil

示例

    -- 以'a+'的模式打开'init.lua'
    file.open("init.lua", "a+")
    -- 将'foo bar'写到文件的末尾
    file.write('foo bar')
    file.flush()
    file.close()

参见

- file.open()

- file.writeline()

file.seek()

描述

设置或者读取文件的读写位置,位置等于whence加上offset的值。

语法

file.seek(whence, offset)

参数

whence:

“set”: base is position 0 (beginning of the file);

“cur”: base is current position;(default value)

“end”: base is end of file;

offset: default 0

返回值

成功: 返回当前的文件读写位置

失败: 返回nil

示例

    -- 以'a+'的模式打开'init.lua'
    file.open("init.lua", "a+")
    -- 将'foo bar'写到文件的末尾
    file.write('foo bar')
    file.flush()
    --将文件读写位置设置在文件开始
    file.seek("set")
    --读取并打印文件的第一行
    print(file.readline())
    file.close()

参见

- file.open()

- file.writeline()

file.list()

描述

显示所有文件。

语法

file.list()

参数

nil

返回值

返回包含{文件名:文件大小}的lua table

示例

    l = file.list();
    for k,v in pairs(l) do
      print("name:"..k..", size:"..v)
    end

参见

- file.remove()

wifi模块

常量

wifi.STATION, wifi.SOFTAP, wifi.STATIONAP

wifi.setmode(mode)

描述

设置wifi的工作模式。

语法

wifi.setmode(mode)

参数

mode: 取值为:wifi.STATION, wifi.SOFTAP or wifi.STATIONAP

返回值

返回设置之后的mode值

示例

    wifi.setmode(wifi.STATION)

参见

- wifi.getmode()

wifi.getmode(mode)

描述

获取wifi的工作模式。

语法

wifi.getmode()

参数

nil

返回值

返回wifi的工作模式

示例

    print(wifi.getmode())

参见

- wifi.setmode()

wifi.startsmart()

描述

开始自动配置,如果配置成功自动设置ssid和密码。

语法

wifi.startsmart(channel, function succeed_callback())

参数

channel: 1~13, 启动寻找的初始频段,如果为nil默认值为6频段。每个频段搜寻20s。

succeed_callback: 配置成功的回调函数,配置成功并连接至AP后调用此函数。

返回值

nil

示例

    wifi.startsmart(6, cb())

参见

- wifi.stopsmart()

wifi.stopsmart()

描述

停止配置。

语法

wifi.stopsmart()

参数

nil

返回值

nil

示例

    wifi.stopsmart()

参见

- wifi.startsmart()

wifi.sta 子模块

wifi.sta.config()

描述

设置station模式下的ssid和password。

语法

wifi.sta.config(ssid, password)

参数

ssid: 字符串,长度小于32字节。

password: 字符串,长度小于64字节。

返回值

nil

示例

    wifi.sta.config("myssid","mypassword")

参见

- wifi.sta.connect()

- wifi.sta.disconnect()

wifi.sta.connect()

描述

station模式下连接AP。

语法

wifi.sta.connect()

参数

nil

返回值

nil

示例

    wifi.sta.connect()

参见

- wifi.sta.disconnect()

- wifi.sta.config()

wifi.sta.disconnect()

描述

station模式下与AP断开连接。

语法

wifi.sta.disconnect()

参数

nil

返回值

nil

示例

    wifi.sta.disconnect()

参见

- wifi.sta.config()

- wifi.sta.connect()

wifi.sta.autoconnect()

描述

station模式下自动连接。

语法

wifi.sta.autoconnect(auto)

参数

auto: 0:取消自动连接,1:使能自动连接。

返回值

nil

示例

    wifi.sta.autoconnect()

参见

- wifi.sta.config()

- wifi.sta.connect()

- wifi.sta.disconnect()

wifi.sta.getip()

描述

station模式下获取ip

语法

wifi.sta.getip()

参数

nil

返回值

ip地址字符串,如:”192.168.0.111”

示例

    -- print current ip
    print(wifi.sta.getip())

参见

- wifi.sta.getmac()

wifi.sta.getmac()

描述

station模式下获取mac地址。

语法

wifi.sta.getmac()

参数

nil

返回值

mac地址字符串,如:”18-33-44-FE-55-BB”

示例

    -- 打印当前的mac地址
    print(wifi.sta.getmac())

参见

- wifi.sta.getip()

wifi.sta.getap()

描述

扫描并列出ap,结果以一个lua table为参数传递给回调函数。

语法

wifi.sta.getap(function(table))

参数

function(table): 当扫描结束时,调用此回调函数

扫描结果是一个lua table,key为ap的ssid,value为其他信息,格式:authmode,rssi,bssid,channel

返回值

nil

示例

    -- print ap list
    function listap(t)
      for k,v in pairs(t) do
        print(k.." : "..v)
      end
    end
    wifi.sta.getap(listap)

参见

- wifi.sta.getip()

wifi.ap 子模块

wifi.ap.config()

描述

设置ap模式下的ssid和password

语法

wifi.ap.config(cfg)

参数

cfg: 设置AP的lua table

示例:

     cfg={}
     cfg.ssid="myssid"
     cfg.pwd="mypwd"
     wifi.ap.setconfig(cfg)

返回值

nil

示例

    wifi.ap.config(ssid, 'password')

参见

-

wifi.ap.getip()

描述

ap模式下获取ip

语法

wifi.ap.getip()

参数

nil

返回值

ip地址字符串,如:”192.168.0.111”

示例

    wifi.ap.getip()

参见

- wifi.ap.getmac()

wifi.ap.getmac()

描述

ap模式下获取mac地址。

语法

wifi.ap.getmac()

参数

nil

返回值

mac地址字符串,如:”1A-33-44-FE-55-BB”

示例

    wifi.ap.getmac()

参见

- wifi.ap.getip()

timer 模块

tmr.delay()

描述

延迟us微秒。

语法

tmr.dealy(us)

参数

us: 延迟时间,单位:微秒

返回值

nil

示例

    -- delay 100us
    tmr.delay(100)

参见

- tmr.now()

tmr.now()

描述

返回系统计数器的当前值,uint32,单位:us。

语法

tmr.now()

参数

nil

返回值

uint32: value of counter

示例

    -- 打印计数器的当前值。
    print(tmr.now())

参见

- tmr.delay()

tmr.alarm()

描述

闹钟函数。

-注意: 只能允许存在一个闹钟,如果在调用tmr.stop()之前重复调用tmr.alarm(),以最后一次设置的为准,此前定义的闹钟都将失效。

语法

tmr.alarm(interval, repeat, function do())

参数

Interval: 定时时间,单位:毫秒。

repeat: 0:一次性闹钟;1:重复闹钟。

function do(): 定时器到时回调函数。

返回值

nil

示例

    -- 每1000ms输出一个hello world
    tmr.alarm(1000, 1, function() print("hello world") end )

参见

- tmr.now()

tmr.stop()

描述

停止闹钟功能。

语法

tmr.stop()

参数

nil.

返回值

nil

示例

    -- 每隔1000ms打印hello world
    tmr.alarm(1000, 1, function() print("hello world") end )

    -- 其它代码

    -- 停止闹钟
    tmr.stop()

参见

- tmr.now()

GPIO 模块

常量

gpio.OUTPUT, gpio.INPUT, gpio.INT, gpio.HIGH, gpio.LOW

gpio.mode()

描述

将pin初始化为GPIO并设置输入输出模式。

语法

gpio.mode(pin, mode)

参数

pin: 0~11, IO编号

mode: 取值为:gpio.OUTPUT or gpio.INPUT, or gpio.INT(中断模式)

返回值

nil

示例

    -- 将GPIO0设置为输出模式
    gpio.mode(0, gpio.OUTPUT)

参见

- gpio.read()

gpio.read()

描述

读取管脚电平高低。

语法

gpio.read(pin)

参数

pin: 0~11, IO编号

返回值

number:0:低电平, 1:高电平。

示例

    -- 读取GPIO0的电平
    gpio.read(0)

参见

- gpio.mode()

gpio.write()

描述

设置管脚电平

语法

gpio.write(pin)

参数

pin: 0~11, IO编号

level: gpio.HIGH or gpio.LOW

返回值

nil

示例

    -- 设置GPIP1为输出模式,并将输出电平设置为高
    pin=1
    gpio.mode(pin, gpio.OUTPUT)
    gpio.write(pin, gpio.HIGH)

参见

- gpio.mode()

- gpio.read()

gpio.trig()

描述

设置管脚中断模式的回调函数。

语法

gpio.trig(pin, type, function(level))

参数

pin: 0~11, IO编号

type: 取值为”up”, “down”, “both”, “low”, “high”, 分别代表上升沿、下降沿、双边沿、低电平、高电平触发方式。

function(level): 中断触发的回调函数,GPIO的电平作为输入参数。如果此处没有定义函数,则使用之前定义的回调函数。

返回值

nil

示例

    -- 使用GPIO0检测输入脉冲宽度
    pulse0 = 0
    du = 0
    gpio.mode(0,gpio.INT)
    function pin0cb(level)
     du = tmr.now() – pulse0
     print(du)
     pulse0 = tmr.now()
     if level == 1 then gpio.trig(0, "down ") else gpio.trig(0, "up ") end
    end
    gpio.trig(0, "down ",pin0cb)

参见

- gpio.mode()

- gpio.write()

PWM模块

pwm.setup()

描述

设置管脚为pwm模式,最多支持6个pwm。

语法

pwm.setup(pin, clock, duty)

参数

pin: 0~11, IO编号

clock: 1~500, pwm频率

duty: 0~100, pwm占空比,百分比表示。

返回值

nil

示例

    -- 将管脚0设置为pwm输出模式,频率100Hz,占空比50-50
    pwm.setup(0, 100, 50)

参见

- pwm.start()

pwm.close()

描述

退出pwm模式。

语法

pwm.close(pin)

参数

pin: 0~11, IO编号

返回值

nil

示例

    pwm.close(0)

参见

- pwm.start()

pwm.start()

描述

pwm启动,可以在对应的GPIO检测到波形。

语法

pwm.start(pin)

参数

pin: 0~11, IO编号

返回值

nil

示例

    pwm.start(0)

参见

- pwm.stop()

pwm.stop()

描述

暂停pwm输出波形。

语法

pwm.stop(pin)

参数

pin: 0~11, IO编号

返回值

nil

示例

    pwm.stop(0)

参见

- pwm.start()

pwm.setclock()

描述

设置pwm的频率

-Note: 设置pwm频率将会同步改变其他pwm输出的频率,当前版本的所有pwm仅支持同一频率输出。

语法

pwm.setclock(pin, clock)

参数

pin: 0~11, IO编号

clock: 1~500, pwm周期

返回值

nil

示例

    pwm.setclock(0, 100)

参见

- pwm.getclock()

pwm.getclock()

描述

获取pin的pwm工作频率

语法

pwm.getclock(pin)

参数

pin: 0~11, IO编号

返回值

number:pin的pwm工作频率

示例

    print(pwm.getclock(0))

参见

- pwm.setclock()

pwm.setduty()

描述

设置pin的占空比。

语法

pwm.setduty(pin, duty)

参数

pin: 0~11, IO编号

duty: 0~100, pwm的占空比,以百分数表示

返回值

nil

示例

    pwm.setduty(0, 50)

参见

- pwm.getduty()

pwm.getduty()

描述

获取pin的pwm占空比。

语法

pwm.getduty(pin)

参数

pin: 0~11, IO编号

返回值

nil

示例

    -- D0 连接绿色led
    -- D1 连接蓝色led
    -- D2 连接红色led
    pwm.setup(0,500,50)
    pwm.setup(1,500,50)
    pwm.setup(2,500,50)
    pwm.start(0)
    pwm.start(1)
    pwm.start(2)
    function led(r,g,b)
      pwm.setduty(0,g)
      pwm.setduty(1,b)
      pwm.setduty(2,r)
    end
    led(50,0,0) --  led显示红色
    led(0,0,50) -- led显示蓝色

参见

- pwm.setduty()

net 模块

常量

net.TCP, net.UDP

net.createServer()

描述

创建一个server。

语法

net.createServer(type, secure)

参数

type: 取值为:net.TCP 或者 net.UDP

secure: 设置为true或者false, true代表安全连接,false代表普通连接。

返回值

net.server子模块

示例

    net.createServer(net.TCP, true)

参见

- net.createConnection()

net.createConnection()

描述

创建一个client。

语法

net.createConnection(type, secure)

参数

type: 取值为:net.TCP 或者 net.UDP

secure: 设置为true或者false, true代表安全连接,false代表普通连接。

返回值

net.server子模块

示例

    net.createConnection(net.UDP, false)

参见

- net.createServer()

net.server 子模块

listen()

描述

侦听指定ip地址的端口。

语法

net.server.listen(port,[ip],function(net.socket))

参数

port: 端口号

ip:ip地址字符串,可以省略

function(net.socket): 连接创建成功的回调函数,可以作为参数传给调用函数。

返回值

nil

示例

    -- 创建一个server
    sv=net.createServer(net.TCP, false)
    -- server侦听端口80,如果收到数据将数据打印至控制台,并向远端发送‘hello world’
    sv:listen(80,function(c)
      c:on("receive", function(sck, pl) print(pl) end)
      c:send("hello world")
      end)

参见

- net.createServer()

close()

描述

关闭server

语法

net.server.close()

参数

nil

返回值

nil

示例

    -- 创建server
    sv=net.createServer(net.TCP, false)
    -- 关闭server
    sv:close()

参见

- net.createServer()

net.socket 子模块

connect()

描述

连接至远端。

语法

connect(port, ip)

参数

port: 端口号

ip: ip地址字符串

返回值

nil

参见

- net.socket:on()

send()

描述

通过连接向远端发送数据。

语法

send(string, function(sent))

参数

string: 待发送的字符串

function(sent): 发送字符串后的回调函数。

返回值

nil

参见

- net.socket:on()

on()

描述

向事件注册回调函数。

语法

on(event, function cb())

参数

event: 字符串,取值为: “connection”, “reconnection”, “disconnection”, “receive”, “sent”

function cb(net.socket, [string]): 回调函数。第一个参数是socket.

如果事件是”receive”, 第二个参数则为接收到的字符串。

返回值

nil

示例

    sk=net.createConnection(net.TCP, false)
    sk:on("receive", function(sck, c) print(c) end )
    sk:connect(80,"192.168.0.66")
    sk:send("GET / HTTP/1.1\r\nHost: 192.168.0.66\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")

参见

- net.createServer()

close()

描述

关闭socket。

语法

close()

参数

nil

返回值

nil

参见

- net.createServer()

dns()

描述

获取当前域的ip

语法

dns(domain, function(net.socket, ip))

参数

domain: 当前域的名称

function (net.socket, ip): 回调函数。第一个参数是socket,第二个参数是当前域的ip字符串。

返回值

nil

参见

- net.createServer()

i2c模块

常量

i2c.SLOW, i2c.TRANSMITTER, i2c. RECEIVER. FAST(400k)模式目前不支持。

i2c.setup()

描述

初始化i2c。

语法

i2c.setup(id, pinSDA, pinSCL, speed)

参数

id = 0

pinSDA: 0~11, IO编号

pinSCL: 0~11, IO编号

speed: i2c.SLOW

返回值

nil

参见

- i2c.read()

i2c.start()

描述

启动i2c传输。

语法

i2c.start(id)

参数

id = 0

返回值

nil

参见

- i2c.read()

i2c.stop()

描述

停止i2c传输。

语法

i2c.stop(id)

参数

id = 0

返回值

nil

参见

- i2c.read()

i2c.address()

描述

设置i2c地址以及读写模式。

语法

i2c.address(id, device_addr, direction)

参数

id=0

device_addr: 设备地址。

direction: i2c.TRANSMITTER:写模式;i2c. RECEIVER:读模式。

返回值

nil

参见

- i2c.read()

i2c.write()

描述

向i2c写数据。数据可以是多个数字, 字符串或者lua table。

语法

i2c.write(id, data1, data2,…)

参数

id=0

data: 数据可以是多个数字, 字符串或者lua table。

返回值

nil

示例

    i2c.write(0, "hello", "world")

参见

- i2c.read()

i2c.read()

描述

读取len个字节的数据。

语法

i2c.read(id, len)

参数

id=0

len: 数据长度。

返回值

string:接收到的数据。

示例

    id=0
    sda=1
    scl=0

    -- 初始化i2c, 将pin1设置为sda, 将pin0设置为scl
    i2c.setup(id,sda,scl,i2c.SLOW)

    -- 用户定义函数:读取地址dev_addr的寄存器reg_addr中的内容。
    function read_reg(dev_addr, reg_addr)
      i2c.start(id)
      i2c.address(id, dev_addr ,i2c.TRANSMITTER)
      i2c.write(id,reg_addr)
      i2c.stop(id)
      i2c.start(id)
      i2c.address(id, dev_addr,i2c.RECEIVER)
      c=i2c.read(id,1)
      i2c.stop(id)
      return c
    end

    -- 读取0x77的寄存器0xAA中的内容。
    reg = read_reg(0x77, 0xAA)
    pirnt(string.byte(reg))

参见

- i2c.write()

adc 模块

常量

adc.read()

描述

读取adc的值,esp8266只有一个10bit adc,id为0,最大值1024

语法

adc.read(id)

参数

id = 0

返回值

adc 值 10bit,最大1024.

参见

-