nanoFramework.AtomLite 1.1.232

前缀已保留
dotnet add package nanoFramework.AtomLite --version 1.1.232                
NuGet\Install-Package nanoFramework.AtomLite -Version 1.1.232                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.AtomLite" Version="1.1.232" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add nanoFramework.AtomLite --version 1.1.232                
#r "nuget: nanoFramework.AtomLite, 1.1.232"                
#r 指令可用于 F# Interactive 和多语言笔记本。将此复制到交互式工具或脚本的源代码中以引用包。
// Install nanoFramework.AtomLite as a Cake Addin
#addin nuget:?package=nanoFramework.AtomLite&version=1.1.232

// Install nanoFramework.AtomLite as a Cake Tool
#tool nuget:?package=nanoFramework.AtomLite&version=1.1.232                

Reliability Rating #yourfirstpr Discord

nanoFramework logo


欢迎使用 .NET nanoFramework M5Stack 库仓库

构建状态

组件 构建状态 NuGet 包
nanoFramework.M5Core Build Status NuGet
nanoFramework.M5Stick Build Status NuGet
nanoFramework.M5StickCPlus Build Status NuGet
nanoFramework.M5Core2 Build Status NuGet
nanoFramework.Fire Build Status NuGet
nanoFramework.AtomLite Build Status NuGet
nanoFramework.AtomMatrix Build Status NuGet
nanoFramework.Tough Build Status NuGet

用法

这些 NuGet 包为 M5Stack 产品提供支持

注意 1:在尝试将 NuGet 包添加到项目或在使用 MS Visual Studio (VS)刷新设备之前(参见下一节)打开 VS > 工具 > 选项 > NuGet 包管理器 > 包源,确保其中包含指向 https://api.nuget.org/v3/index.json 的条目,如果没有,请添加。注意 2:在调用 VS > 项目 > 管理NuGet包时,确保在包源下拉菜单(右上角)中选择“nuget.org”。

NuGet包也支持屏幕,并需要使用正确的镜像进行烧录(使用nanoff dotnet CLI)。在下面的示例中,将COM3替换为您的设备连接到的COM端口的相应编号。(在Windows中,您可以在设备管理器中检查此信息)。

对于M5Core

nanoff --target M5Core --update --serialport COM3

对于M5StickC

nanoff --target M5StickC --update --serialport COM3 --baud 115200

对于M5StickCPlus

nanoff --target M5StickCPlus --update --serialport COM3

对于M5Core2、Tough和Fire

nanoff --target M5Core2 --update --serialport COM3

对于Atom Lite和Matrix

nanoff --target ESP32_PICO --update --serialport COM3

注意3:如果nanoff命令失败,请确保您已遵循上面的注意1中的说明。

一旦您拥有了NuGet包,您就可以享受访问屏幕、加速度计、获取Grove I2C接头、在按钮上添加事件等。您甚至不必考虑任何事情,所有的事情都为您在最透明的方式下完成!

注意4:所有您可以访问的类都使用Lazy模式进行实例化,包括屏幕。这的好处是可以尽可能少地使用内存和设置时间。

在下面的示例中,我们将使用M5Core或M5Stick作为示例,它们都以非常相似的方式运行。

命名空间

请确保您将正确的命名空间引用添加到您的C#程序头中,例如:using nanoFramework;

屏幕

要访问屏幕,您需要对其进行初始化(请注意,InitializeScreen()是特定目标的)。

对于Core

M5Core.InitializeScreen();

对于StickCPlus

M5StickCPlus.InitializeScreen();

初始化后,您可以访问Screen静态类和Console静态类。

Screen类提供直接在屏幕上绘制点或颜色以及写入文本的原语。

例如,您可以像这样在位置0, 0上绘制一个10x10的蓝色方块

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);

Console类与经典的System.Console类似。要使用它,您必须使用方法的完全限定名称引用它,如下所示

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");

注意:您还可以更改默认字体,您需要将其作为属性提供。光标位置使用最大的字符进行计算。

