From c49d438c8ef069f3df9c7848d79d11bddc33ea71 Mon Sep 17 00:00:00 2001
From: funshine
Date: Wed, 19 Nov 2014 11:07:46 +0800
Subject: [PATCH] add chinese api instruction, update wiki
---
README.html | 1238 ++++++++++++++++
README.md | 4 +-
README_cn.md | 292 ----
nodemcu_api_cn.html | 2365 +++++++++++++++++++++++++++++++
nodemcu_api_cn.md | 1710 ++++++++++++++++++++++
API.html => nodemcu_api_en.html | 601 ++++----
API.md => nodemcu_api_en.md | 1 +
7 files changed, 5675 insertions(+), 536 deletions(-)
create mode 100644 README.html
delete mode 100644 README_cn.md
create mode 100644 nodemcu_api_cn.html
create mode 100644 nodemcu_api_cn.md
rename API.html => nodemcu_api_en.html (75%)
rename API.md => nodemcu_api_en.md (99%)
diff --git a/README.html b/README.html
new file mode 100644
index 00000000..957a28ec
--- /dev/null
+++ b/README.html
@@ -0,0 +1,1238 @@
+READMENodeMcu
+A lua based firmware for wifi-soc esp8266
+version 0.9.2 build 2014-11-18
+Change log
+change log
+变更日志
+Summary
+
+- Easy to access wireless router
+- Based on Lua 5.1.4
+- Event-Drive programming preferred.
+- Build-in file, timer, pwm, i2c, net, gpio, wifi, and system api.
+- GPIO pin re-mapped, use the index to access gpio, i2c, pwm.
+- GPIO Map Table:
+
+
+
+ IO index | ESP8266 pin | IO index | ESP8266 pin |
+
+
+ 0 | GPIO12 | 8 | GPIO0 |
+
+
+ 1 | GPIO13 | 9 | GPIO2 |
+
+
+ 2 | GPIO14 | 10 | GPIO4 |
+
+
+ 3 | GPIO15 | 11 | GPIO5 |
+
+
+ 4 | GPIO3 | | |
+
+
+ 5 | GPIO1 | | |
+
+
+ 6 | GPIO9 | | |
+
+
+ 7 | GPIO10 | |
+
+
+
+Flash the firmware
+nodemcu_512k.bin: 0x00000
+for most esp8266 modules, just pull GPIO0 down and restart.
+Connect the hardware in serial
+braudrate:9600
+Start play
+Connect to your ap
+ print(wifi.sta.getip())
+ --0.0.0.0
+ wifi.setmode(wifi.STATION)
+ wifi.sta.config("SSID","password")
+ print(wifi.sta.getip())
+ --192.168.18.110
+
+
+
+Manipulate hardware like a arduino
+ pin = 1
+ gpio.mode(pin,gpio.OUTPUT)
+ gpio.write(pin,gpio.HIGH)
+ print(gpio.read(pin))
+
+
+
+Write network application in nodejs style
+ -- A simple http client
+ conn=net.createConnection(net.TCP, false)
+ conn:on("receive", function(conn, payload) print(c) end )
+ conn:connect(80,"115.239.210.27")
+ conn:send("GET / HTTP/1.1\r\nHost: www.baidu.com\r\n"
+ .."Connection: keep-alive\r\nAccept: */*\r\n\r\n")
+
+
+
+Or a simple http server
+ -- A simple http server
+ srv=net.createServer(net.TCP)
+ srv:listen(80,function(conn)
+ conn:on("receive",function(conn,payload)
+ print(payload)
+ conn:send("<h1> Hello, NodeMcu.</h1>")
+ end)
+ end)
+
+
+
+Do something shining
+ function led(r,g,b)
+ pwm.setduty(0,r)
+ pwm.setduty(1,g)
+ pwm.setduty(2,b)
+ end
+ pwm.setup(0,500,50)
+ pwm.setup(1,500,50)
+ pwm.setup(2,500,50)
+ pwm.start(0)
+ pwm.start(1)
+ pwm.start(2)
+ led(50,0,0) -- red
+ led(0,0,50) -- blue
+
+
+
+And blink it
+ lighton=0
+ tmr.alarm(1000,1,function()
+ if lighton==0 then
+ lighton=1
+ led(50,50,50)
+ else
+ lighton=0
+ led(0,0,0)
+ end
+ end)
+
+
+
+If you want to run something when system started
+ --init.lua will be excuted
+ file.open("init.lua","w")
+ file.writeline([[print("Hello, do this at the beginning.")]])
+ file.close()
+ node.restart() -- this will restart the module.
+
+
+
+With below code, you can telnet to your esp8266 now
+ -- a simple telnet server
+ s=net.createServer(net.TCP)
+ s:listen(2323,function(c)
+ con_std = c
+ function s_output(str)
+ if(con_std~=nil)
+ then con_std:send(str)
+ end
+ end
+ node.output(s_output, 0) -- re-direct output to function s_ouput.
+ c:on("receive",function(c,l)
+ node.input(l) -- works like pcall(loadstring(l)) but support multiple separate line
+ end)
+ c:on("disconnection",function(c)
+ con_std = nil
+ node.output(nil) -- un-regist the redirect output function, output goes to serial
+ end)
+ end)
+
+
+
+Check this out
+Tencent QQ group: 309957875
+nodemcu wiki
+nodemcu.com
\ No newline at end of file
diff --git a/README.md b/README.md
index cea207c2..0281a8d8 100644
--- a/README.md
+++ b/README.md
@@ -2,8 +2,8 @@
###A lua based firmware for wifi-soc esp8266
version 0.9.2 build 2014-11-18
# Change log
-[change log](https://github.com/funshine/nodemcu-firmware/wiki/nodeMcu:-lua-based-interactive-firmware-for-mcu#change_log)
-
+[change log](https://github.com/funshine/nodemcu-firmware/wiki/nodemcu_api_en#change_log)
+[变更日志](https://github.com/funshine/nodemcu-firmware/wiki/nodemcu_api_cn#change_log)
# Summary
- Easy to access wireless router
- Based on Lua 5.1.4
diff --git a/README_cn.md b/README_cn.md
deleted file mode 100644
index 649d7415..00000000
--- a/README_cn.md
+++ /dev/null
@@ -1,292 +0,0 @@
-nodeMcu API说明
-=======
-version 0.1 2014-10-11
- up
-flash 错误
-----
- 注意:有些模块在烧写之后启动,串口输出 ERROR in flash_read: r=。。。
- 这是因为模块原来的flash内部没有擦除。
- 可使用blank.bin(4k),
- 重复烧入起始地址0x47000, 0x48000, 0x49000, 0x4a000扇区.
- 或者生成一个512k大小的blank512k.bin, 内容为全0xFF,从0x00000开始烧入。
- 烧入之后可以正常运行。
-
-概述
-------
- 支持一键配置
-
- 基于Lua 5.1.4,使用者需了解最简单的Lua语法。
-
- 采用事件驱动的编程模型。
-
- 内置 timer,pwm,i2c,net,gpio,wifi module。
-
- 对模块的引脚进行编号;gpio,i2c,pwm等模块需要使用引脚编号进行索引。
-
-###目前的编号对应表格:
-
- IO索引编号 ESP8266实际IO IO索引编号 ESP8266实际IO
- 0 GPIO12 8 GPIO0
- 1 GPIO13 9 GPIO2
- 2 GPIO14 10 GPIO4
- 3 GPIO15 11 GPIO5
- 4 GPIO3
- 5 GPIO1
- 6 GPIO9
- 7 GPIO10
-
-###串口波特率
-9600
-
-###固件烧写地址:
-
- eagle.app.v6.flash.bin:0x00000
- eagle.app.v6.irom0text.bin:0x10000
- esp_init_data_default.bin:0x7c000
- blank.bin:0x7e000
-
- 第一次使用建议将blank512k.bin烧写在地址0x00000
-
-node module
-------
-node.restart()
-
- 描述:重新启动
-
-node.dsleep( us )
-
- 描述:深度睡眠 us 微秒,时间到之后将重新启动
- us:时间,单位微秒
-
-node.chipid()
-
- 描述:返回芯片id
- 返回:number
-
-node.heap()
-
- 描述:返回可用内存 in bytes
- 返回:系统heap剩余
-
-node.format()
-
- 描述:格式化用户flash区
-
-node.startlog( filename, noparse)
-
- 描述:开始记录输入
- filename:log所保存的文件名,不支持目录
- noparse:1表示lua虚拟机不对输入进行解析,0表示lua虚拟机对输入进行解析
-
-node.stoplog()
-
- 描述:结束log
-
-例子:录制log到init.lua文件,可以在系统启动之后自动调用该文件。
-
- node.format()
- node.startlog("init.lua", 1)
- print("hello world")
- node.stoplog()
-
-此时,文件init.lua内部将含有内容,重启之后,系统执行print("hello world")
-
-node.readlog( filename)
-
- 描述:读取文件
- filename:log文件名,不支持目录
- 返回:读取的内容,字符串形式
-
-node.list()
-
- 描述:返回所有文件
- 返回:一个包含 <文件名:文件大小> pair 的map
-
-wifi module
------------
-[up](#upupup)
-
-常量:wifi.STATION, wifi.SOFTAP, wifi.STATIONAP
-
-wifi.setmode(mode)
-
- 描述:设置wifi的工作模式
- mode:取值:wifi.STATION, wifi.SOFTAP或wifi.STATIONAP
- 返回设置之后的当前mode
-
-wifi.getmode()
-
- 描述:获取wifi的工作模式
- 返回:wifi.STATION, wifi.SOFTAP或wifi.STATIONAP
-
-wifi.startconfig( channel, function succeed_callback )
-
- 描述:开始智能配置,若成功自动设置ssid和pwd并退出
- channel:1~13,起始搜索信道。若不指定,默认为6,每个信道搜索20秒
- succeed_callback:配置成功后的回调函数,将在获取密码正确并连接上ap之后调用
-
-wifi.stopconfig()
-
- 描述:中断智能配置
-
-wifi.station module
------------------
-wifi.station.setconfig(ssid, password)
-
- 描述:设置station模式下的ssid和password
- ssid:字符串形式,长度小于32
- password:字符串形式,长度小于64
-
-wifi.station.connect()
-
- 描述:station模式下连接至ap
-
-wifi.station.disconnect()
-
- 描述:station模式下断开与ap的连接
-
-wifi.station.autoconnect(auto)
-
- 描述:station模式下设置自动连接至ap
- auto:0表示设置为不自动连,1表示设置为自动连接
-
-wifi.station.getip()
-
- 描述:station模式下获取ip
- 返回:字符串形式的ip,如"192.168.0.2"
-
-wifi.station.getmac()
-
- 描述:station模式下获取mac
- 返回:字符串形式的mac,如"18-33-44-FE-55-BB"
-
-wifi.ap module
----------------
-wifi.ap.setconfig(cfg)
-
- 描述:设置station模式下的ssid和password
- cfg:设置需要的map
-
-例子:
-
- cfg={}
- cfg.ssid="myssid"
- cfg.pwd="mypwd"
- wifi.ap.setconfig(cfg)
-
-wifi.ap.getip()
-
- 描述:ap模式下获取ip
- 返回:字符串形式的ip,如"192.168.0.2"
-
-wifi.ap.getmac()
-
- 描述:ap模式下获取mac
- 返回:字符串形式的mac,如"1A-33-44-FE-55-BB"
-
-gpio module
------------
-常量:gpio.OUTPUT, gpio.INPUT, gpio.HIGH, gpio.LOW
-
-gpio.mode( pin, mode)
-
- 描述:设置对应pin的输入输出模式,将该pin初始化为gpio模式。
- pin:0~11,IO索引编号
- mode:gpio.OUTPUT或者gpio.INPUT
-
-gpio.read(pin)
-
- 描述:读取对应pin的值
- pin:0~11,IO索引编号
- 返回:0表示低,1表示高
-
-gpio.write(pin, level)
-
- 描述:设置对应pin的值
- pin:0~11,IO索引编号
- level:gpio.HIGH或者gpio.LOW
-
-例子:
-
- pin=1
- gpio.mode(pin, gpio.OUTPUT)
- gpio.write(pin, gpio.HIGH)
-
-将索引1的pin设置为GPIO模式,并设置为高电平。
-
-net module
----------------
-常量:net.TCP, net.UDP
-
-net.createServer(type)
-
- 描述:建立一个服务器
- type:net.TCP或 net.UDP
- 返回:net.server子模块
-
-net.createConnection(type)
-
- 描述:建立一个客户端
- type:net.TCP或 net.UDP
- 返回:net.socket子模块
-
-net.server module
--------------
-listen(port,[ip],function(net.socket))
-
- 描述:监听某端口
- port:端口号
- ip:可忽略,ip字符串
- function(net.socket): 回调函数,当有连接建立的时候,作为参数传给回调函数。
-
-例子:
-
- sv=net.createServer(net.TCP, false)
- sv:listen(80,function(c)
- c:on("receive", function(sck, pl) print(pl) end)
- c:send("hello world")
- end)
-
-close()
-
- 描述:关闭服务器
-
-net.socket module
--------
-connect(port, ip)
-
- 描述:连接到某ip和端口
- port:端口号
- ip:ip字符串
-
-send( string, function(sent) )
-
- 描述:向连接发送数据
- string:需要发送的数据字符串
-
-on(event, function cb())
-
- 描述:注册事件的回调函数
- event:字符串
- 可为:"connection","reconnection","disconnection","receive","sent"
- function cb(net.socket, [string]):回调函数。第一个参数为socket连接。
- 若event为"receive", 第二个参数为接收到数据,字符串形式。
-
-例子:
-
- sk=net.createConnection(net.TCP, false)
- sk:on("receive", function(sck, pl) print(pl) end )
- sk:connect(80,"115.239.210.27")
- sk:send("GET / HTTP/1.1\r\nHost: 115.239.210.27\r\n
- Connection: keep-alive\r\nAccept: */*\r\n\r\n")
-
-close()
-
- 描述:关闭socket
-
-dns(domain, function cb(net.socket, ip) )
-
- 描述:获取domain的ip
- domain:字符串
- function cb(net.socket, ip):回调函数。
- 第一个参数为socket连接本身, 第二个为获取的ip, 字符串形式。
diff --git a/nodemcu_api_cn.html b/nodemcu_api_cn.html
new file mode 100644
index 00000000..8e6f4d0a
--- /dev/null
+++ b/nodemcu_api_cn.html
@@ -0,0 +1,2365 @@
+nodemcu_api_cnnodeMcu API说明
+English Version
+版本 0.9.2 build 2014-11-18
+
+变更日志:
+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开始烧入。
+烧入之后可以正常运行。
+概述
+
+- 快速、自动连接无线路由器
+- 基于Lua 5.1.4,使用者需了解最简单的Lua语法
+- 采用事件驱动的编程模型
+- 内置file, timer, pwm, i2c, net, gpio, wifi模块
+- 串口波特率:9600-8N1
+- 对模块的引脚进行编号;gpio,i2c,pwm等模块需要使用引脚编号进行索引
+- 目前的编号对应表格:
+
+
+
+ IO index | ESP8266 pin | IO index | ESP8266 pin |
+
+
+ 0 | GPIO12 | 8 | GPIO0 |
+
+
+ 1 | GPIO13 | 9 | GPIO2 |
+
+
+ 2 | GPIO14 | 10 | GPIO4 |
+
+
+ 3 | GPIO15 | 11 | GPIO5 |
+
+
+ 4 | GPIO3 | | |
+
+
+ 5 | GPIO1 | | |
+
+
+ 6 | GPIO9 | | |
+
+
+ 7 | GPIO10 | |
+
+
+
+固件烧写
+地址
+nodemcu_512k.bin: 0x00000
+node模块
+
+node.restart()
+描述
+重新启动
+语法
+node.restart()
+参数
+nil
+返回值
+nil
+示例
+
+
+
+参见
+-
+
+node.dsleep()
+描述
+进入睡眠模式,计时时间之后唤醒
+语法
+node.dsleep(us)
+-注意: 如需使用此功能,需要将esp8266的PIN32(RST)和PIN8(XPD_DCDC)短接。
+参数
+us: 睡眠时间,单位:us
+返回值
+nil
+示例
+
+
+
+参见
+-
+
+node.chipid()
+描述
+返回芯片ID
+语法
+node.chipid()
+参数
+nil
+返回值
+number:芯片ID
+示例
+
+
+
+参见
+-
+
+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);
+
+
+
+参见
+-
+
+
+描述
+接收字符串并将字符串传入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的工作模式
+示例
+
+
+
+参见
+- 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.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.disconnect()
+- wifi.sta.config()
+
+wifi.sta.disconnect()
+描述
+station模式下与AP断开连接。
+语法
+wifi.sta.disconnect()
+参数
+nil
+返回值
+nil
+示例
+
+
+
+参见
+- wifi.sta.config()
+- wifi.sta.connect()
+
+wifi.sta.autoconnect()
+描述
+station模式下自动连接。
+语法
+wifi.sta.autoconnect(auto)
+参数
+auto: 0:取消自动连接,1:使能自动连接。
+返回值
+nil
+示例
+
+
+
+参见
+- 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.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.getmac()
+
+wifi.ap.getmac()
+描述
+ap模式下获取mac地址。
+语法
+wifi.ap.getmac()
+参数
+nil
+返回值
+mac地址字符串,如:”1A-33-44-FE-55-BB”
+示例
+
+
+
+参见
+- 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.start()
+
+pwm.start()
+描述
+pwm启动,可以在对应的GPIO检测到波形。
+语法
+pwm.start(pin)
+参数
+pin: 0~11, IO编号
+返回值
+nil
+示例
+
+
+
+参见
+- pwm.stop()
+
+pwm.stop()
+描述
+暂停pwm输出波形。
+语法
+pwm.stop(pin)
+参数
+pin: 0~11, IO编号
+返回值
+nil
+示例
+
+
+
+参见
+- pwm.start()
+
+pwm.setclock()
+描述
+设置pwm的频率
+-Note: 设置pwm频率将会同步改变其他pwm输出的频率,当前版本的所有pwm仅支持同一频率输出。
+语法
+pwm.setclock(pin, clock)
+参数
+pin: 0~11, IO编号
+clock: 1~500, pwm周期
+返回值
+nil
+示例
+
+
+
+参见
+- pwm.getclock()
+
+pwm.getclock()
+描述
+获取pin的pwm工作频率
+语法
+pwm.getclock(pin)
+参数
+pin: 0~11, IO编号
+返回值
+number:pin的pwm工作频率
+示例
+
+
+
+参见
+- pwm.setclock()
+
+pwm.setduty()
+描述
+设置pin的占空比。
+语法
+pwm.setduty(pin, duty)
+参数
+pin: 0~11, IO编号
+duty: 0~100, pwm的占空比,以百分数表示
+返回值
+nil
+示例
+
+
+
+参见
+- 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()
\ No newline at end of file
diff --git a/nodemcu_api_cn.md b/nodemcu_api_cn.md
new file mode 100644
index 00000000..16f3570b
--- /dev/null
+++ b/nodemcu_api_cn.md
@@ -0,0 +1,1710 @@
+# **nodeMcu API说明** #
+[English Version](https://github.com/funshine/nodemcu-firmware/wiki/nodemcu_api_en)
+###版本 0.9.2 build 2014-11-18
+
+###变更日志:
+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开始烧入。
+烧入之后可以正常运行。
+
+# 概述
+- 快速、自动连接无线路由器
+- 基于Lua 5.1.4,使用者需了解最简单的Lua语法
+- 采用事件驱动的编程模型
+- 内置file, timer, pwm, i2c, net, gpio, wifi模块
+- 串口波特率:9600-8N1
+- 对模块的引脚进行编号;gpio,i2c,pwm等模块需要使用引脚编号进行索引
+- 目前的编号对应表格:
+
+
+
+ IO index | ESP8266 pin | IO index | ESP8266 pin |
+
+
+ 0 | GPIO12 | 8 | GPIO0 |
+
+
+ 1 | GPIO13 | 9 | GPIO2 |
+
+
+ 2 | GPIO14 | 10 | GPIO4 |
+
+
+ 3 | GPIO15 | 11 | GPIO5 |
+
+
+ 4 | GPIO3 | | |
+
+
+ 5 | GPIO1 | | |
+
+
+ 6 | GPIO9 | | |
+
+
+ 7 | GPIO10 | |
+
+
+
+#固件烧写
+###地址
+nodemcu_512k.bin: 0x00000
+
+#node模块
+
+## node.restart()
+####描述
+重新启动
+
+####语法
+
+node.restart()
+
+####参数
+nil
+
+####返回值
+nil
+
+####示例
+
+```lua
+ node.restart();
+```
+
+####参见
+**-** []()
+
+
+## node.dsleep()
+####描述
+
+进入睡眠模式,计时时间之后唤醒
+
+####语法
+
+node.dsleep(us)
+**-注意:** 如需使用此功能,需要将esp8266的PIN32(RST)和PIN8(XPD_DCDC)短接。
+
+####参数
+us: 睡眠时间,单位:us
+
+####返回值
+nil
+
+####示例
+
+```lua
+ node.dsleep(us);
+```
+
+####参见
+**-** []()
+
+
+## node.chipid()
+####描述
+返回芯片ID
+
+####语法
+node.chipid()
+
+####参数
+nil
+
+####返回值
+number:芯片ID
+
+####示例
+
+```lua
+ id = node.chipid();
+```
+
+####参见
+**-** []()
+
+
+## node.heap()
+####描述
+返回当前系统剩余内存大小,单位:字节
+
+####语法
+node.heap()
+
+####参数
+nil
+
+####返回值
+number: 系统剩余内存字节数
+
+####示例
+
+```lua
+ 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
+
+####示例
+```lua
+ 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
+
+####示例
+
+```lua
+ -- LED常亮.
+ node.led(0);
+```
+
+####参见
+**-** []()
+
+
+## node.input()
+####描述
+接收字符串并将字符串传入lua解释器。
+功能同pcall(loadstring(str)),增加了支持多行输入的功能。
+
+####语法
+node.input(str)
+
+####参数
+str: Lua代码段
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 注意:该函数不支持在命令行中使用。
+ 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
+
+####示例
+
+```lua
+ 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
+
+####示例
+
+```lua
+ -- 删除foo.lua文件
+ file.remove("foo.lua")
+```
+
+####参见
+**-** [file.open()](#fl_open)
+**-** [file.close()](#fl_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
+
+####示例
+
+```lua
+ -- 打开'init.lua',并打印文件的第一行。
+ file.open("init.lua", "r")
+ print(file.readline())
+ file.close()
+```
+
+####参见
+**-** [file.close()](#fl_close)
+**-** [file.readline()](#fl_readline)
+
+
+## file.close()
+####描述
+关闭文件。
+
+####语法
+file.close()
+
+####参数
+nil
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 打开'init.lua',并打印文件的第一行,然后关闭文件。
+ file.open("init.lua", "r")
+ print(file.readline())
+ file.close()
+```
+
+####参见
+**-** [file.open()](#fl_open)
+**-** [file.readline()](#fl_readline)
+
+
+## file.readline()
+####描述
+读取文件的一行。
+
+####语法
+file.readline()
+
+####参数
+nil
+
+####返回值
+逐行返回文件内容。返回值末尾包含EOL('\n')
+如果读到EOF返回nil。
+
+####示例
+
+```lua
+ -- 打开'init.lua',读取并打印文件的第一行,然后关闭文件。
+ file.open("init.lua", "r")
+ print(file.readline())
+ file.close()
+```
+
+####参见
+**-** [file.open()](#fl_open)
+**-** [file.close()](#fl_close)
+
+
+## file.writeline()
+####描述
+向文件写入一行,行末尾增加'\n'。
+
+####语法
+file.writeline(string)
+
+####参数
+string: 需要写入的字符串
+
+####返回值
+true: 写入成功
+nil: 写入失败
+
+####示例
+
+```lua
+ -- 以'a+'的模式打开'init.lua'
+ file.open("init.lua", "a+")
+ -- 将'foo bar'写到文件的末尾
+ file.writeline('foo bar')
+ file.close()
+```
+
+####参见
+**-** [file.open()](#fl_open)
+**-** [file.write()](#fl_write)
+
+
+## file.write()
+####描述
+向文件写入字符串。
+
+####语法
+file.write(string)
+
+####参数
+string: 需要写入的字符串
+
+####返回值
+true: 写入成功
+nil: 写入失败
+
+####示例
+
+```lua
+ -- 以'a+'的模式打开'init.lua'
+ file.open("init.lua", "a+")
+ -- 将'foo bar'写到文件的末尾
+ file.writeline('foo bar')
+ file.close()
+```
+
+####参见
+**-** [file.open()](#fl_open)
+**-** [file.writeline()](#fl_writeline)
+
+
+## file.flush()
+####描述
+清空缓存写入文件。
+
+####语法
+file.flush()
+
+####参数
+nil
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 以'a+'的模式打开'init.lua'
+ file.open("init.lua", "a+")
+ -- 将'foo bar'写到文件的末尾
+ file.write('foo bar')
+ file.flush()
+ file.close()
+```
+
+####参见
+**-** [file.open()](#fl_open)
+**-** [file.writeline()](#fl_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
+
+####示例
+
+```lua
+ -- 以'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()](#fl_open)
+**-** [file.writeline()](#fl_writeline)
+
+
+## file.list()
+####描述
+显示所有文件。
+
+####语法
+file.list()
+
+####参数
+nil
+
+####返回值
+返回包含{文件名:文件大小}的lua table
+
+####示例
+
+```lua
+ l = file.list();
+ for k,v in pairs(l) do
+ print("name:"..k..", size:"..v)
+ end
+```
+
+####参见
+**-** [file.remove()](#fl_remove)
+
+#wifi模块
+##常量
+wifi.STATION, wifi.SOFTAP, wifi.STATIONAP
+
+
+## wifi.setmode(mode)
+####描述
+设置wifi的工作模式。
+
+####语法
+wifi.setmode(mode)
+
+####参数
+mode: 取值为:wifi.STATION, wifi.SOFTAP or wifi.STATIONAP
+
+####返回值
+返回设置之后的mode值
+
+####示例
+
+```lua
+ wifi.setmode(wifi.STATION)
+```
+
+####参见
+**-** [wifi.getmode()](#wf_getmode)
+
+
+
+## wifi.getmode(mode)
+####描述
+获取wifi的工作模式。
+
+####语法
+wifi.getmode()
+
+####参数
+nil
+
+####返回值
+返回wifi的工作模式
+
+####示例
+
+```lua
+ print(wifi.getmode())
+```
+
+####参见
+**-** [wifi.setmode()](#wf_setmode)
+
+
+
+## wifi.startsmart()
+####描述
+开始自动配置,如果配置成功自动设置ssid和密码。
+
+####语法
+wifi.startsmart(channel, function succeed_callback())
+
+####参数
+
+channel: 1~13, 启动寻找的初始频段,如果为nil默认值为6频段。每个频段搜寻20s。
+succeed_callback: 配置成功的回调函数,配置成功并连接至AP后调用此函数。
+
+####返回值
+nil
+
+####示例
+
+```lua
+ wifi.startsmart(6, cb())
+```
+
+####参见
+**-** [wifi.stopsmart()](#wf_stopsmart)
+
+
+
+## wifi.stopsmart()
+####描述
+停止配置。
+
+####语法
+wifi.stopsmart()
+
+####参数
+nil
+
+####返回值
+nil
+
+####示例
+
+```lua
+ wifi.stopsmart()
+```
+
+####参见
+**-** [wifi.startsmart()](#wf_startsmart)
+
+
+#wifi.sta 子模块
+
+
+## wifi.sta.config()
+####描述
+设置station模式下的ssid和password。
+
+####语法
+wifi.sta.config(ssid, password)
+
+####参数
+
+ssid: 字符串,长度小于32字节。
+password: 字符串,长度小于64字节。
+
+####返回值
+nil
+
+####示例
+
+```lua
+ wifi.sta.config("myssid","mypassword")
+```
+
+####参见
+**-** [wifi.sta.connect()](#ws_connect)
+**-** [wifi.sta.disconnect()](#ws_disconnect)
+
+
+
+## wifi.sta.connect()
+####描述
+station模式下连接AP。
+
+####语法
+wifi.sta.connect()
+
+####参数
+nil
+
+
+####返回值
+nil
+
+####示例
+
+```lua
+ wifi.sta.connect()
+```
+
+####参见
+**-** [wifi.sta.disconnect()](#ws_disconnect)
+**-** [wifi.sta.config()](#ws_config)
+
+
+
+## wifi.sta.disconnect()
+####描述
+station模式下与AP断开连接。
+
+####语法
+wifi.sta.disconnect()
+
+####参数
+nil
+
+
+####返回值
+nil
+
+####示例
+
+```lua
+ wifi.sta.disconnect()
+```
+
+####参见
+**-** [wifi.sta.config()](#ws_config)
+**-** [wifi.sta.connect()](#ws_connect)
+
+
+
+## wifi.sta.autoconnect()
+####描述
+station模式下自动连接。
+
+####语法
+wifi.sta.autoconnect(auto)
+
+####参数
+auto: 0:取消自动连接,1:使能自动连接。
+
+
+####返回值
+nil
+
+####示例
+
+```lua
+ wifi.sta.autoconnect()
+```
+
+####参见
+**-** [wifi.sta.config()](#ws_config)
+**-** [wifi.sta.connect()](#ws_connect)
+**-** [wifi.sta.disconnect()](#ws_disconnect)
+
+
+
+## wifi.sta.getip()
+####描述
+station模式下获取ip
+
+####语法
+wifi.sta.getip()
+
+####参数
+nil
+
+
+####返回值
+ip地址字符串,如:"192.168.0.111"
+
+####示例
+
+```lua
+ -- print current ip
+ print(wifi.sta.getip())
+```
+
+####参见
+**-** [wifi.sta.getmac()](#ws_getmac)
+
+
+
+## wifi.sta.getmac()
+####描述
+station模式下获取mac地址。
+
+####语法
+wifi.sta.getmac()
+
+####参数
+nil
+
+
+####返回值
+mac地址字符串,如:"18-33-44-FE-55-BB"
+
+####示例
+
+```lua
+ -- 打印当前的mac地址
+ print(wifi.sta.getmac())
+```
+
+####参见
+**-** [wifi.sta.getip()](#ws_getip)
+
+
+#wifi.ap 子模块
+
+
+## wifi.ap.config()
+####描述
+设置ap模式下的ssid和password
+
+####语法
+wifi.ap.config(cfg)
+
+####参数
+cfg: 设置AP的lua table
+
+####示例:
+
+```lua
+ cfg={}
+ cfg.ssid="myssid"
+ cfg.pwd="mypwd"
+ wifi.ap.setconfig(cfg)
+```
+
+####返回值
+nil
+
+####示例
+
+```lua
+ wifi.ap.config(ssid, 'password')
+```
+
+####参见
+**-** []()
+
+
+## wifi.ap.getip()
+####描述
+ap模式下获取ip
+
+####语法
+wifi.ap.getip()
+
+####参数
+nil
+
+####返回值
+ip地址字符串,如:"192.168.0.111"
+
+####示例
+
+```lua
+ wifi.ap.getip()
+```
+
+####参见
+**-** [wifi.ap.getmac()](#wa_getmac)
+
+
+
+## wifi.ap.getmac()
+####描述
+ap模式下获取mac地址。
+
+####语法
+wifi.ap.getmac()
+
+####参数
+nil
+
+####返回值
+mac地址字符串,如:"1A-33-44-FE-55-BB"
+
+####示例
+
+```lua
+ wifi.ap.getmac()
+```
+
+####参见
+**-** [wifi.ap.getip()](#wa_getip)
+
+
+#timer 模块
+
+## tmr.delay()
+####描述
+延迟us微秒。
+
+####语法
+tmr.dealy(us)
+
+####参数
+us: 延迟时间,单位:微秒
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- delay 100us
+ tmr.delay(100)
+```
+
+####参见
+**-** [tmr.now()](#tm_now)
+
+
+
+## tmr.now()
+####描述
+返回系统计数器的当前值,uint32,单位:us。
+
+####语法
+tmr.now()
+
+####参数
+nil
+
+####返回值
+uint32: value of counter
+
+####示例
+
+```lua
+ -- 打印计数器的当前值。
+ print(tmr.now())
+```
+
+####参见
+**-** [tmr.delay()](#tm_delay)
+
+
+
+## tmr.alarm()
+####描述
+闹钟函数。
+**-注意:** 只能允许存在一个闹钟,如果在调用tmr.stop()之前重复调用tmr.alarm(),以最后一次设置的为准,此前定义的闹钟都将失效。
+
+####语法
+tmr.alarm(interval, repeat, function do())
+
+####参数
+Interval: 定时时间,单位:毫秒。
+repeat: 0:一次性闹钟;1:重复闹钟。
+function do(): 定时器到时回调函数。
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 每1000ms输出一个hello world
+ tmr.alarm(1000, 1, function() print("hello world") end )
+```
+
+####参见
+**-** [tmr.now()](#tm_now)
+
+
+
+## tmr.stop()
+####描述
+停止闹钟功能。
+
+####语法
+tmr.stop()
+
+####参数
+nil.
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 每隔1000ms打印hello world
+ tmr.alarm(1000, 1, function() print("hello world") end )
+
+ -- 其它代码
+
+ -- 停止闹钟
+ tmr.stop()
+```
+
+####参见
+**-** [tmr.now()](#tm_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
+
+####示例
+
+```lua
+ -- 将GPIO0设置为输出模式
+ gpio.mode(0, gpio.OUTPUT)
+
+```
+
+####参见
+**-** [gpio.read()](#io_read)
+
+
+
+## gpio.read()
+####描述
+读取管脚电平高低。
+
+####语法
+gpio.read(pin)
+
+####参数
+pin: 0~11, IO编号
+
+####返回值
+number:0:低电平, 1:高电平。
+
+####示例
+
+```lua
+ -- 读取GPIO0的电平
+ gpio.read(0)
+```
+
+####参见
+**-** [gpio.mode()](#io_mode)
+
+
+
+## gpio.write()
+####描述
+设置管脚电平
+
+####语法
+gpio.write(pin)
+
+####参数
+pin: 0~11, IO编号
+level: gpio.HIGH or gpio.LOW
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 设置GPIP1为输出模式,并将输出电平设置为高
+ pin=1
+ gpio.mode(pin, gpio.OUTPUT)
+ gpio.write(pin, gpio.HIGH)
+```
+
+####参见
+**-** [gpio.mode()](#io_mode)
+**-** [gpio.read()](#io_read)
+
+
+
+## gpio.trig()
+####描述
+设置管脚中断模式的回调函数。
+
+####语法
+gpio.trig(pin, type, function(level))
+
+####参数
+pin: 0~11, IO编号
+type: 取值为"up", "down", "both", "low", "high", 分别代表上升沿、下降沿、双边沿、低电平、高电平触发方式。
+function(level): 中断触发的回调函数,GPIO的电平作为输入参数。如果此处没有定义函数,则使用之前定义的回调函数。
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 使用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()](#io_mode)
+**-** [gpio.write()](#io_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
+
+####示例
+
+```lua
+ -- 将管脚0设置为pwm输出模式,频率100Hz,占空比50-50
+ pwm.setup(0, 100, 50)
+```
+
+####参见
+**-** [pwm.start()](#pw_start)
+
+
+
+## pwm.close()
+####描述
+退出pwm模式。
+
+####语法
+pwm.close(pin)
+
+####参数
+pin: 0~11, IO编号
+
+####返回值
+nil
+
+####示例
+
+```lua
+ pwm.close(0)
+```
+
+####参见
+**-** [pwm.start()](#pw_start)
+
+
+
+## pwm.start()
+####描述
+pwm启动,可以在对应的GPIO检测到波形。
+
+####语法
+pwm.start(pin)
+
+####参数
+pin: 0~11, IO编号
+
+####返回值
+nil
+
+####示例
+
+```lua
+ pwm.start(0)
+```
+
+####参见
+**-** [pwm.stop()](#pw_stop)
+
+
+
+## pwm.stop()
+####描述
+暂停pwm输出波形。
+
+####语法
+pwm.stop(pin)
+
+####参数
+pin: 0~11, IO编号
+
+####返回值
+nil
+
+####示例
+
+```lua
+ pwm.stop(0)
+```
+
+####参见
+**-** [pwm.start()](#pw_start)
+
+
+
+## pwm.setclock()
+####描述
+设置pwm的频率
+**-Note:** 设置pwm频率将会同步改变其他pwm输出的频率,当前版本的所有pwm仅支持同一频率输出。
+
+####语法
+pwm.setclock(pin, clock)
+
+####参数
+pin: 0~11, IO编号
+clock: 1~500, pwm周期
+
+####返回值
+nil
+
+####示例
+
+```lua
+ pwm.setclock(0, 100)
+```
+
+####参见
+**-** [pwm.getclock()](#pw_getclock)
+
+
+
+## pwm.getclock()
+####描述
+获取pin的pwm工作频率
+
+####语法
+pwm.getclock(pin)
+
+####参数
+pin: 0~11, IO编号
+
+####返回值
+number:pin的pwm工作频率
+
+####示例
+
+```lua
+ print(pwm.getclock(0))
+```
+
+####参见
+**-** [pwm.setclock()](#pw_setclock)
+
+
+
+## pwm.setduty()
+####描述
+设置pin的占空比。
+
+####语法
+pwm.setduty(pin, duty)
+
+####参数
+pin: 0~11, IO编号
+duty: 0~100, pwm的占空比,以百分数表示
+
+####返回值
+nil
+
+####示例
+
+```lua
+ pwm.setduty(0, 50)
+```
+
+####参见
+**-** [pwm.getduty()](#pw_getduty)
+
+
+
+## pwm.getduty()
+####描述
+获取pin的pwm占空比。
+
+####语法
+pwm.getduty(pin)
+
+####参数
+pin: 0~11, IO编号
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 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()](#pw_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子模块
+
+####示例
+
+```lua
+ net.createServer(net.TCP, true)
+```
+
+####参见
+**-** [net.createConnection()](#nt_createConnection)
+
+
+
+## net.createConnection()
+####描述
+创建一个client。
+
+####语法
+net.createConnection(type, secure)
+
+####参数
+type: 取值为:net.TCP 或者 net.UDP
+secure: 设置为true或者false, true代表安全连接,false代表普通连接。
+
+####返回值
+net.server子模块
+
+####示例
+
+```lua
+ net.createConnection(net.UDP, false)
+```
+
+####参见
+**-** [net.createServer()](#nt_createServer)
+
+
+#net.server 子模块
+
+## listen()
+####描述
+侦听指定ip地址的端口。
+
+####语法
+net.server.listen(port,[ip],function(net.socket))
+
+####参数
+port: 端口号
+ip:ip地址字符串,可以省略
+function(net.socket): 连接创建成功的回调函数,可以作为参数传给调用函数。
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 创建一个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()](#nt_createServer)
+
+
+
+## close()
+####描述
+关闭server
+
+####语法
+net.server.close()
+
+####参数
+nil
+
+####返回值
+nil
+
+####示例
+
+```lua
+ -- 创建server
+ sv=net.createServer(net.TCP, false)
+ -- 关闭server
+ sv:close()
+```
+
+####参见
+**-** [net.createServer()](#nt_createServer)
+
+
+#net.socket 子模块
+
+## connect()
+####描述
+连接至远端。
+
+####语法
+connect(port, ip)
+
+####参数
+port: 端口号
+ip: ip地址字符串
+
+####返回值
+nil
+
+####参见
+**-** [net.socket:on()](#nk_on)
+
+
+
+## send()
+####描述
+通过连接向远端发送数据。
+
+####语法
+send(string, function(sent))
+
+####参数
+string: 待发送的字符串
+function(sent): 发送字符串后的回调函数。
+
+####返回值
+nil
+
+####参见
+**-** [net.socket:on()](#nk_on)
+
+
+
+## on()
+####描述
+向事件注册回调函数。
+
+####语法
+on(event, function cb())
+
+####参数
+event: 字符串,取值为: "connection", "reconnection", "disconnection", "receive", "sent"
+function cb(net.socket, [string]): 回调函数。第一个参数是socket.
+如果事件是"receive", 第二个参数则为接收到的字符串。
+
+####返回值
+nil
+
+####示例
+
+```lua
+ 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()](#nt_createServer)
+
+
+
+## close()
+####描述
+关闭socket。
+
+####语法
+close()
+
+####参数
+nil
+
+####返回值
+nil
+
+####参见
+**-** [net.createServer()](#nt_createServer)
+
+
+
+## dns()
+####描述
+获取当前域的ip
+
+####语法
+dns(domain, function(net.socket, ip))
+
+####参数
+domain: 当前域的名称
+function (net.socket, ip): 回调函数。第一个参数是socket,第二个参数是当前域的ip字符串。
+
+####返回值
+nil
+
+####参见
+**-** [net.createServer()](#nt_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()](#ic_read)
+
+
+
+## i2c.start()
+####描述
+启动i2c传输。
+
+####语法
+i2c.start(id)
+
+####参数
+id = 0
+
+####返回值
+nil
+
+####参见
+**-** [i2c.read()](#ic_read)
+
+
+
+## i2c.stop()
+####描述
+停止i2c传输。
+
+####语法
+i2c.stop(id)
+
+####参数
+id = 0
+
+####返回值
+nil
+
+####参见
+**-** [i2c.read()](#ic_read)
+
+
+
+## i2c.address()
+####描述
+设置i2c地址以及读写模式。
+
+####语法
+i2c.address(id, device_addr, direction)
+
+####参数
+id=0
+device_addr: 设备地址。
+direction: i2c.TRANSMITTER:写模式;i2c. RECEIVER:读模式。
+
+####返回值
+nil
+
+####参见
+**-** [i2c.read()](#ic_read)
+
+
+## i2c.write()
+####描述
+向i2c写数据。数据可以是多个数字, 字符串或者lua table。
+
+####语法
+i2c.write(id, data1, data2,...)
+
+####参数
+id=0
+data: 数据可以是多个数字, 字符串或者lua table。
+
+####返回值
+nil
+
+####示例
+
+```lua
+ i2c.write(0, "hello", "world")
+```
+
+####参见
+**-** [i2c.read()](#ic_read)
+
+
+
+## i2c.read()
+####描述
+读取len个字节的数据。
+
+####语法
+i2c.read(id, len)
+
+####参数
+id=0
+len: 数据长度。
+
+####返回值
+string:接收到的数据。
+
+####示例
+
+```lua
+ 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()](#ic_write)
\ No newline at end of file
diff --git a/API.html b/nodemcu_api_en.html
similarity index 75%
rename from API.html
rename to nodemcu_api_en.html
index 72fc3975..3e0ac9a0 100644
--- a/API.html
+++ b/nodemcu_api_en.html
@@ -1014,7 +1014,73 @@ body .markdown-body
page-break-after: avoid;
}
}
-APInodeMcu API Instruction
+nodemcu_api_ennodeMcu API Instruction
+中文版本
version 0.9.2 build 2014-11-18
change log:
@@ -1096,8 +1162,9 @@ key is triged only when key is released
Returns
nil
Example
- node.restart();
-
+
+
See also
-
@@ -1113,8 +1180,9 @@ key is triged only when key is released
Returns
nil
Example
- node.dsleep(us);
-
+
+
See also
-
@@ -1129,8 +1197,9 @@ key is triged only when key is released
Returns
number:chip ID
Example
- id = node.chipid();
-
+
+
See also
-
@@ -1145,8 +1214,9 @@ key is triged only when key is released
Returns
number: system heap size left in bytes
Example
- heap_size = node.heap();
-
+ heap_size = node.heap();
+
+
See also
-
@@ -1163,8 +1233,9 @@ Default function: long: change LED blinking rate, short: reset chip
Returns
nil
Example
- node.key("long", function(){print('hello world')})
-
+ node.key("long", function(){print('hello world')})
+
+
See also
-
@@ -1180,9 +1251,10 @@ High: LED off time. Unit: milliseconds, time resolution: 80~100ms
Returns
nil
Example
- -- turn led on forever.
- node.led(0);
-
+ -- turn led on forever.
+ node.led(0);
+
+
See also
-
@@ -1198,9 +1270,10 @@ same as pcall(loadstring(str)) but support multi seperated line.
Returns
nil
Example
- -- never use node.input() in console. no effect.
- sk:on("receive", function(conn, payload) node.input(payload) end)
-
+ -- never use node.input() in console. no effect.
+ sk:on("receive", function(conn, payload) node.input(payload) end)
+
+
See also
-
@@ -1216,33 +1289,35 @@ serial_debug: 1 output also show in serial. 0: no serial output.
Returns
nil
Example
- function tonet(str)
- sk:send(str)
- -- print(str) WRONG!!! never ever print something in this function
- -- because this will cause a recursive function call!!!
- end
- node.ouput(tonet, 1) -- serial also get the lua output.
-
+ function tonet(str)
+ sk:send(str)
+ -- print(str) WRONG!!! never ever print something in this function
+ -- because this will cause a recursive function call!!!
+ end
+ node.ouput(tonet, 1) -- serial also get the lua output.
+
+
+
+ -- a simple telnet server
+ s=net.createServer(net.TCP)
+ s:listen(2323,function(c)
+ con_std = c
+ function s_output(str)
+ if(con_std~=nil)
+ then con_std:send(str)
+ end
+ end
+ node.output(s_output, 0) -- re-direct output to function s_ouput.
+ c:on("receive",function(c,l)
+ node.input(l) -- works like pcall(loadstring(l)) but support multiple separate line
+ end)
+ c:on("disconnection",function(c)
+ con_std = nil
+ node.output(nil) -- un-regist the redirect output function, output goes to serial
+ end)
+ end)
+
- -- a simple telnet server
- s=net.createServer(net.TCP)
- s:listen(23,function(c)
- con_std = c
- function s_output(str)
- if(con_std~=nil)
- then con_std:send(str)
- end
- end
- node.output(s_output, 0) -- re-direct output to function s_ouput.
- c:on("receive",function(c,l)
- node.input(l) -- works like pcall(loadstring(l)) but support multiple separate line
- end)
- c:on("disconnection",function(c)
- con_std = nil
- node.output(nil) -- un-regist the redirect output function, output goes to serial
- end)
- end)
-
See also
-
@@ -1258,9 +1333,10 @@ serial_debug: 1 output also show in serial. 0: no serial output.
Returns
nil
Example
- -- remove "foo.lua" from file system.
- file.remove("foo.lua")
-
+ -- remove "foo.lua" from file system.
+ file.remove("foo.lua")
+
+
See also
- file.open()
@@ -1283,11 +1359,12 @@ mode:
Returns
nil
Example
- -- open 'init.lua', print the first line.
- file.open("init.lua", "r")
- print(file.readline())
- file.close()
-
+ -- open 'init.lua', print the first line.
+ file.open("init.lua", "r")
+ print(file.readline())
+ file.close()
+
+
See also
- file.close()
@@ -1303,11 +1380,12 @@ mode:
Returns
nil
Example
- -- open 'init.lua', print the first line.
- file.open("init.lua", "r")
- print(file.readline())
- file.close()
-
+ -- open 'init.lua', print the first line.
+ file.open("init.lua", "r")
+ print(file.readline())
+ file.close()
+
+
See also
- file.open()
@@ -1324,11 +1402,12 @@ mode:
file content in string, line by line, include EOL(‘\n’)
return nil when EOF.
Example
- -- print the first line of 'init.lua'
- file.open("init.lua", "r")
- print(file.readline())
- file.close()
-
+ -- print the first line of 'init.lua'
+ file.open("init.lua", "r")
+ print(file.readline())
+ file.close()
+
+
See also
- file.open()
@@ -1345,12 +1424,13 @@ return nil when EOF.
true: write ok.
nil: there is error
Example
- -- open 'init.lua' in 'a+' mode
- file.open("init.lua", "a+")
- -- write 'foo bar' to the end of the file
- file.writeline('foo bar')
- file.close()
-
+ -- open 'init.lua' in 'a+' mode
+ file.open("init.lua", "a+")
+ -- write 'foo bar' to the end of the file
+ file.writeline('foo bar')
+ file.close()
+
+
See also
- file.open()
@@ -1367,12 +1447,13 @@ nil: there is error
true: write ok.
nil: there is error
Example
- -- open 'init.lua' in 'a+' mode
- file.open("init.lua", "a+")
- -- write 'foo bar' to the end of the file
- file.write('foo bar')
- file.close()
-
+ -- open 'init.lua' in 'a+' mode
+ file.open("init.lua", "a+")
+ -- write 'foo bar' to the end of the file
+ file.write('foo bar')
+ file.close()
+
+
See also
- file.open()
@@ -1388,13 +1469,14 @@ nil: there is error
Returns
nil
Example
- -- open 'init.lua' in 'a+' mode
- file.open("init.lua", "a+")
- -- write 'foo bar' to the end of the file
- file.write('foo bar')
- file.flush()
- file.close()
-
+ -- open 'init.lua' in 'a+' mode
+ file.open("init.lua", "a+")
+ -- write 'foo bar' to the end of the file
+ file.write('foo bar')
+ file.flush()
+ file.close()
+
+
See also
- file.open()
@@ -1415,15 +1497,16 @@ offset: default 0
success: returns the final file position
fail: returns nil
Example
- -- open 'init.lua' in 'a+' mode
- file.open("init.lua", "a+")
- -- write 'foo bar' to the end of the file
- file.write('foo bar')
- file.flush()
- file.seek("set")
- print(file.readline())
- file.close()
-
+ -- open 'init.lua' in 'a+' mode
+ file.open("init.lua", "a+")
+ -- write 'foo bar' to the end of the file
+ file.write('foo bar')
+ file.flush()
+ file.seek("set")
+ print(file.readline())
+ file.close()
+
+
See also
- file.open()
@@ -1439,11 +1522,12 @@ fail: returns nil
Returns
a lua table which contains the {file name: file size} pairs
Example
- l = file.list();
- for k,v in l do
- print("name:"..k..", size:"..v)
- end
-
+ l = file.list();
+ for k,v in l do
+ print("name:"..k..", size:"..v)
+ end
+
+
See also
- file.remove()
@@ -1461,8 +1545,9 @@ fail: returns nil
Returns
current mode after setup
Example
- wifi.setmode(wifi.STATION)
-
+ wifi.setmode(wifi.STATION)
+
+
See also
- wifi.getmode()
@@ -1477,8 +1562,9 @@ fail: returns nil
Returns
wifi operation mode
Example
- print(wifi.getmode())
-
+
+
See also
- wifi.setmode()
@@ -1494,8 +1580,9 @@ succeed_callback: callback function called after configuration, which is called
Returns
nil
Example
- wifi.startsmart(6, cb())
-
+ wifi.startsmart(6, cb())
+
+
See also
- wifi.stopsmart()
@@ -1510,8 +1597,9 @@ succeed_callback: callback function called after configuration, which is called
Returns
nil
Example
- wifi.stopsmart()
-
+
+
See also
- wifi.startsmart()
@@ -1528,8 +1616,9 @@ password: string which is less than 64 bytes.
Returns
nil
Example
- wifi.sta.config("myssid","mypassword")
-
+ wifi.sta.config("myssid","mypassword")
+
+
See also
- wifi.sta.connect()
@@ -1545,8 +1634,9 @@ password: string which is less than 64 bytes.
Returns
nil
Example
- wifi.sta.connect()
-
+
+
See also
- wifi.sta.disconnect()
@@ -1562,8 +1652,9 @@ password: string which is less than 64 bytes.
Returns
nil
Example
- wifi.sta.disconnect()
-
+
+
See also
- wifi.sta.config()
@@ -1579,8 +1670,9 @@ password: string which is less than 64 bytes.
Returns
nil
Example
- wifi.sta.autoconnect()
-
+
+
See also
- wifi.sta.config()
@@ -1597,9 +1689,10 @@ password: string which is less than 64 bytes.
Returns
ip address in string, for example:”192.168.0.111”
Example
- -- print current ip
- print(wifi.sta.getip())
-
+ -- print current ip
+ print(wifi.sta.getip())
+
+
See also
- wifi.sta.getmac()
@@ -1614,9 +1707,10 @@ password: string which is less than 64 bytes.
Returns
mac address in string, for example:”18-33-44-FE-55-BB”
Example
- -- print current mac address
- print(wifi.sta.getmac())
-
+ -- print current mac address
+ print(wifi.sta.getmac())
+
+
See also
- wifi.sta.getip()
@@ -1630,17 +1724,19 @@ password: string which is less than 64 bytes.
Parameters
cfg: lua table to setup ap.
Example:
- cfg={}
- cfg.ssid="myssid"
- cfg.pwd="mypwd"
- wifi.ap.setconfig(cfg)
-
+ cfg={}
+ cfg.ssid="myssid"
+ cfg.pwd="mypwd"
+ wifi.ap.setconfig(cfg)
+
+
Returns
nil
Example
- wifi.ap.config(ssid, 'password')
-
+ wifi.ap.config(ssid, 'password')
+
+
See also
-
@@ -1655,8 +1751,9 @@ password: string which is less than 64 bytes.
Returns
ip address in string, for example:”192.168.0.111”
Example
- wifi.ap.getip()
-
+
+
See also
- wifi.ap.getmac()
@@ -1671,8 +1768,9 @@ password: string which is less than 64 bytes.
Returns
mac address in string, for example:”1A-33-44-FE-55-BB”
Example
- wifi.ap.getmac()
-
+
+
See also
- wifi.ap.getip()
@@ -1688,9 +1786,10 @@ password: string which is less than 64 bytes.
Returns
nil
Example
- -- delay 100us
- tmr.delay(100)
-
+ -- delay 100us
+ tmr.delay(100)
+
+
See also
- tmr.now()
@@ -1705,9 +1804,10 @@ password: string which is less than 64 bytes.
Returns
uint32: value of counter
Example
- -- print current value of counter
- print(tmr.now())
-
+ -- print current value of counter
+ print(tmr.now())
+
+
See also
- tmr.delay()
@@ -1724,9 +1824,10 @@ function do(): callback function for alarm timed out
Returns
nil
Example
- -- print "hello world" every 1000ms
- tmr.alarm(1000, 1, function() print("hello world") end )
-
+ -- print "hello world" every 1000ms
+ tmr.alarm(1000, 1, function() print("hello world") end )
+
+
See also
- tmr.now()
@@ -1742,14 +1843,15 @@ function do(): callback function for alarm timed out
Returns
nil
Example
- -- print "hello world" every 1000ms
- tmr.alarm(1000, 1, function() print("hello world") end )
+ -- print "hello world" every 1000ms
+ tmr.alarm(1000, 1, function() print("hello world") end )
- -- something else
+ -- something else
+
+ -- stop alarm
+ tmr.stop()
+
- -- stop alarm
- tmr.stop()
-
See also
- tmr.now()
@@ -1768,10 +1870,10 @@ mode: gpio.OUTPUT or gpio.INPUT, or gpio.INT(interrupt mode)
Returns
nil
Example
- -- set gpio 0 as output.
- gpio.mode(0, gpio.OUTPUT)
+ -- set gpio 0 as output.
+ gpio.mode(0, gpio.OUTPUT)
+
-
See also
- gpio.read()
@@ -1786,9 +1888,10 @@ mode: gpio.OUTPUT or gpio.INPUT, or gpio.INT(interrupt mode)
Returns
number:0 - low, 1 - high
Example
- -- read value of gpio 0.
- gpio.read(0)
-
+ -- read value of gpio 0.
+ gpio.read(0)
+
+
See also
- gpio.mode()
@@ -1804,11 +1907,12 @@ level: gpio.HIGH or gpio.LOW
Returns
nil
Example
- -- set pin index 1 to GPIO mode, and set the pin to high.
- pin=1
- gpio.mode(pin, gpio.OUTPUT)
- gpio.write(pin, gpio.HIGH)
-
+ -- set pin index 1 to GPIO mode, and set the pin to high.
+ pin=1
+ gpio.mode(pin, gpio.OUTPUT)
+ gpio.write(pin, gpio.HIGH)
+
+
See also
- gpio.mode()
@@ -1826,19 +1930,19 @@ function(level): callback function when triggered. The gpio level is the param.
Returns
nil
Example
- -- use pin 0 as the input pulse width counter
- 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)
+ -- use pin 0 as the input pulse width counter
+ 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)
+
-
See also
- gpio.mode()
@@ -1857,9 +1961,10 @@ duty: 0~100, pwm duty cycle in percentage
Returns
nil
Example
- -- set pin index 0 as pwm output, frequency is 100Hz, duty cycle is 50-50.
- pwm.setup(0, 100, 50)
-
+ -- set pin index 0 as pwm output, frequency is 100Hz, duty cycle is 50-50.
+ pwm.setup(0, 100, 50)
+
+
See also
- pwm.start()
@@ -1874,8 +1979,9 @@ duty: 0~100, pwm duty cycle in percentage
Returns
nil
Example
- pwm.close(0)
-
+
+
See also
- pwm.start()
@@ -1890,8 +1996,9 @@ duty: 0~100, pwm duty cycle in percentage
Returns
nil
Example
- pwm.start(0)
-
+
+
See also
- pwm.stop()
@@ -1906,8 +2013,9 @@ duty: 0~100, pwm duty cycle in percentage
Returns
nil
Example
- pwm.stop(0)
-
+
+
See also
- pwm.start()
@@ -1924,8 +2032,9 @@ clock: 1~500, pwm frequency.
Returns
nil
Example
- pwm.setclock(0, 100)
-
+
+
See also
- pwm.getclock()
@@ -1940,8 +2049,9 @@ clock: 1~500, pwm frequency.
Returns
number:pwm frequency of pin
Example
- print(pwm.getclock(0))
-
+
+
See also
- pwm.setclock()
@@ -1957,8 +2067,9 @@ duty: 0~100, pwm duty cycle in percentage
Returns
nil
Example
- pwm.setduty(0, 50)
-
+
+
See also
- pwm.getduty()
@@ -1973,24 +2084,24 @@ duty: 0~100, pwm duty cycle in percentage
Returns
nil
Example
- -- D0 is connected to green led
- -- D1 is connected to blue led
- -- D2 is connected to red 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) -- set led to red
- led(0,0,50) -- set led to blue.
+ -- D0 is connected to green led
+ -- D1 is connected to blue led
+ -- D2 is connected to red 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) -- set led to red
+ led(0,0,50) -- set led to blue.
+
-
See also
- pwm.setduty()
@@ -2009,8 +2120,9 @@ secure: true or false, true for safe link, false for ordinary link
Returns
net.server sub module
Example
- net.createServer(net.TCP, true)
-
+ net.createServer(net.TCP, true)
+
+
See also
- net.createConnection()
@@ -2026,8 +2138,9 @@ secure: true or false, true for safe link, false for ordinary link
Returns
net.server sub module
Example
- net.createConnection(net.UDP, false)
-
+ net.createConnection(net.UDP, false)
+
+
See also
- net.createServer()
@@ -2045,14 +2158,15 @@ function(net.socket): callback function, pass to Caller function as param if a c
Returns
nil
Example
- -- create a server
- sv=net.createServer(net.TCP, false)
- -- server listen on 80, if data received, print data to console, and send "hello world" to remote.
- sv:listen(80,function(c)
- c:on("receive", function(sck, pl) print(pl) end)
- c:send("hello world")
- end)
-
+ -- create a server
+ sv=net.createServer(net.TCP, false)
+ -- server listen on 80, if data received, print data to console, and send "hello world" to remote.
+ sv:listen(80,function(c)
+ c:on("receive", function(sck, pl) print(pl) end)
+ c:send("hello world")
+ end)
+
+
See also
- net.createServer()
@@ -2067,11 +2181,12 @@ function(net.socket): callback function, pass to Caller function as param if a c
Returns
nil
Example
- -- create a server
- sv=net.createServer(net.TCP, false)
- -- close server
- sv:close()
-
+ -- create a server
+ sv=net.createServer(net.TCP, false)
+ -- close server
+ sv:close()
+
+
See also
- net.createServer()
@@ -2115,11 +2230,12 @@ If event is”receive”, the second param is received data in string.
Returns
nil
Example
- 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")
-
+ 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")
+
+
See also
- net.createServer()
@@ -2216,8 +2332,9 @@ data: data can be numbers, string or lua table.
Returns
nil
Example
- i2c.write(0, "hello", "world")
-
+ i2c.write(0, "hello", "world")
+
+
See also
- i2c.read()
@@ -2233,31 +2350,31 @@ len: data length
Returns
string:data received.
Example
- id=0
- sda=1
- scl=0
+ id=0
+ sda=1
+ scl=0
- -- initialize i2c, set pin1 as sda, set pin0 as scl
- i2c.setup(id,sda,scl,i2c.SLOW)
+ -- initialize i2c, set pin1 as sda, set pin0 as scl
+ i2c.setup(id,sda,scl,i2c.SLOW)
- -- user defined function: read from reg_addr content of dev_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
+ -- user defined function: read from reg_addr content of dev_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
- -- get content of register 0xAA of device 0x77
- reg = read_reg(0x77, 0xAA)
- pirnt(string.byte(reg))
+ -- get content of register 0xAA of device 0x77
+ reg = read_reg(0x77, 0xAA)
+ pirnt(string.byte(reg))
+
-
See also
- i2c.write()