MonoBrick EV3 Firmware

The MonoBrick EV3 firmware is a firmware replacement that allows you to program and debug the EV3 brick using the open source .Net framework called Mono. This let’s you program the EV3 in .Net compatible languages such as C#, F# and IronPython. Since the firmware fits on a single SD card you simply boot the MonoBrick firmware directly from the SD card without replacing the standard firmware.As programs are executed on the Mono Framework programs can be written/compiled on Windows, Linux or Mac OS using either Mono Develop or Microsoft Visual Studio. Currently the firmware is in Alpha release but all the features listed below have been implemented.

  • Support for UART, I2C and analog sensors
  • Support for all LEGO sensors that comes with the Retail and Educational sets
  • Support for a number of HiTechnic sensors
  • Motor support including speed, timer and power profiles
  • Motor synchronisation
  • Vehicle support
  • Draw graphics on the LCD
  • Write text to LCD including support for custom fonts
  • LCD Screenshot dump
  • Button support
  • Button LED support
  • WiFi tested with the NetGear WNA1100 and the Edimax EW-7811UN dongles
  • and more..

Getting started

To use the MonoBrick EV3 firmware you need to create a bootable MonoBrick firmware SD card. Please use this guide if you are on Windows and this guide if you are on Mac OS or Linux. Once you have the MonoBrick firmware up and running please use the MonoBrick firmware programming guide to see how to upload, execute and debug C# programs on the EV3 brick.

Sample Program

Below the sample program for the color sensor is shown. It works with both the NXT and EV3 color sensor and let’s you chose between the different color modes and print the sensor value to the LCD.

using System;
using MonoBrickFirmware;
using MonoBrickFirmware.Movement;
using MonoBrickFirmware.Display;
using MonoBrickFirmware.Sensors;
using MonoBrickFirmware.UserInput;
using System.Threading;
namespace ColorSensorExample
{
class MainClass
{
  public static void Main (string[] args)
  {
        EventWaitHandle stopped = new ManualResetEvent(false);
        ColorMode[] modes = {ColorMode.Color, ColorMode.Reflection, 
                             ColorMode.Ambient, ColorMode.Blue};
        int modeIdx = 0;
	    var sensor = new ColorSensor(SensorPort.In1);
	    ButtonEvents buts = new ButtonEvents ();
		
	    buts.EscapePressed += () => { 
	        stopped.Set();
	    };
        buts.UpPressed += () => { 
	        LcdConsole.WriteLine("Sensor value: " + sensor.ReadAsString());
	    };
	    buts.DownPressed += () => { 
			LcdConsole.WriteLine("Raw sensor value: " + sensor.ReadRaw());
		};
		buts.EnterPressed += () => { 
			modeIdx = (modeIdx+1)%modes.Length;
			sensor.Mode = modes[modeIdx];
			LcdConsole.WriteLine("Sensor mode is: " + modes[modeIdx]);
		};  
		stopped.WaitOne();
	}
  }
}

Support and documentation

Documentation can be found here. The MonoBrick EV3 firmware has its own forum where you can find answers and questions related to the EV3 firmware.

Source code and contributors

The MonoBrick firmware is written and maintained by Lars Jeppesen and Anders Søborg. The image and the MonoBrick firmware dll are open source and can be found at these Github repositories. Here you will also find source code for the samples found on the firmware image.

Acknowledgment

The MonoBrick firmware image is based on the image created by the leJOS Team. Without their hard work the MonoBrick firmware would never have seen the light of day… Thank you!

Leave a Reply

Login with:

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Download DLL

Screenshots

Make a donation