M5Core2和Fire具有PSRAM,因此您也可以获取全屏缓冲区。请参阅图形示例以了解您可以使用它的所有内容。

如果您对任何M5Stack有大量的图形需求,您可以调整请求的内存。虽然M5Core2和Fire都有PSRAM,可以容纳非常大的数量,如2Mb或更多,但那些没有的只能达到几个Kb或几十Kb。

// This will allocate 2 Mb of memory for the graphics
M5Core2.InitializeScreen(2 * 1024 * 1024);

按钮

除了电源按钮之外的主要按钮都对外公开。

在M5Stack和Fire中它们分别称为ButtonLeftButtonCenterButtonRight。您还可以访问事件。例如

M5Stack.ButtonLeft.Press += (sender, e) =>
{
    Console.ForegroundColor = Color.Yellow;
    Console.CursorLeft = 0;
    Console.CursorTop = 0;
    Console.Write($"Left Pressed  ");
};

在M5StickC/CPlus中它们分别称为ButtonM5ButtonRight。您可以获取访问按钮的状态、事件和所需的一切。例如

while (!M5StickC.ButtonRight.IsPressed)
{
    Thread.Sleep(10);
}

M5StickC.M5Button.IsHoldingEnabled = true;
M5StickC.M5Button.Holding += (sender, e) =>
{
    Console.Write("M5 button hold long.");
};

在Atom Lite/Matrix中它称为Button。您可以获取访问按钮的状态、事件和所需的一切。例如

AtomLite.Button.Press +=> (sender, e)
{
    var color = AtomLite.NeoPixel.GetColor();
    if(color.R > 0)
    {
        AtomLite.NeoPixel.SetColor(Color.FromArgb(255, 0, 255, 0));
    }
    else if (color.G > 0)
    {
        AtomLite.NeoPixel.SetColor(Color.FromArgb(255, 0, 0, 255));
    }
    else
    {
        AtomLite.NeoPixel.SetColor(Color.FromArgb(255, 255, 0, 0));
    }
};

注意:M5Core2具有触摸屏,按钮是“虚拟”的。请参阅下一节了解如何使用它们。

M5Core2触控面板和按钮

触摸面板与屏幕一起提供。两个都同时初始化和激活。要获取触摸事件,您必须注册到TouchEvent事件

M5Core2.InitializeScreen();
M5Core2.TouchEvent += TouchEventCallback;

以下是一个示例,说明如何检查您是否在按钮上以及获取各种元素

void TouchEventCallback(object sender, TouchEventArgs e)
{
    const string StrLB = "LEFT BUTTON PRESSED  ";
    const string StrMB = "MIDDLE BUTTON PRESSED  ";
    const string StrRB = "RIGHT BUTTON PRESSED  ";
    const string StrXY1 = "TOUCHED at X= ";
    const string StrXY2 = ",Y= ";
    const string StrID = ",Id= ";
    const string StrDoubleTouch = "Double touch. ";
    const string StrMove = "Moving... ";
    const string StrLiftUp = "Lift up. ";

    Debug.WriteLine($"Touch Panel Event Received Category= {e.EventCategory} Subcategory= {e.TouchEventCategory}");
    Console.CursorLeft = 0;
    Console.CursorTop = 0;

    Debug.WriteLine(StrXY1 + e.X + StrXY2 + e.Y + StrID + e.Id);
    Console.WriteLine(StrXY1 + e.X + StrXY2 + e.Y + StrID + e.Id + "  ");

    if ((e.TouchEventCategory & TouchEventCategory.LeftButton) == TouchEventCategory.LeftButton)
    {
        Debug.WriteLine(StrLB);
        Console.WriteLine(StrLB);
    }
    else if ((e.TouchEventCategory & TouchEventCategory.MiddleButton) == TouchEventCategory.MiddleButton)
    {
        Debug.WriteLine(StrMB);
        Console.WriteLine(StrMB);
    }
    else if ((e.TouchEventCategory & TouchEventCategory.RightButton) == TouchEventCategory.RightButton)
    {
        Debug.WriteLine(StrRB);
        Console.WriteLine(StrRB);
    }

    if ((e.TouchEventCategory & TouchEventCategory.Moving) == TouchEventCategory.Moving)
    {
        Debug.WriteLine(StrMove);
        Console.Write(StrMove);
    }

    if ((e.TouchEventCategory & TouchEventCategory.LiftUp) == TouchEventCategory.LiftUp)
    {
        Debug.WriteLine(StrLiftUp);
        Console.Write(StrLiftUp);
    }

    if ((e.TouchEventCategory & TouchEventCategory.DoubleTouch) == TouchEventCategory.DoubleTouch)
    {
        Debug.WriteLine(StrDoubleTouch);
        Console.Write(StrDoubleTouch);
    }

    Console.WriteLine("                                    ");
    Console.WriteLine("                                    ");
    Console.WriteLine("                                    ");
}

