Skip to content
funshine edited this page Dec 8, 2014 · 154 revisions

nodeMcu API Instruction

中文版本 ###version 0.9.2 build 2014-12-07 ###change log: 2014-12-07
add ow(1-wire module), from arduino, and use same api.
add an 18b20 1-wire example.
change net.socket.send() payload max len from 256 to 1460.
modify gpio.mode() api, add internal pullup/float para.

2014-12-04
fix memory leak issue when input and run from console.

2014-12-02
fix the heap recover too slow issue, heap will recover in seconds, not minutes.
modify the return of file.open, return nil if file not exist, true if opend ok.
move startup version display before doing the init.lua.
modify wifi.ap.config(), remove the restart at the end of config.

2014-11-30
modify the max freq of pwm module to 1000.
modify the max duty cycle of pwm module to 1023.
add uart module, uart.on("data") api to receive data from uart.

2014-11-29
fix tmr.delay not work when delayed time < 1s.
fix pwm module not work when freq<77.

2014-11-25
Fix memory leak for the dns api.

2014-11-24
Fix the wrong length of wifi password comparison when configuring sta. pwd,64byte. ssid,32byte.
Fix dns problem, add a dns example to wiki.

2014-11-23
A temporary and dirty fix to heap drop issue:
to avoid reboot, a tcp-server will NOT accept a connection from client, if there is not enough memory. :(
file.list() now returns a table only. will not print result in serial directly.

2014-11-20
fix tmr.delay to support more than 2s delay, may cause bacon time out, lost connection to AP.
add tmr.wdclr to clear watchdog counter in chip, use in long time loop.
fix UDP part of net module.
add a timeout para to createServer(net.TCP, timeout).

2014-11-19
add adc module, use adc.read(0) to read adc value, no tests made.
add wifi.sta.getap() api to wifi.sta module, to get ap list.

2014-11-18
bug fixed: net.socket:connect() has no effect.

2014-11-18
bug fixed: as a tcp server, the connection can't closed with :close().
tcp server: inactive connection will closed by server in 30s (previously 180s).
add a test api node.input() to put lua chunk into lua interpretor, multi-line supported.
add a test api node.ouput(function) to direct serial output to a callback function.
file.readline() now returns line include EOL('\n'), and returns nil when EOF.

2014-11-12
full version firmware

2014-11-11
add file.seek() api to file module
now max 6 pwm channel is supported

2014-11-10
change log module to file module
now file operation support multiple read/write
for now file module only allowed one file opened

2014-11-5
delete log operation api from node module
add log module
modify wifi module api
modify node.key long_press and short_press default function
key is triged only when key is released

Summary

  • Easy to access wireless router
  • Based on Lua 5.1.4, Developers are supposed to have experience with Lua Program language.
  • Event-Drive programming modal.
  • Build-in file, timer, pwm, i2c, net, gpio, wifi, uart, adc module.
  • Serial Port BaudRate:9600
  • Re-mapped GPIO pin, use the index to program 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

#Burn/Flash Firmware ###Address

nodemcu_512k.bin: 0x00000

#node module

node.restart()

####Description restart the chip.

####Syntax

node.restart()

####Parameters nil

####Returns nil

####Example

    node.restart();

####See also -

node.dsleep()

####Description

Enter deep sleep mode, wake up when timed out

####Syntax

node.dsleep(us)
-Note: This function can only be used in the condition that esp8266 PIN32(RST) and PIN8(XPD_DCDC) are connected together.

####Parameters us: sleep time in micro second

####Returns nil

####Example

    node.dsleep(us);

####See also -

node.chipid()

####Description return chip ID

####Syntax node.chipid()

####Parameters nil

####Returns number:chip ID

####Example

    id = node.chipid();

####See also -

node.heap()

####Description return the remain HEAP size in bytes

####Syntax node.heap()

####Parameters nil

####Returns number: system heap size left in bytes

####Example

    heap_size = node.heap();

####See also -

node.key()

####Description define button function, button is connected to GPIO16.

####Syntax node.key(type, function())

####Parameters type: type is either string "long" or "short". long: press the key for 3 seconds, short: press shortly(less than 3 seconds)
function(): user defined function which is called when key is pressed. If nil, cancling the user defined function.
Default function: long: change LED blinking rate, short: reset chip

####Returns nil

####Example

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

####See also -

node.led()

####Description setup the on/off time for led, which connected to GPIO16, multiplexing with node.key()

####Syntax node.led(low, high)

####Parameters Low: LED off time, LED keeps on when low=0. Unit: milliseconds, time resolution: 80100ms
High: LED off time. Unit: milliseconds, time resolution: 80
100ms

####Returns nil

####Example

    -- turn led on forever.
    node.led(0);

####See also -

node.input()

####Description accept a string and put the string into Lua interpretor.
same as pcall(loadstring(str)) but support multi seperated line.

####Syntax node.input(str)

####Parameters str: Lua chunk

####Returns nil

####Example

    -- never use node.input() in console. no effect.
    sk:on("receive", function(conn, payload) node.input(payload) end)

####See also -

node.output()

####Description direct output from lua interpretor to a call back function.

####Syntax node.output(function(str), serial_debug)

####Parameters function(str): a function accept every output as str, and can send the output to a socket.
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.
    -- 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)

