
From the Trenches: Making an IoT Platform Work with ESP8266 and CC3200 - evthewolf
https://blog.cesanta.com/esp8266-and-cc3200-how-we-made-them-work-on-our-iot-platform-presentation
======
poseid
interesting to see the comparison between ESP8266 and CC3200. However, on a
quick glance it is hard what Smart.js is about and what platform it supports
best. This might be interesting to know in the context of a book that I am
working on, see
[http://embeddednodejs.com/chapters.html](http://embeddednodejs.com/chapters.html)

~~~
evthewolf
Have a look at our GitHub page:
[https://github.com/cesanta/smart.js](https://github.com/cesanta/smart.js)
Smart.js is open source and works with ESP8266, CC3200 and POSIX.

~~~
poseid
so, it works with X, Y and Z, but what does it do? Is is a dashboard for data
from IoT? Is it a web server/protocol ? Is it some other kind of control
layer? What data does it deal with, etc. ? Not clear from the first glance.

~~~
ithkuil
Thanks for the feedback! We'll try to make it easier to figure out what it is.

The full docs are
[https://www.cesanta.com/developer/smartjs](https://www.cesanta.com/developer/smartjs)
(linked from the github repo).

TL;DR: two pieces: multiplatform firmware focusing very small embedded devices
+ hosted services that help you build your IoT solution.

\---

The Smart.js firmware implements a bunch of networking protocols and a
JavaScript interpreter that fits in <1KB of ram.

> Is it a web server/protocol ? Is it some other kind of control layer We do
> provide a JSON+WebSocket based protocol and some tooling around it that help
> you build applications. It's designed to play nicely with devices that are
> not always online (e.g. power saving) and that might often change network.

However Smart.js it's not only that. You can use plain HTTP and plain
WebSockets and (soon) MQTT and connect your device with whatever is the rest
of your stack.

> What data does it deal with, etc. We also offer a hosted service that can
> collect metrics, store logs, do pubsub messaging and perform unattended OTA
> updates of your firmware.

~~~
poseid
if Smart.js contains a new kind of JavaScript runtime for embedded devices,
that might be interesting to put more into focus (and compare e.g. with Tessel
or Espruino projects).

The protocols: HTTP, WebSockets, MQTT are pretty standard now. What is their
relationship with Smart.js? Why e.g. are Arduino libs not used?

For high-level system design, Node-Red seems to gain traction, what is the
difference between Node-Red and Smart.js ?

~~~
ithkuil
Smart.js is based on two projects:

\- V7: a small portable JS VM
([https://github.com/cesanta/v7](https://github.com/cesanta/v7)) \- mongoose:
a portable async multiprotocol networking library
([https://github.com/cesanta/mongoose](https://github.com/cesanta/mongoose))

Both of those projects are independent and have some traction on their own;
but you're right that we should make it more explicit. Mongoose is out there
since 2004 and is a quite popular embedded http server. We added many other
protocols to it, including also COAP and DNS.

Arduino libs are not used because they are not async and not portable.

Honestly I don't know about node-red, sounds interesting; however node's V8 VM
is too heavyweight for the smallest devices we aim to support. Smart.js does
expose a nodejs-compatible core API wherever possible, so it might be possible
to port node-red to it.

