APIs for the Internet of Things
-
Upload
kinoma -
Category
Technology
-
view
448 -
download
3
Transcript of APIs for the Internet of Things
![Page 1: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/1.jpg)
APIs for the Internet of Things
Peter Hoddie @phoddie@kinoma
@APICraftSF February 25, 2016
![Page 2: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/2.jpg)
@kinoma
Overview1. IoT is the modernization of embedded computing, defined by
connectivity
2. How IoT devices are programmed needs to change
3. The unique challenges, demands, and priorities of IoT
4. Why Kinoma uses JavaScript together with C
5. Three areas of API functionality that are central to IoT
6. How Kinoma is building a set of APIs for IoT
![Page 3: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/3.jpg)
@kinoma
![Page 4: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/4.jpg)
@kinoma
Why JavaScript for IoT• JavaScript is the closest thing we have to a
universal programming language
Web (Desktop)
Mobile (Apps and Web)
Server
Embedded
![Page 5: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/5.jpg)
@kinoma
High level programming languages on embedded systems
Relatedly, writing software to control drones, vending machines, and dishwashers has become as easy as spinning up a website. Fast, efficient processors … are turning JavaScript into a popular embedded programming language—unthinkable less than a decade ago.
![Page 6: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/6.jpg)
JavaScript for IoT
@kinoma
• JSON built in – de facto data format of the web • Exceptionally portable – OS independent • Helps eliminate memory leaks so devices can run
for a very long time – garbage collector
![Page 7: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/7.jpg)
Secure foundation
@kinoma
• Sandbox • Core language provides no access to network, files, hardware, screen,
audio, etc. • Scripts can only see and do what the system designer chooses to
provide • Secure – many classes of security flaws in native code are nonexistent
• Uninitialized memory • Stack overflow • Buffer overruns • Mal-formed data injection
![Page 8: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/8.jpg)
First truly major enhancements to the language. ES6 contains more than 400 individual changes including:
• Classes – familiar tool for inheritance
• Promises – clean, consistent asynchronous operation
• Modules – reusable code libraries
• ArrayBuffer – work with binary data
JavaScript 6th Edition – Features for IoT
@kinoma
![Page 9: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/9.jpg)
@kinoma
How small a system can run JavaScript?• 512 KB RAM • 200 MHz ARM Cortex M4 • Wi-Fi b/g • Most complete ES6 implementation anywhere • Open source
![Page 10: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/10.jpg)
What does JavaScript forIoT devices look like?
![Page 11: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/11.jpg)
@kinoma
HTTP Client
let HTTPClient = require("HTTPClient");let http = new HTTPClient(url);
http.onTransferComplete = function(status) {trace(`Transfer complete : ${status}\n`);
};http.onDataReady = function(buffer) {
trace(String.fromArrayBuffer(buffer));};
http.start();
![Page 12: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/12.jpg)
@kinoma
HTTP Server
let HTTPServer = require("HTTPServer");let server = new HTTPServer({port: 80});
server.onRequest = function(request) {trace(`new request: url = ${request.url}\n`);request.addHeader("Connection", "close");request.response();
};
![Page 13: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/13.jpg)
@kinoma
I2C Accelerometerlet accel = new I2C(1, 0x53);let id = accel.readChar(0x00);if (0xE5 != id)
throw new Error(`unrecognized id: ${id}`);
accel.write(0x2d, [0x08]);accel.write(0x38, [(0x01 << 6) | 0x1f]);
let status = accel.readByte(0x39);let tmp = accel.readByte(0x32);let x = (tmp << 8) | accel.readByte(0x33);tmp = accel.readByte(0x34);let y = (tmp << 8) | accel.readByte(0x35);tmp = accel.readByte(0x36);let z = (tmp << 8) | accel.readByte(0x37);
![Page 14: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/14.jpg)
@kinoma
Adding ES6 to your product• Just a few steps to get the basics working • Get XS6 from GitHub • Build it with your product
• Entirely ANSI C – likely builds as-is • All host OS dependencies in three files xs6Host.c,
xs6Platform.h, and xs6Platform.6 • Update as needed for your host OS / RTOS
![Page 15: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/15.jpg)
@kinoma
Hello World
/* test.js */trace("Hello, world!\n");
![Page 16: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/16.jpg)
@kinoma
Hosting scripts in your code#include <xs.h>int main(int argc, char* argv[]) {
xsCreation creation = {128 * 1024 * 1024,/* initial chunk size */16 * 1024 * 1024, /* incremental chunk size */8 * 1024 * 1024, /* initial heap slot count */1 * 1024 * 1024, /* incremental heap slot count */4 * 1024, /* stack slot count */12 * 1024, /* key slot count */1993, /* name modulo */127 /* symbol modulo */
};xsMachine* machine = xsCreateMachine(&creation, NULL,"my virtual machine", NULL);xsBeginHost(machine);xsRunProgram(argv(1));xsEndHost(machine);xsDeleteMachine(machine);return 0;
}
![Page 17: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/17.jpg)
Reading environment variablesTo allow a script to do this trace(getenv("XS6") + "\n");
trace(getenv("XSBUG_HOST") + "\n");
xsResult = xsNewHostFunction(xs_getenv, 1);xsSet(xsGlobal, xsID("getenv"), xsResult);
void xs_getenv(xsMachine* the){ xsStringValue result = getenv(xsToString(xsArg(0))); if (result) xsResult = xsString(result);}
Implement xs_getenv in C
Add getenv function to the virtual machine
![Page 18: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/18.jpg)
Avoid the “100% pure” trap• It doesn’t make sense to code
everything in script • Native code is great
• Fast • Access to native functionality • Access to hardware functions • Re-use of proven, reliable code • Secure
![Page 19: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/19.jpg)
JavaScript has proven to be accessible to designers, students, and engineers
![Page 20: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/20.jpg)
@kinoma
Scriptable is scalable• Your organization can’t implement everything itself
• Interactions with other devices • Mobile experience • Interactions with cloud service
• Building partnerships directly is slow, expensive, and limited • Opening your product to Apps let’s individuals and companies
integrate your product with theirs • Brings new abilities, new customers, access to new markets
![Page 21: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/21.jpg)
@kinoma
Scriptable IoT will lead us to theright standards
• New “standard objects” for IoT to augment JavaScript built-ins • Common programming models • Modules / libraries that are common across devices • Perhaps enhancements to JavaScript for needs of IoT
![Page 22: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/22.jpg)
@kinoma
Scriptable will realize potential of IoT• We can’t organize to connect all these
devices and services together • This is not a central design / control
problem • Organic exploration and growth • Consumers will get the magic they
expect, just as the mobile app ecosystem snapped into place
![Page 23: APIs for the Internet of Things](https://reader033.fdocuments.net/reader033/viewer/2022042907/58879c311a28ab5b1a8b6d01/html5/thumbnails/23.jpg)
@kinoma
[In Closing]• [Review your main ideas in summary form; repetition is important for
comprehension and recall, so repeat your important points. This also indicates to the audience that your talk is coming to an end and they can start to formulate their questions.]
• Calls to action:
• [Additional resources to point them to]
• [Recommended reading]
• [Where to dig into Kinoma APIs]
• Final statement before opening up to questions; what you want your audience to remember after it has forgotten everything else from your talk.