NanoFramework.M5Stack
:package: Board support package for M5Stack, M5StickC and M5StickCPlus for .NET nanoFramework
Install / Use
/learn @nanoframework/NanoFramework.M5StackREADME

Welcome to the .NET nanoFramework M5Stack Libraries repository
Build status
| Component | Build Status | NuGet Package |
|:-|---|---|
| nanoFramework.M5Core | |
|
| nanoFramework.M5Stick |
|
|
| nanoFramework.M5StickCPlus |
|
|
| nanoFramework.M5Core2 |
|
|
| nanoFramework.Fire |
|
|
| nanoFramework.AtomLite |
|
|
| nanoFramework.AtomMatrix |
|
|
| nanoFramework.Tough |
|
|
| nanoFramework.CoreInk |
|
|
Usage
These NuGet packages provide a support for M5Stack products:
Note 1: Before trying to add NuGet packages to your projects and/or before flashing the devices (see next section) using MS Visual Studio (VS), open VS > Tools > Options > NuGet Package Manager > Package Sources and make sure that it contains an entry pointing to https://api.nuget.org/v3/index.json, otherwise add it. Note 2: When invoking VS > Project > Manage NuGet Packages make sure that in the Package source drop-down menu (right upper corner) "nuget.org" is selected.
The NuGets bring support for the screens as well and require to be flashed with the proper image (using nanoff dotnet CLI).
On the examples below replace COM3 with the appropriate number of the COM port to which your device is connected. (on Windows you can check this in the Device Manager).
For the M5Core:
nanoff --target M5Core --update --serialport COM3
For the M5StickC:
nanoff --target M5StickC --update --serialport COM3 --baud 115200
For the M5StickCPlus:
nanoff --target M5StickCPlus --update --serialport COM3
For the M5Core2, Tough and Fire:
nanoff --target M5Core2 --update --serialport COM3
For the Atom Lite, Matrix and CoreInk:
nanoff --target ESP32_PICO --update --serialport COM3
Note 3: If the
nanoffcommands fails, make sure you have followed instruction from Note 1 above.
Once you have the NuGets, you can then enjoy accessing the screen, the accelerometer, get a Grove I2C connecter, add events on the buttons. And you don't even need to think about anything, all is done for you in the most transparent way!
Note 4: All the classes that you'll have access are all using the Lazy pattern to be instantiated including the screen. This have the advantage to use as little memory and setup time as possible.
In the samples below, we'll use either M5Core or M5Stick as examples, they are all working in a very similar way.
Namespaces
Make sure you add the proper namespaces reference to your C# program header e.g. using nanoFramework;
Screen
The only thing you need to do to access the screen is to initialize it (please note that InitializeScreen() it's target specific) e.g.:
For Core:
M5Core.InitializeScreen();
For StickCPlus:
M5StickCPlus.InitializeScreen();
Once you've initialized it, you can access both a Screen static class and a Console static class.
THe Screen one brings primitives to write directly on the screen points or scare of colours as well as writing a text.
For example, you can write a blue square of 10x10 at the position 0, 0 like this:
ushort[] toSend = new ushort[100];
ushort blue = ColorUtility.To16Bpp(Color.Blue);
for (int i = 0; i < toSend.Length; i++)
{
toSend[i] = blue;
}
Screen.Write(0, 0, 10, 10, toSend);
The Console class works in a similar way as the classic System.Console. In order to use it you have to reference it using the fully qualified name of the methods, like this:
nanoFramework.Console.Clear();
// Test the console display
nanoFramework.Console.Write("This is a short text. ");
nanoFramework.Console.ForegroundColor = nanoFramework.Presentation.Media.Color.Red;
nanoFramework.Console.WriteLine("This one displays in red after the previous one and is already at the next line.");
nanoFramework.Console.BackgroundColor = nanoFramework.Presentation.Media.Color.Yellow;
nanoFramework.Console.ForegroundColor = nanoFramework.Presentation.Media.Color.RoyalBlue;
nanoFramework.Console.WriteLine("And this is blue on yellow background");
nanoFramework.Console.ResetColor();
nanoFramework.Console.CursorLeft = 0;
nanoFramework.Console.CursorTop = 8;
nanoFramework.Console.Write("This is white on black again and on 9th line");
Note: You can change the default font as well, you need to provide it as a property
Related Skills
openhue
339.5kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
339.5kElevenLabs text-to-speech with mac-style say UX.
weather
339.5kGet current weather and forecasts via wttr.in or Open-Meteo
tweakcc
1.5kCustomize Claude Code's system prompts, create custom toolsets, input pattern highlighters, themes/thinking verbs/spinners, customize input box & user message styling, support AGENTS.md, unlock private/unreleased features, and much more. Supports both native/npm installs on all platforms.