《TouchEventCategory》枚举是一个标志,可以组合按钮和状态。按钮互斥,所以只能有左键、中键或右键,状态为MovingLiftUp。当接触点已建立且触摸点正在移动时,将发生Moving。当接触释放时,将出现LiftUp

DoubleTouch是特定的,它告诉你有另一个接触点正在发生。每个接触点都会接收到此标志。事件将触发2次,每次触发一次。在双触模式下,你可能得不到第二个点的LiftUp事件,但你会得到因为双触标志消失和第一个点最终的LiftUp而发生的改变。

电源管理

M5Core和M5StickC/CPlus公开了它们的电源管理元素。除非你知道自己在做什么,否则不建议更改任何默认值。

有关M5StickC/CPlus中使用的AXP192的详细信息,请参阅AXP192;M5Core2和IP5306用于M5Core和Fire。

加速度计和陀螺仪

你可以这样访问加速度计和陀螺仪

var ag = M5Core.AccelerometerGyroscope;
// Do not move the M5Core/M5Stick during the calibration
ag.Calibrate(100);
var acc = ag.GetAccelerometer();
var gyr = ag.GetGyroscope();
Debug.WriteLine($"Accelerometer data x:{acc.X} y:{acc.Y} z:{acc.Z}");
Debug.WriteLine($"Gyroscope data x:{gyr.X} y:{gyr.Y} z:{gyr.Z}\n");

有关此传感器的更详细用法,请参阅MPU6886文档

磁力计

M5Core有一个磁力计,你同样可以访问它

var mag = M5Core.Magnetometer;
// It is more than strongly recommended to calibrate the magnetometer.
// Move the M5Core in all directions to have a proper calibration.
mag.CalibrateMagnetometer(100);
var magVal = mag.ReadMagnetometer();
Console.WriteLine($"x={magVal.X:N2}   ");
Console.WriteLine($"y={magVal.Y:N2}   ");
Console.WriteLine($"Z={magVal.Z:N2}   ");
var headDir = Math.Atan2(magVal.X, magVal.Y) * 180.0 / Math.PI;
Console.WriteLine($"h={headDir:N2}  ");

串行端口

M5Core和M5Core2可提供一个串行端口,只需像这样获取它

// You can access any of the Serial Port feature
M5Core.SerialPort.Open(115200);
// Do anything else you need
M5Core.SerialPort.Close();

有关更多信息,请参阅SerialPort文档

ADC通道

M5Core、M5Core2、Fire和Atom Lite/Matrix上预设置了ADC通道,可以像这样访问它们

// This will give you the ADC1 channel 7 which is on pin 35 of M5Core
AdcChannel myChannel = M5Core.GetAdcGpio(35);

请参阅M5Stack文档以获取ADC通道和引脚的映射。

I2C设备/Grove

你可以像这样获取I2cDevice/Grove

// In this example, the I2C address of the device is 0x42:
I2cDevice myDevice = M5Core.GetGrove(0x42);
// replacing GetGrove by GetI2cDevice will have the same impact

SPI设备

M5Core、M5Core2、Fire和Atom Lite/Matrix还提供SpiDevice

