_____ _ | __|___ ___ ___ _ _|_|___ ___ | __|_ -| . | _| | | | | . | |_____|___| _|_| |___|_|_|_|___| |_|
Please support Espruino by ordering one of our official boards.
If you have an Espruino board, please read the Quick Start Guide first.
Other documentation of use is:
- The Forum
- Performance Notes
- Implementation Notes
- Build Process Notes
- Building Espruino
- Making your own libraries
- Hardware Debugging Notes
Please see the LICENSE file
Found a Bug?
Please submit bugs with clear steps to reproduce them (ideally with a test case for the
tests directory). Please be aware that we're very busy, so if you report something (especially if it doesn't contain a test or a pull request) it may not be fixed for quite some time.
Check out the page on building Espruino
There are a bunch of tests in the
tests directory. See
tests/README.md for examples on how to run them.
While Espruino can run on other boards, we make no money from them and so cannot afford to test, fix or support the firmware on them. We're dependent on the community.
You can download binaries from http://www.espruino.com/Download (these aren't the latest, but are more likely to work with your board).
If you are a board manufacturer interested in getting your board officially supported, please Contact Us.
- Original Espruino Board - great support.
- Espruino Pico Board - great support.
- Linux - WORKING
- STM32VLDISCOVERY - WORKING - limited memory so some features removed
- STM32F3DISCOVERY - USB BROKEN
- STM32F4DISCOVERY - WORKING
- STM32F401CDISCOVERY - appears WORKING, but very little testing done
- STM32F429IDISCOVERY - WORKING over serial (A9/A10). No USB and no LCD support
- NRF52832 Preview Development Kit - WORKING with limited functionality. Able to interface with Espruino over BLE (send commands from smartphone or computer) or serial as normal (send commands from chrome IDE or terminal).
- HY STM32 2.4" - WORKING
- HY STM32 2.8" - WORKING - limited memory so some features removed
- HY STM32 3.2" - WORKING
- Olimexino STM32 / Leaflabs Maple - WORKING - limited memory so some features removed
- Carambola - WORKING - GPIO via filesystem (no I2C)
- Raspberry Pi - WORKING - GPIO via filesystem or wiringPi (no I2C)
- Sony SmartWatch - NOT WORKING - USB VCP support for F2 still needed
- MBed platforms - have not worked for a while - full hardware wrapper still required
- LC-TECH STM32F103RBT6 - WORKING, but with some issues (LED inverted logic, BTN needs pullup to work)
- ST NUCLEO-F401RE - WORKING
- ST NUCLEO-F411RE - WORKING
- ESP8266 - Beta - Reasonably stable, but expect to find issues
- NRF51/52 - Alpha - very early in development (GPIO, but not peripherals, no sleep or save)
- Arduino (AVR) - NOT POSSIBLE due to the Hardward architecture of AVRs, even though it would fit into an ATMEGA2560. If
avr-gccever gains an easy way to emulate Von Neumann architecture then it might be portable, but for now it isn't.
- Arduino (ARM) - very doable, but no work has been done on this.
Check out the documentation on the build process first - this should clear up a lot of potential questions about the Espruino architecture.
Please see CONTRIBUTING.md for some hints about code style/etc.
You can auto-build documentation for all source files - see doxygen/README.md
Any more questions? ask on the forum.
Porting to new devices
Currently there are a bunch of different files to modify. Eventually the plan is to fit everything into
boards/BOARDNAME.py and to auto-generate the rest of the config files.
- Most build options handled in
- Extra libraries like USB/LCD/filesystem in
boards/*.pyfiles describe the CPU, available pins, and connections - so the relevant linker script, headers + docs can be created
boards/pins/*.csvare copies of the 'pin definitions' table in the chip's datasheet. They are read in for STM32 chips by the
boards/*.pyfiles, but they are not required - see
boards/MICROBIT.pyfor an example.
- Processor-specific code in
- Processor-specific libs (like the SDK) in
src/jshardware.his effectively a simple abstraction layer for SPI/I2C/etc, which should be implemented in
- Create library functions (see examples in other jswrap files, also the comments in
See libs/README.md for a short tutorial on how to add your own libraries.
Using Espruino in your Projects
If you're using Espruino for your own personal projects - go ahead, we hope you have fun - and please let us know what you do with it on http://www.espruino.com/Forum!
If you're planning on selling the Espruino software on your own board, please:
- Let us know, we might be able to help.
- Read the terms of the MPLv2 Licence that Espruino is distributed under, and make sure you comply with it
- MPLv2 dictates that any files that you modify must be made available in source form. New files that you create don't need to be made available (although we'd encourage it!)
- You won't be able to call your board an 'Espruino' board unless it's agreed with us (we own the trademark)
- You must explain clearly in your documentation that your device uses Espruino internally
- Please don't fork Espruino - improvements get very hard to share, and in the long run everyone loses.
- Please give something back to the project - be it code improvements, documentation or support.
We spend a lot of time supporting Espruino on the forums, but can only do so because we make money from the sales of Espruino boards. If your users request support from us then we have absolutely no obligation to help them. However, we'll be a lot more motivated if you're actively helping to improve Espruino for all its users (not just your own).