####See also -

#file module

file.remove()

####Description remove file from file system.

####Syntax file.remove(filename)

####Parameters filename: file to remove

####Returns nil

####Example

    -- remove "foo.lua" from file system.
    file.remove("foo.lua")

####See also - file.open()
- file.close()

file.open()

####Description open file.

####Syntax file.open(filename, mode)

####Parameters filename: file to be opened, directories are not supported
mode:
"r": read mode (the default)
"w": write mode
"a": append mode
"r+": update mode, all previous data is preserved
"w+": update mode, all previous data is erased
"a+": append update mode, previous data is preserved, writing is only allowed at the end of file

####Returns nil: file not opened, or not exists. true: file opened ok.

####Example

    -- open 'init.lua', print the first line.
    file.open("init.lua", "r")
    print(file.readline())
    file.close()

####See also - file.close()
- file.readline()

file.close()

####Description close the file.

####Syntax file.close()

####Parameters nil

####Returns nil

####Example

    -- open 'init.lua', print the first line.
    file.open("init.lua", "r")
    print(file.readline())
    file.close()

####See also - file.open()
- file.readline()

file.readline()

####Description read one line of file which is opened before.

####Syntax file.readline()

####Parameters nil

####Returns 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()

####See also - file.open()
- file.close()

file.writeline()

####Description write string to file and add a '\n' at the end.

####Syntax file.writeline(string)

####Parameters string: content to be write to file

####Returns 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()

####See also - file.open()
- file.write()

file.write()

####Description write string to file.

####Syntax file.write(string)

####Parameters string: content to be write to file.

####Returns 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()

####See also - file.open()
- file.writeline()

file.flush()

####Description flush to file.

####Syntax file.flush()

####Parameters nil

####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()

####See also - file.open()
- file.writeline()

file.seek()

####Description Sets and gets the file position, measured from the beginning of the file, to the position given by offset plus a base specified by the string whence.

####Syntax file.seek(whence, offset)

####Parameters 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

####Returns 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()

####See also - file.open()
- file.writeline()

file.list()

####Description list all files.

####Syntax file.list()

####Parameters nil

####Returns a lua table which contains the {file name: file size} pairs

####Example

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

####See also - file.remove()

#wifi module ##CONSTANT wifi.STATION, wifi.SOFTAP, wifi.STATIONAP

wifi.setmode(mode)

####Description setup wifi operation mode.

####Syntax wifi.setmode(mode)

####Parameters mode: value should be: wifi.STATION, wifi.SOFTAP or wifi.STATIONAP

####Returns current mode after setup

####Example

    wifi.setmode(wifi.STATION)

####See also - wifi.getmode()

wifi.getmode(mode)

####Description get wifi operation mode.

####Syntax wifi.getmode()

####Parameters nil

####Returns wifi operation mode

####Example

    print(wifi.getmode())