// In this case GPIO5 will be used as chip select:
SpiDevice mySpi = M5Core.GetSpiDevice(5);

GPIO控制器

与之前类似,你可以在M5Core、M5Core2、Fire和M5StickC/CPlus上获取GpioController

// This will open the GPIO 36 as output
var pin5 = M5StickC.GpioController.OpenPin(36, PinMode.Output);

DAC

M5Core、M5Core2、Fire和Atom Lite/Matrix公开了2个DAC,你可以通过Dac1Dac2属性访问它们。有关更多信息,请参阅DAC文档

I2S(声音)

在M5Core2上,通过安装包nanoFramework.System.Device.I2s可以使用I2S播放WAV文件。要在M5Core2上播放WAV文件,请使用以下初始化

int bckPin = 12;
int dataPin = 2;
int wsPin = 0;
I2sWavPlayer.Bus bus = I2sWavPlayer.Bus.One;
var audioFile = "D:\\Variation-CLJ013901.wav";
using (var player = new I2sWavPlayer(bus, audioFile, bckPin, dataPin, wsPin))
{
    M5Core2.Power.Gpio2Value = PinValue.High; //speaker power on
    player.Play();
    M5Core2.Power.Gpio2Value = PinValue.Low; //speaker power off
}

LED

M5StickC/CPlus公开了一个LED。您可以通过Led属性访问它

// This will toggle the led:
M5StickC.Led.Toggle();

红外LED

M5StickC/CPlus和Atom Lite/Matrix公开了一个红外LED。您可以通过InfraredLed属性来访问它。这将为您提供TransmitterChannel。查看示例包以了解如何使用它。

AtomLite上的NeoPixel

Atom Lite公开了一个rgb LED。您可以通过NeoPixel属性来访问它

// This will set NeoPixel to green:
AtomLite.NeoPixel.Image.SetPixel(0, 0, Color.Green);
AtomLite.NeoPixel.Update();

AtomMatrix上的RGB LED矩阵和Fire上的LED条

Atom Matrix有一个25个RGB LED的矩阵。数组中LED的位置遵循矩阵中的放置,其中0是位于左上角的LED,逐渐向右、向下增长。

您可以通过AtomMatrix上的LedMatrix属性来访问它,如下所示

// This will set the RGB LED at position 2, 2 to green
AtomMatrix.LedMatrix.Image.SetPixel(2, 2, Color.Green);

类似地,您可以在Fire上访问LedBar属性

// This will set the second RGB LED to green
Fire.LedBar.Image.SetPixel(2, 0, Color.Green);

更新完您想要更改的所有LED后,请像这样将更新的刷新到LED上

// This will update all RGB LED 
AtomMatrix.LedMatrix.Update();

在Fire上的做法与此相同

// This will update all RGB LED 
Fire.LedBar.Update();

SD卡

M5Core、M5Core2、Fire和Tough都配备了SD卡读卡器。您可以直接访问它,例如。

SDCard sdCard = M5Core.SDCard;
try
{
    // This will actually mount the SD Card, if no card, you will get an exception
    sdCard.Mount();
    // Mounting properly a card can take a bit of time, so wait for the card to be mounted
    // Note: it is recommended to use a cancellation token or equivalent to make sure you are not in a dead loop
    while (!sdCard.IsMounted)
    {
        Thread.Sleep(10);
    }

    // You can now access the files on the SD Card
    // As an example you can read a json file and deserialize it
    // D: is the drive from the SD Card
    const string ParamFile = "D:\\params.json";
    using FileStream fs = new FileStream(ParamFile, FileMode.Open, FileAccess.Read);
    // In this case, you will need to have a class called Configuration and a properly serialized file
    Configuration config = (Configuration)JsonConvert.DeserializeObject(fs, typeof(Configuration));
}
catch
{
    // Something wrong happened
}

有关如何使用文件系统的更多示例,请参阅此处

反馈和文档

有关文档、提供反馈、报告问题以及了解如何贡献,请参阅主仓库

加入我们的Discord社区这里

致谢

此项目的贡献者名单可在CONTRIBUTORS中找到。

