Autonomy via CLI

Bernat Romagosa edited this page Jan 25, 2017 · 4 revisions

Snap4Arduino is also offered as a command line application that can read Snap! projects and run them in a terminal.

What this means is that you could prototype your projects in a regular computer and then have a very little, resource limited and portable computer run them, giving you the possibility of making your project autonomous.

The embedded command line version works in any GNU/Linux based machine, including embedded platforms and single board computers. New generation Arduino boards like Yun, Tiān or Industrial 101 can run this version right inside the board, and if you have a regular Arduino and any kind of GNU/Linux based single board computer, you can always have the latter be the host computer to the Arduino board, giving autonomy to your project without having to modify your Snap4Arduino program at all.

Examples of tiny computers (AKA single-board computers) that can run the command line version of Snap4Arduino are the Arduino Tian (see Linino), Raspberry Pi, BeagleBone black, ODROID or CHIP.

See this video for an example of a battery-powered Raspberry Pi running a Snap4Arduino program and interfacing with a regular Arduino UNO board:


The command line version is available for download in the official site under the name Embedded (Command Line).


GNU/Linux Desktop

To install it in a regular desktop computer, just unzip the package and run the ./ utility as a superuser. In a Debian/Ubuntu system, you'd do so by running:

sudo ./

Single-Board Computers (Debian/Ubuntu-based, Raspbian)

You need to satisfy a couple of dependencies. For starters, you are going to need NodeJS (0.10.4x or higher) and npm. Follow instructions from

The next step is to unzip the package and cd to its root directory. All the following commands should be issued from within that directory.

You then need to install the Node.JS Firmata package, which you can do by running:

$ npm install firmata

Optional Steps

If you want to have full Canvas support to be able to stream your stage over HTTP:

$ npm install canvas 

If npm fails to install canvas, you may need to install its prerequisites. In Debian/Raspbian, this should suffice:

# apt-get install g++ build-essential libgif-dev libpango1.0-dev libjpeg-dev libcairo2-dev

For other systems, please refer to

System-wide installation

You do not need to install Snap4Arduino, you can just run the command line interpreter by running ./snap.js

To install the snap-interpreter in your system, just run the script with root privileges.

# ./


snap.js yourProject.xml [--plain-snap] [--canvas] [--serve] [/path/to/serial]
Runs a Berkeley Snap! project or a Snap4Arduino one on the command line.

                Runs a plain Snap! project with no Arduino capabilities.
                Uses the LininoIO library for communication with the Arduino instead of Firmata.
                Meant to be used in boards with embedded GNU/Linux inside (Tian, Yún, etc).
                If a serial port is specified, this setting will have no effect.
                Renders the Stage in an HTTP-streamable canvas. Automatically adds «--serve».
                Starts a simple HTTP server at port 42001 with the following entry points:
                        Streams the Stage in real time. Needs «--canvas».
                        Broadcasts «message» to Snap! so it can be captured by «When I receive» hat blocks.
                        Lists all messages being used in the Snap! program.
                        Lists all variables being used in the Snap! program.
                        Sets the Snap! variable «variable» to «value».

On the terminal, you'll get outputs of say, think and ask blocks and all messages given by the UI. The contents of the stage can be seen via a tiny webserver accessible at http://[your-ip]:42001/stage. See this section to read about the whole HTTP protocol.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.