####See also - wifi.setmode()

wifi.startsmart()

####Description starts to auto configuration, if success set up ssid and pwd automatically .

####Syntax wifi.startsmart(channel, function succeed_callback())

####Parameters

channel: 1~13, startup channel for searching, if nil, default to 6. 20 seconds for each channel.
succeed_callback: callback function called after configuration, which is called when got password and connected to AP.

####Returns nil

####Example

    wifi.startsmart(6, function() end)

####See also - wifi.stopsmart()

wifi.stopsmart()

####Description stop the configuring process.

####Syntax wifi.stopsmart()

####Parameters nil

####Returns nil

####Example

    wifi.stopsmart()

####See also - wifi.startsmart()

#wifi.sta module

wifi.sta.config()

####Description set ssid and password in station mode.

####Syntax wifi.sta.config(ssid, password)

####Parameters

ssid: string which is less than 32 bytes.
password: string which is less than 64 bytes.

####Returns nil

####Example

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

####See also - wifi.sta.connect()
- wifi.sta.disconnect()

wifi.sta.connect()

####Description connect to AP in station mode.

####Syntax wifi.sta.connect()

####Parameters nil

####Returns nil

####Example

    wifi.sta.connect()

####See also - wifi.sta.disconnect()
- wifi.sta.config()

wifi.sta.disconnect()

####Description disconnect from AP in station mode.

####Syntax wifi.sta.disconnect()

####Parameters nil

####Returns nil

####Example

    wifi.sta.disconnect()

####See also - wifi.sta.config()
- wifi.sta.connect()

wifi.sta.autoconnect()

####Description auto connect to AP in station mode.

####Syntax wifi.sta.autoconnect(auto)

####Parameters auto: 0 to disable auto connecting. 1 to enable auto connecting

####Returns nil

####Example

    wifi.sta.autoconnect()

####See also - wifi.sta.config()
- wifi.sta.connect()
- wifi.sta.disconnect()

wifi.sta.getip()

####Description get ip address in station mode.

####Syntax wifi.sta.getip()

####Parameters nil

####Returns ip address in string, for example:"192.168.0.111"

####Example

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

####See also - wifi.sta.getmac()

wifi.sta.getmac()

####Description get mac address in station mode.

####Syntax wifi.sta.getmac()

####Parameters nil

####Returns mac address in string, for example:"18-33-44-FE-55-BB"

####Example

    -- print current mac address
    print(wifi.sta.getmac())

####See also - wifi.sta.getip()

wifi.sta.getap()

####Description scan and get ap list as a lua table into callback function.

####Syntax wifi.sta.getap(function(table))

####Parameters function(table): a callback function to receive ap table when scan is done
this function receive a table, the key is the ssid, value is other info in format: authmode,rssi,bssid,channel

####Returns nil

####Example

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

####See also - wifi.sta.getip()

#wifi.ap module

wifi.ap.config()

####Description set ssid and password in ap mode.

####Syntax wifi.ap.config(cfg)

####Parameters cfg: lua table to setup ap.

####Example:

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

####Returns nil

####Example

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

####See also -

wifi.ap.getip()

####Description get ip in ap mode.

####Syntax wifi.ap.getip()

####Parameters nil

####Returns ip address in string, for example:"192.168.0.111"

####Example

    wifi.ap.getip()

####See also - wifi.ap.getmac()

wifi.ap.getmac()

####Description get mac address in ap mode.

####Syntax wifi.ap.getmac()

####Parameters nil

####Returns mac address in string, for example:"1A-33-44-FE-55-BB"

####Example

    wifi.ap.getmac()

####See also - wifi.ap.getip()

#timer module

tmr.delay()

####Description delay us micro seconds.

####Syntax tmr.dealy(us)

####Parameters us: delay time in micro second

####Returns nil

####Example

    -- delay 100us
    tmr.delay(100)

####See also - tmr.now()

tmr.now()

####Description return the current value of system counter: uint32, us.

####Syntax tmr.now()

####Parameters nil

####Returns uint32: value of counter

####Example

    -- print current value of counter
    print(tmr.now())

