11 KiB
wIoT
An awesome project.
System Primitives
Wire
Generate a new wire, which can transport and persist data.
Syntax
new wiot.wire([default_value = 0[, isPersist = false]])
Parameters
default_value
: (Optional) The default value of this wire when initializing.isPersist
: (Optional) Persist the data in Flash so after restart the data can be recovered from Flash.
Returns
wire Object
: wire object that serves as a parameter of other primitives.
Example
let wire1 = new wiot.wire();
let wire2 = new wiot.wire(15); //Initizlize as 15
let wire3 = new wiot.wire(15, true); //Persist in Flash
Buffer
Buffer is used to connected two wires. Only when the data in input wire has been changed and held for a peroid, the new data can be synchronized to the output wire.
Syntax
wiot.buffer(node, wire_output, wire_input[, delay_s = 0[, isSyncAtInit = false]])
Parameters
node
: The node object to run the buffer.wire_output
: The wire object as the output.wire_input
: The wire object as the input.delay_s
: (Optional) The peroid for the changed input data to hold in seconds.isSyncAtInit
: (Optional) Whether to synchronize the two wire at system startup.
Returns
primitive object
Example
let node1 = new wiot.node.nodemcu('abcde');
let wire1 = new wiot.wire();
let wire2 = new wiot.wire(15); //Initizlize as 15
wiot.buffer(node1, wire2, wire1, 3); //when wire1 changes and hold for 3 seconds,
// the wire2 will be updated with the data in wire1
Operate
Operate is used to determine the relationship among wires.
Syntax
wiot.operate(node, expression, wire_output, ...wires_input)
Parameters
node
: The node object to run the operate.expression
: The expression between the output wire and the input wires. The first wire_input will be$0
, the second wire_input will be$1
...wire_output
: The wire object as the output.wires_input
: The wire objects as the inputs.
Returns
primitive object
Example
let node1 = new wiot.node.nodemcu('abcde');
let wire1 = new wiot.wire();
let wire2 = new wiot.wire(15);
let wire3 = new wiot.wire(1);
wiot.operate(node1, '$0+$1', wire1, wire2, wire3); //wire1=wire2+wire3
// After startup, the wire1 will be 16
NodeMCU Primitives
gpio
Method to operate the PINs on NodeMCU board.
Syntax
wiot.gpio(node, mode, pin, wire)
Parameters
node
: The node object to run the gpio.mode
: Determine the mode of PIN.wiot.INPUT
orwiot.OUTPUT
.pin
: Which PIN to use. e.g.node.D3
wire
: The wire object as the output/input.
Returns
primitive object
Example
let node1 = new wiot.node.nodemcu('abcde');
let wire1 = new wiot.wire();
//when D3 is LOW/HIGH, set D4 to be LOW/HIGH
wiot.gpio(node1, wiot.INPUT, node1.D3, wire1);
wiot.gpio(node1, wiot.OUTPUT, node1.D4, wire1);
adc
Method to get the input voltage of the Analog Pin (D0).
Syntax
wiot.adc(node, wire_output)
Parameters
node
: The node object to run.wire_output
: The wire object as the output.
Returns
primitive object
Example
let node1 = new wiot.node.nodemcu('abcde');
let wire1 = new wiot.wire();
wiot.adc(node1, wire1);
pwm
Method to launch a PWM pulse on appointed PIN.
Syntax
wiot.pwm(node, pin, wire_duty, wire_clock)
Parameters
node
: The node object to run.pin
: Which PIN to use. e.g.node.D3
wire_duty
: The wire object to control the duty.wire_clock
: The wire object to control the clock frequency.
Returns
primitive object
Print a message via UART.
Syntax
wiot.print(node, ...wires_input)
Parameters
node
: The node object to run.wires_input
: The wire object to need to be print to console when changed.
Returns
primitive object
sjson_encode
Convert a Lua table into JSON format string.
Syntax
wiot.sjson_encode(node, wire_output, wire_input)
Parameters
node
: The node object to run.wire_output
: The wire object that will receive the encoded JSON string.wire_input
: The wire object of the input Lua table.
Returns
primitive object
sjson_decode
Convert a JSON format string into Lua table.
Syntax
wiot.sjson_decode(node, wire_output, wire_input)
Parameters
node
: The node object to run.wire_output
: The wire object that will receive the decoded Lua table.wire_input
: The wire object of the input JSON string.
Returns
primitive object
udp
Setup a UDP server.
Syntax
wiot.udp(node, wire_res_ip, wire_res_port, wire_res_data, wire_send_ip, wire_send_port, wire_send_data[, localport = parseInt(Math.random()*20000)+10000])
Parameters
node
: The node object to run.wire_res_ip
: The wire object that identify the IP of the bind.wire_res_port
: The wire object of the port to listen to.wire_res_data
: The wire object that will receive the incoming data.wire_send_ip
: The wire object of the ip of target.wire_send_port
: The wire object of the port of target.wire_send_data
: The wire object of the data to be sent.localport
: The local UDP server port.
Returns
primitive object
tcp
Setup a TCP server.
Syntax
wiot.tcp(node, host, port, wire_res_data, wire_send_data)
Parameters
node
: The node object to run.host
: The wire object that identify the IP of the server.port
: The wire object of the port to listen to.wire_res_data
: The wire object that will receive the incoming data.wire_send_data
: The wire object of the data to be sent.
Returns
primitive object
http
HTTP request.
Syntax
wiot.http(node, wire_statusCode, wire_res, wire_url[, wire_body = new wiot.wire(`''`)[, header = 'nil'[, method = 'GET']]])
Parameters
node
: The node object to run.wire_statusCode
: The wire object of the status code.wire_res
: The wire object of the received data.wire_url
: The wire object of the request URL.wire_body
: The wire object of the body of the sent data.header
: The header of HTTP request.method
: The HTTP method. e.g. GET, POST, HEADER, REQUEST, DELETE, PUT
Returns
primitive object
bigiot
Connect to bigiot. Can be used to connect 天猫精灵 and 小爱同学.
Syntax
wiot.bigiot(node, DeviceID, APIkey, wire_output, wire_trigger)
Parameters
node
: The node object to run.DeviceID
: Device ID of the device on bigiot.APIkey
: API key of the bigiot application.wire_output
: The wire of the data sent to bigiot.wire_trigger
: The wire to trigger a request.
Returns
primitive object
Send a email.
Syntax
wiot.mail(node, wire_en, wire_to, wire_subject, wire_body[, from = 'wiot'])
Parameters
node
: The node object to run.wire_en
: The wire to trigger a mail sending.wire_to
: The wire of the target email address.wire_subject
: The wire of the subject.wire_body
: The wire of the email body.from
: The title of sender.
Returns
primitive object
memobird
Print using memobird.
Syntax
wiot.memobird(node, AppKey, UserID, memobirdID, wire_en, wire_body)
Parameters
node
: The node object to run.AppKey
: The application key from memobird.UserID
: The user ID of memobird account.memobirdID
: The ID of the memobird.wire_en
: The wire of the trigger.wire_body
: The wire of the body of the printed data.
Returns
primitive object
redis
Connect to Redis.
Syntax
wiot.redis(node, host, channel, wire_res, wire_send[, port = 6379])
Parameters
node
: The node object to run.host
: The host of Redis server.channel
: The channel to join.wire_res
: The wire object to put the received data.wire_send
: The wire of the sent data.port
: The port of the Redis server.
Returns
primitive object
webpage
Generate and launch a web page.
Syntax
wiot.webpage(node, key, template[, wires_output_map = {}[, wires_input_map = {}[, interval_s = 0.4[, host = 'http://wiot-webpage.yimian.xyz/']]]])
Parameters
node
: The node object to run.key
: The access key of the webpage application.template
: The template of the webpage.wire_output_map
: The output map of the webpage.wire_input_map
: The input map of the webpage.interval_s
: The interval to check the status (AJAX) in seconds.host
: The host of the webpage server.
Returns
primitive object
Operators
if
Method to achieve a IF function in the wiot.operate
's expression.
Syntax
wiot.if(condition, ifYes, ifNo)
Parameters
condition
: The condition to determine which of the following expression to be used.ifYes
: The expression to be used when the condition is true.ifNo
: The expression to be used when the condition is not true.
Returns
String Expression
Example
//Button controller breathing LED
let w = new wiot.wire(0),
w1 = new wiot.wire(10),
w2 = new wiot.wire(),
w3 = new wiot.wire();
let node = new wiot.node.nodemcu('abcde');
wiot.gpio(wiot.INPUT, node.D3, w3, node);
wiot.pwm(node.D4, w2, new wiot.wire(500), node);
wiot.operate(wiot.if(`$1==1`, `math.abs($0%2047-1023)`, `1023`), node, w2, w, w3);
wiot.operate('($0+10)%2048', node, w, w1);
wiot.buffer(w1, w, node, .001, true);
Modules
breathing
This will generate a breathing signal.
Syntax
wiot.breathing(node, period_s, wire_output)
Parameters
node
: The node object to run.period_s
: The period of breathing in seconds.wire_output
: The output wire.
Returns
primitive object