Xuino ("zwee-no") is a command-line Arduino toolkit that aims to be simple & C-like.
It facilitates the use of simple makefiles by handling the compilation of the Arduino standard libraries. It also exposes a Python API for use with other tools.
It was inspired by Ino and runs on Linux & OS X.
Before you dive into compiling Arduino code, make sure you've installed all of the following dependencies.
- Python 3.3 or later
- GNU Make
- The Arduino Platform, version 1.0.x
- The AVR GNU C compiler:
avr-gccon Arch Linux,
- The AVR Binary Utilities:
avr-binutilson Arch Linux,
- The AVR C library:
- AVR Dude for uploading:
- Picocom for serial communication:
The package names may vary depending on your distribution. You might be able to install them all at once by installing an Arduino package.
With that done, you can install Xuino from PyPI:
$ sudo pip install xuino
To get a feel for how Xuino works, let's compile a simple web server.
First up, grab an Arduino and plug it in via USB. Then, open up a terminal in the WebServer example directory.
$ cd examples/WebServer
At the moment, this folder just contains standard Arduino code. Let's add a Xuino Makefile so we can compile it.
$ xuino init
init command creates a new makefile from the template at makefiles/Project.mk. It will ask you a few questions about the project you're setting up, and prefill some variables accordingly.
Answer the prompts as follows:
Project name: WebServer Board short name: <your board name> Libraries: Ethernet
Now your WebServer directory should contain two files; WebServer.ino and Makefile. Open up the Makefile to have a look around. Notice in particular how the main executable, $(PROJECT).hex depends on a list of object files. If you're working on a project with lots of source files you can control exactly which ones to compile. Also notice how lots of the variables are filled by calls to
xuino. You could make your project right now simply by running
Although it's possible to make your project with just plain
make, Xuino also provides a make command with better diagnostic output.
$ xuino make
Notice how the SPI library was compiled & linked automatically due to the Ethernet library's dependency on it!
All being well, you should now see a few
.o files in the current directory. The
.hex file is the Arduino executable binary, and the others are intermediate object code which can be deleted if you don't mind a bit of recompilation (add
rm *.o *.elf to the hex making rule).
To upload your code to the Arduino, run
make upload. You should see avrdude do its thing, and some sort of success message. Open up a browser and go to
192.168.1.225 to see the web page being served by your Arduino!
If you have trouble uploading you may need to manually set the serial port. You can try running
ls /dev/ttyUSB* to see a list of potentially correct devices which you can try plugging in to the Makefile's
For more information see the official Xuino documentation, run
xuino --help from a terminal or run
import xuino; help(xuino) from a Python interpreter.
# Create a new makefile xuino init # Build a project xuino make # Upload a project make upload # Open the serial monitor make serial # Alternatively picocom /dev/ttyUSB0 -b 9600 # Flush out the compiled library cache xuino clean
Xuino reads global configuration from
~/.xuinorc and project-specific configuration from
You can use configuration files to change things like your Arduino directory.
See the example configuration file at examples/config for a full list of options.
If you like Xuino, please help out! If you feel like writing documentation, adding features or reporting bugs, I'm more than happy to accept your pull requests. I'm planning to write some documentation on how it all works soon. You're invited to read the source code and give feedback. My hope is that Xuino's source code is easy to understand, and as simply as possible.
Thanks for stopping by!
Xuino is Free Software licensed under the GNU GPLv3+
© Copyright Michael Sproul 2014.