####See also - tmr.delay()

tmr.alarm()

####Description alarm time.

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

####Parameters Interval: alarm time, unit: millisecond
repeat: 0 - one time alarm, 1 - repeat
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 )

####See also - tmr.now()

tmr.stop()

####Description

stop alarm.
-Note: only one alarm is allowed, the previous one would be replaced if tmr.alarm() called again before tmr.stop().

####Syntax tmr.stop()

####Parameters nil.

####Returns nil

####Example

    -- print "hello world" every 1000ms
    tmr.alarm(1000, 1, function() print("hello world") end )

    -- something else

    -- stop alarm
    tmr.stop()

####See also - tmr.now()

tmr.wdclr()

####Description clear system watchdog counter.

####Syntax tmr.wdclr()

####Parameters nil.

####Returns nil

####Example

    for i=1,10000 do 
      print(i)
      tmr.wdclr()   -- should call tmr.wdclr() in a long loop to avoid hardware reset caused by watchdog.
    end 

####See also - tmr.delay()

#GPIO module ##CONSTANT gpio.OUTPUT, gpio.INPUT, gpio.INT, gpio.HIGH, gpio.LOW

gpio.mode()

####Description initialize pin to GPIO mode, set the pin in/out mode, internal pullup.

####Syntax gpio.mode(pin, mode, pullup)

####Parameters pin: 0~11, IO index
mode: gpio.OUTPUT or gpio.INPUT, or gpio.INT(interrupt mode) pullup: gpio.PULLUP or gpio.FLOAT, default: gpio.FLOAT.

####Returns nil

####Example

    -- set gpio 0 as output.
    gpio.mode(0, gpio.OUTPUT)

####See also - gpio.read()

gpio.read()

####Description read pin value.

####Syntax gpio.read(pin)

####Parameters pin: 0~11, IO index

####Returns number:0 - low, 1 - high

####Example

    -- read value of gpio 0.
    gpio.read(0)

####See also - gpio.mode()

gpio.write()

####Description set pin value.

####Syntax gpio.write(pin)

####Parameters pin: 0~11, IO index
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)

####See also - gpio.mode()
- gpio.read()

gpio.trig()

####Description set the interrupt callback function for pin.

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

####Parameters pin: 0~11, IO index
type: "up", "down", "both", "low", "high", which represent rising edge, falling edge, both edge, low level, high level trig mode separately.
function(level): callback function when triggered. The gpio level is the param. Use previous callback function if undefined here.

####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)

####See also - gpio.mode()
- gpio.write()

#PWM module

pwm.setup()

####Description set pin to PWM mode. Only 3 pins can be set to PWM mode at the most.

####Syntax pwm.setup(pin, clock, duty)

####Parameters pin: 011, IO index
clock: 1
1000, pwm frequency
duty: 0~1023, pwm duty cycle, max 1023(10bit)

####Returns nil

####Example

    -- set pin index 0 as pwm output, frequency is 100Hz, duty cycle is half.
    pwm.setup(0, 100, 512)

####See also - pwm.start()

pwm.close()

####Description quit PWM mode for specified pin.

####Syntax pwm.close(pin)

####Parameters pin: 0~11, IO index

####Returns nil

####Example

    pwm.close(0)

####See also - pwm.start()

pwm.start()

####Description pwm starts, you can detect the waveform on the gpio.

####Syntax pwm.start(pin)

####Parameters pin: 0~11, IO index

####Returns nil

####Example

    pwm.start(0)

####See also - pwm.stop()

pwm.stop()

####Description pause the output of PWM waveform.

####Syntax pwm.stop(pin)

####Parameters pin: 0~11, IO index

####Returns nil

####Example

    pwm.stop(0)

####See also - pwm.start()

pwm.setclock()

####Description

set pwm frequency for pin.
-Note: setup pwm frequency will synchronously change others if there are any. Only one PWM frequency can be allowed for the system.

####Syntax pwm.setclock(pin, clock)

####Parameters pin: 011, IO index.
clock: 1
1000, pwm frequency.

####Returns nil