许可证

nanoFramework类库采用MIT许可证进行许可。

行为准则

本项目采用贡献者誓言中定义的行为准则,以明确我们社区中期望的行为。有关更多信息,请参阅.NET Foundation行为准则

.NET Foundation

此项目得到.NET Foundation的支持。

产品 兼容和附加的 computed 目标框架版本。
.NET Framework net 是兼容的。
兼容的目标框架(s)
包含的目标框架(s)(在包中)
了解有关目标框架.NET Standard的更多信息。

NuGet包

此包未被任何NuGet包使用。

GitHub仓库 (1)

显示依赖nanoFramework.AtomLite的Top 1个最受欢迎的GitHub仓库

仓库 星标
nanoframework/Samples
🍬 nanoFramework团队在测试、概念证明和其他探索性活动中使用的代码示例
版本 下载 最后更新
1.1.232 41 7/31/2024
1.1.229 85 7/19/2024
1.1.228 73 7/17/2024
1.1.227 66 7/12/2024
1.1.225 94 6/28/2024
1.1.223 97 6/19/2024
1.1.220 109 5/31/2024
1.1.217 122 5/15/2024
1.1.215 84 5/10/2024
1.1.213 151 4/17/2024
1.1.211 85 4/15/2024
1.1.209 114 4/5/2024
1.1.207 106 3/27/2024
1.1.203 146 2/28/2024
1.1.201 165 1/31/2024
1.1.199 101 1/26/2024
1.1.197 100 1/24/2024
1.1.187 265 11/17/2023
1.1.185 127 11/14/2023
1.1.183 114 11/9/2023
1.1.180 109 11/8/2023
1.1.177 183 10/11/2023
1.1.175 149 9/29/2023
1.1.171 157 9/8/2023
1.1.169 140 9/6/2023
1.1.167 163 8/18/2023
1.1.163 241 8/2/2023
1.1.161 133 7/28/2023
1.1.157 153 7/19/2023
1.1.155 146 7/14/2023
1.1.152 190 6/21/2023
1.1.150 144 6/14/2023
1.1.148 170 6/7/2023
1.1.146 165 5/31/2023
1.1.144 160 5/24/2023
1.1.142 184 5/17/2023
1.1.139 185 5/11/2023
1.1.137 180 5/5/2023
1.1.135 256 4/5/2023
1.1.133 235 3/29/2023
1.1.131 245 3/24/2023
1.1.128 257 3/17/2023
1.1.125 251 3/16/2023
1.1.123 219 3/13/2023
1.1.121 278 3/9/2023
1.1.119 263 2/27/2023
1.1.117 253 2/27/2023
1.1.115 261 2/22/2023
1.1.113 261 2/20/2023
1.1.111 259 2/16/2023
1.1.106 346 1/10/2023
1.1.104 298 1/9/2023
1.1.102 305 1/6/2023
1.1.100 318 1/6/2023
1.1.98 355 1/5/2023
1.1.96 320 12/29/2022
1.1.90 404 11/15/2022
1.1.88 361 11/14/2022
1.1.86 389 11/5/2022
1.1.84 401 11/5/2022
1.1.82 383 11/4/2022
1.1.80 389 11/3/2022
1.1.78 384 11/1/2022
1.1.76 416 10/27/2022
1.1.70 451 10/13/2022
1.1.68 420 10/12/2022
1.1.64 383 10/7/2022
1.1.62 396 10/7/2022
1.1.58 479 9/23/2022
1.1.55 466 9/23/2022
1.1.53 440 9/22/2022
1.1.47 419 9/21/2022
1.1.45 447 9/16/2022
1.1.42 455 9/15/2022
1.1.40 460 9/8/2022
1.1.38 450 9/7/2022
1.1.36 439 9/3/2022
1.1.34 464 8/15/2022
1.1.32 455 8/6/2022
1.1.30 442 8/5/2022
1.1.28 447 8/4/2022
1.1.26 458 8/3/2022
1.1.24 442 8/3/2022
1.1.22 435 8/2/2022
1.1.20 464 7/30/2022
1.1.18 468 7/26/2022
1.1.16 443 7/24/2022
1.1.14 438 7/23/2022
1.1.12 469 7/13/2022
1.1.7 510 7/7/2022
1.1.5 473 7/7/2022
1.1.3 473 7/6/2022
1.1.1 458 7/5/2022
1.0.107.13280 482 7/1/2022
1.0.105.49254 513 6/30/2022
1.0.102.851 473 6/28/2022
1.0.100.17145 472 6/28/2022
1.0.98.48733 495 6/28/2022
1.0.96.40373 485 6/26/2022
1.0.92.59206 478 6/24/2022
1.0.90.38187 455 6/16/2022
1.0.88.50207 437 6/15/2022
1.0.86.52668 448 6/14/2022
1.0.83.14512 442 6/13/2022
1.0.81.41619 467 6/8/2022
1.0.79.53990 462 6/3/2022
1.0.77.26764 448 6/3/2022
1.0.75.37268 442 6/1/2022
1.0.72.43325 439 5/31/2022
1.0.70.15497 461 5/31/2022
1.0.68.55953 467 5/31/2022
1.0.66.24331 471 5/27/2022
1.0.64.6330 464 5/26/2022
1.0.62.28047 419 5/26/2022
1.0.60.49583 434 5/25/2022
1.0.58.20063 429 5/24/2022
1.0.56.35800 441 5/23/2022
1.0.54.60782 457 5/20/2022
1.0.51.48271 475 5/12/2022
1.0.49.30985 490 5/6/2022
1.0.46 477 5/5/2022
1.0.42 515 4/26/2022
1.0.40 468 4/25/2022
1.0.38 474 4/24/2022
1.0.36 491 4/23/2022
1.0.34 502 4/22/2022
1.0.32 469 4/22/2022
1.0.30 468 4/21/2022
1.0.26 471 4/21/2022
1.0.24 469 4/20/2022
1.0.22 484 4/19/2022
1.0.20 464 4/18/2022
1.0.18 463 4/17/2022
1.0.16 478 4/16/2022
1.0.14 465 4/15/2022
1.0.12 465 4/13/2022
1.0.10 474 4/6/2022
1.0.8 473 4/4/2022
1.0.6 489 4/3/2022
1.0.4 471 3/31/2022
1.0.2 442 3/31/2022
1.0.1-preview.68 121 3/30/2022
1.0.1-preview.67 129 3/25/2022
1.0.1-preview.66 116 3/25/2022
1.0.1-preview.65 120 3/25/2022
1.0.1-preview.64 123 3/23/2022
1.0.1-preview.63 99 3/22/2022
1.0.1-preview.62 108 3/21/2022
1.0.1-preview.61 115 3/20/2022
1.0.1-preview.60 112 3/19/2022
1.0.1-preview.58 116 3/16/2022
1.0.1-preview.57 124 3/16/2022
1.0.1-preview.56 115 3/14/2022
1.0.1-preview.55 121 3/14/2022
1.0.1-preview.54 113 3/11/2022
1.0.1-preview.53 110 3/9/2022
1.0.1-preview.52 124 3/8/2022
1.0.1-preview.51 121 3/7/2022
1.0.1-preview.50 116 3/4/2022
1.0.1-preview.49 119 3/3/2022
1.0.1-preview.48 119 2/27/2022
1.0.1-preview.47 112 2/26/2022
1.0.1-preview.46 112 2/25/2022
1.0.1-preview.45 121 2/18/2022
1.0.1-preview.43 133 2/16/2022
1.0.1-preview.42 124 2/12/2022
1.0.1-preview.41 112 2/10/2022
1.0.1-preview.40 116 2/9/2022
1.0.1-preview.39 120 2/8/2022
1.0.1-preview.38 127 2/6/2022
1.0.1-preview.37 125 2/5/2022
1.0.1-preview.36 134 2/4/2022
1.0.1-preview.35 118 2/3/2022
1.0.1-preview.34 135 1/31/2022