####Example

    pwm.setclock(0, 100)

####See also - pwm.getclock()

pwm.getclock()

####Description get pwm frequency of pin.

####Syntax pwm.getclock(pin)

####Parameters pin: 0~11, IO index.

####Returns number:pwm frequency of pin

####Example

    print(pwm.getclock(0))

####See also - pwm.setclock()

pwm.setduty()

####Description set duty clycle for pin.

####Syntax pwm.setduty(pin, duty)

####Parameters pin: 011, IO index
duty: 0
1023, pwm duty cycle, max 1023(10bit).

####Returns nil

####Example

    pwm.setduty(0, 512)

####See also - pwm.getduty()

pwm.getduty()

####Description get duty clycle for pin.

####Syntax pwm.getduty(pin)

####Parameters pin: 0~11, IO index

####Returns number: duty cycle, max 1023.

####Example

    -- D0 is connected to green led
    -- D1 is connected to blue led
    -- D2 is connected to red led
    pwm.setup(0,500,512)
    pwm.setup(1,500,512)
    pwm.setup(2,500,512)
    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(512,0,0) --  set led to red
    led(0,0,512) -- set led to blue.

####See also - pwm.setduty()

#net module ##CONSTANT net.TCP, net.UDP

net.createServer()

####Description create a server.

####Syntax net.createServer(type, timeout)

####Parameters type: net.TCP or net.UDP
timeout: for a TCP server, timeout is 1~28800 seconds, for a inactive client to disconnected.

####Returns net.server sub module

####Example

    net.createServer(net.TCP, 30) -- 30s timeout

####See also - net.createConnection()

net.createConnection()

####Description create a client.

####Syntax net.createConnection(type, secure)

####Parameters type: net.TCP or net.UDP
secure: 1 or 0, 1 for ssl link, 0 for normal link

####Returns net.server sub module

####Example

    net.createConnection(net.UDP, 0)

####See also - net.createServer()

#net.server module

listen()

####Description listen on port from [ip] address.

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

####Parameters port: port number
ip:ip address string, can be omitted
function(net.socket): callback function, pass to Caller function as param if a connection is created successfully

####Returns nil

####Example

    -- create a server
    sv=net.createServer(net.TCP, 30)    -- 30s time out for a inactive client
    -- 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()

close()

####Description close server.

####Syntax net.server.close()

####Parameters nil

####Returns nil

####Example

    -- create a server
    sv=net.createServer(net.TCP, 30)
    -- close server
    sv:close()

####See also - net.createServer()

#net.socket module

connect()

####Description connect to remote.

####Syntax connect(port, ip)

####Parameters port: port number
ip: ip address in string

####Returns nil

####See also - net.socket:on()

send()

####Description send data to remote via connection.

####Syntax send(string, function(sent))

####Parameters string: data in string which will be sent to remote
function(sent): callback function for sending string

####Returns nil

####See also - net.socket:on()

on()

####Description register callback function for event.

####Syntax on(event, function cb())

####Parameters event: string, which can be: "connection", "reconnection", "disconnection", "receive", "sent"
function cb(net.socket, [string]): callback function. The first param is the socket.
If event is"receive", the second param is received data in string.

####Returns nil

####Example

    sk=net.createConnection(net.TCP, 0)
    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()

close()

####Description close socket.

####Syntax close()

####Parameters nil

####Returns nil

####See also - net.createServer()

dns()

####Description get domain ip

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

####Parameters domain: domain name.
function (net.socket, ip): callback function. The first param is the socket, the second param is the ip address in string.

####Returns nil

####Example

    sk=net.createConnection(net.TCP, 0)
    sk:dns("www.nodemcu.com",function(conn,ip) print(ip) end)
    sk = nil

####See also - net.createServer()

#i2c module ##CONSTANT i2c.SLOW, i2c.TRANSMITTER, i2c. RECEIVER. FAST(400k)is not supported for now.

i2c.setup()

####Description initialize i2c.

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

####Parameters id = 0
pinSDA: 011, IO index
pinSCL: 0
11, IO index
speed: i2c.SLOW

####Returns speed: the seted speed.

####See also - i2c.read()

i2c.start()

####Description start i2c transporting.

####Syntax i2c.start(id)

####Parameters id = 0

####Returns nil

####See also - i2c.read()

i2c.stop()

####Description stop i2c transporting.

####Syntax i2c.stop(id)

####Parameters id = 0

####Returns nil

####See also - i2c.read()

i2c.address()

####Description setup i2c address and read/write mode.

####Syntax i2c.address(id, device_addr, direction)

####Parameters id=0
device_addr: device address.
direction: i2c.TRANSMITTER for writing mode , i2c. RECEIVER for reading mode

####Returns true: get ack false: no ack get

####See also - i2c.read()

i2c.write()

####Description write data to i2c, data can be multi numbers, string or lua table.

####Syntax i2c.write(id, data1, data2,...)

####Parameters id=0
data: data can be numbers, string or lua table.

####Returns number: number of bytes wrote.

####Example

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

####See also - i2c.read()

i2c.read()

####Description read data for len bytes.

####Syntax i2c.read(id, len)

####Parameters id=0
len: data length

####Returns string:data received.

####Example

    id=0
    sda=1
    scl=0

    -- 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

    -- get content of register 0xAA of device 0x77
    reg = read_reg(0x77, 0xAA)
    print(string.byte(reg))

####See also - i2c.write()

#adc module ##CONSTANT none

adc.read()

####Description read adc value of id, esp8266 has only one 10bit adc, id=0, pin TOUT

####Syntax adc.read(id)

####Parameters id = 0

####Returns adc value

####See also -

#uart module ##CONSTANT none

uart.on()

####Description set the callback function to the uart event,
"data" event supported, means there is data input from uart.

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

####Parameters method = "data", there is data input from uart.
function: callback function, event "data" has a callback like this: function(data) end
run_input: 0 or 1, 0: input from uart will not go into lua interpreter,
1: input from uart will go into lua interpreter, and run.

####Returns nil

####Example

    uart.on("data",
      function(data)
        print("receive from uart:", data)
        if data=="quit" then 
          uart.on("data") 
        end        
    end, 0)

####See also -

#onewire module ##CONSTANT none

ow.setup()

####Description set a pin in onewire mode.

####Syntax ow.setup(pin)

####Parameters pin: 1~10, IO index

####Returns nil

####See also -

ow.reset()

####Description Perform a 1-Wire reset cycle.

####Syntax ow.reset(pin)

####Parameters pin: 1~10, IO index

####Returns number: Returns 1 if a device responds with a presence pulse. Returns 0 if there is no device or the bus is shorted or otherwise held low for more than 250uS

####See also -

ow.skip()

####Description Issue a 1-Wire rom skip command, to address all on bus.

####Syntax ow.skip(pin)

####Parameters pin: 1~10, IO index

####Returns nil

####See also -

ow.select()

####Description Issue a 1-Wire rom select command, make sure you do the ow.reset(pin) first.

####Syntax ow.select(pin, rom)

####Parameters pin: 1~10, IO index
rom: string value, len 8, rom code of the salve device

####Returns nil

####Example

-- 18b20 Example
pin = 9
ow.setup(pin)
count = 0
repeat
  count = count + 1
  addr = ow.reset_search(pin)
  addr = ow.search(pin)
  tmr.wdclr()
until((addr ~= nil) or (count > 100))
if (addr == nil) then
  print("No more addresses.")
else
  print(addr:byte(1,8))
  crc = ow.crc8(string.sub(addr,1,7))
  if (crc == addr:byte(8)) then
    if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
      print("Device is a DS18S20 family device.")
        repeat
          ow.reset(pin)
          ow.select(pin, addr)
          ow.write(pin, 0x44, 1)
          tmr.delay(1000000)
          present = ow.reset(pin)
          ow.select(pin, addr)
          ow.write(pin,0xBE,1)
          print("P="..present)  
          data = nil
          data = string.char(ow.read(pin))
          for i = 1, 8 do
            data = data .. string.char(ow.read(pin))
          end
          print(data:byte(1,9))
          crc = ow.crc8(string.sub(data,1,8))
          print("CRC="..crc)
          if (crc == data:byte(9)) then
             t = (data:byte(1) + data:byte(2) * 256) * 625
             t1 = t / 10000
             t2 = t % 10000
             print("Temperature="..t1.."."..t2.."Centigrade")
          end                   
          tmr.wdclr()
        until false
    else
      print("Device family is not recognized.")
    end
  else
    print("CRC is not valid!")
  end
end

####See also -

ow.write()

####Description Write a byte. If 'power' is 1 then the wire is held high at the end for parasitically powered devices. You are responsible for eventually depowering it by calling depower() or doing another read or write.

####Syntax ow.write(pin, v, power)

####Parameters pin: 1~10, IO index
v: byte to be written to salve device
power: 1 for wire being held high for parasitically powered devices.

####Returns nil

####See also -

ow.write_bytes()

####Description Write multi bytes. If 'power' is 1 then the wire is held high at the end for parasitically powered devices. You are responsible for eventually depowering it by calling depower() or doing another read or write.

####Syntax ow.write_bytes(pin, buf, power)

####Parameters pin: 1~10, IO index
buf: string to be written to salve device
power: 1 for wire being held high for parasitically powered devices.

####Returns nil

####See also -

ow.read()

####Description read a byte.

####Syntax ow.read(pin)

####Parameters pin: 1~10, IO index

####Returns byte read from slave device.

####See also -

ow.read_bytes()

####Description read multi bytes.

####Syntax ow.read_bytes(pin, size)

####Parameters pin: 1~10, IO index
size: number of bytes to be read from slave device.

####Returns string: bytes read from slave device.

####See also -

ow.depower()

####Description Stop forcing power onto the bus. You only need to do this if you used the 'power' flag to ow.write() or used a ow.write_bytes() and aren't about to do another read or write.

####Syntax ow.depower(pin)

####Parameters pin: 1~10, IO index

####Returns nil

####See also -

ow.reset_search()

####Description Clear the search state so that it will start from the beginning again.

####Syntax ow.reset_search(pin)

####Parameters pin: 1~10, IO index

####Returns nil

####See also -

ow.target_search()

####Description Setup the search to find the device type 'family_code' on the next call to ow.search() if it is present.

####Syntax ow.target_search(pin, family_code)

####Parameters pin: 1~10, IO index
family_code: byte for family code.

####Returns nil

####See also -

ow.search()

####Description Look for the next device.

####Syntax ow.search(pin)

####Parameters pin: 1~10, IO index

####Returns if succeed return a string length of 8, which contain the rom code of slave device.
if failed in searching next device return nil.

####See also -

ow.crc8()

####Description Compute a Dallas Semiconductor 8 bit CRC, these are used in the ROM and scratchpad registers.

####Syntax ow.crc8(buf)

####Parameters buf: string value, data to be calculated check sum in string.

####Returns crc result in byte.

####See also -

ow.check_crc16()

####Description Compute the 1-Wire CRC16 and compare it against the received CRC.

####Syntax ow.check_crc16(buf, inverted_crc0, inverted_crc1, crc)

####Parameters buf: string value, data to be calculated check sum in string.
inverted_crc0: LSB of received CRC.
inverted_crc1: MSB of received CRC.
crc: crc starting value (optional)

####Returns bool: true, if the CRC matches; false for dismatches.

####See also -

ow.crc16()

####Description Compute a Dallas Semiconductor 16 bit CRC. This is required to check the integrity of data received from many 1-Wire devices. Note that the CRC computed here is not what you'll get from the 1-Wire network, for two reasons:
1) The CRC is transmitted bitwise inverted.
2) Depending on the endian-ness of your processor, the binary representation of the two-byte return value may have a different byte order than the two bytes you get from 1-Wire.

####Syntax ow.crc16(buf, crc)

####Parameters buf: string value, data to be calculated check sum in string.
crc: crc starting value (optional)

####Returns return The CRC16, as defined by Dallas Semiconductor.

####See also -

Clone this wiki locally