nanoFramework.Fire 1.1.232

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

// Install nanoFramework.Fire as a Cake Tool
#tool nuget:?package=nanoFramework.Fire&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并且可以容纳非常大的空间,比如2 Mb或更多,而没有PSRAM的无法超过几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是一个特例,它让您知道有一个接触点正在发生。每个接触点都将收到此标志。事件将触发两次,一次每个点。在双击触摸上下文中,您可能无法获得第二个点的LiftUp事件,但您将获得双击触摸标志的消失以及在第一个点上的最终LiftUp的变化。

电源管理

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

请参阅M5StickC/CPlus中使用的AXP192的详细示例;M5Core2和用于M5Core和Fire的IP5306

加速度计和陀螺仪

您可以这样获取加速度计和陀螺仪

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

请参阅串行端口文档以获取更多信息。

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基金会行为准则

.NET基金会

本项目由.NET基金会支持。

产品 兼容和额外的计算目标框架版本。
.NET Framework net 兼容。
兼容的目标框架
包含的目标框架(在包中)
了解有关目标框架.NET标准的更多信息。

NuGet包

此包未用于任何NuGet包。

GitHub存储库

此包未用于任何流行的GitHub存储库。

版本 下载 最后更新时间
1.1.232 37 7/31/2024
1.1.229 78 7/19/2024
1.1.228 66 7/17/2024
1.1.227 73 7/12/2024
1.1.225 79 6/28/2024
1.1.223 78 6/19/2024
1.1.220 87 5/31/2024
1.1.217 94 5/15/2024
1.1.215 97 5/10/2024
1.1.213 91 4/17/2024
1.1.211 82 4/15/2024
1.1.209 97 4/5/2024
1.1.207 99 3/27/2024
1.1.203 97 2/28/2024
1.1.201 109 1/31/2024
1.1.199 87 1/26/2024
1.1.197 87 1/24/2024
1.1.187 192 11/17/2023
1.1.185 95 11/14/2023
1.1.183 93 11/9/2023
1.1.180 96 11/8/2023
1.1.177 125 10/11/2023
1.1.175 115 9/29/2023
1.1.171 120 9/8/2023
1.1.169 117 9/6/2023
1.1.167 130 8/18/2023
1.1.163 134 8/2/2023
1.1.161 118 7/28/2023
1.1.157 139 7/19/2023
1.1.155 134 7/14/2023
1.1.152 116 6/21/2023
1.1.150 114 6/14/2023
1.1.148 130 6/7/2023
1.1.146 134 5/31/2023
1.1.144 136 5/24/2023
1.1.142 140 5/17/2023
1.1.139 134 5/11/2023
1.1.137 138 5/5/2023
1.1.135 188 4/5/2023
1.1.133 206 3/29/2023
1.1.131 226 3/24/2023
1.1.128 230 3/17/2023
1.1.125 207 3/16/2023
1.1.123 207 3/13/2023
1.1.121 245 3/9/2023
1.1.119 258 2/27/2023
1.1.117 232 2/27/2023
1.1.115 240 2/22/2023
1.1.113 260 2/20/2023
1.1.111 261 2/16/2023
1.1.106 297 1/10/2023
1.1.104 308 1/9/2023
1.1.102 291 1/6/2023
1.1.100 296 1/6/2023
1.1.98 312 1/5/2023
1.1.96 295 12/29/2022
1.1.90 348 11/15/2022
1.1.88 346 11/14/2022
1.1.86 365 11/5/2022
1.1.84 377 11/5/2022
1.1.82 349 11/4/2022
1.1.80 338 11/3/2022
1.1.78 345 11/1/2022
1.1.76 368 10/27/2022
1.1.70 399 10/13/2022
1.1.68 405 10/12/2022
1.1.64 382 10/7/2022
1.1.62 380 10/7/2022
1.1.58 448 9/23/2022
1.1.55 434 9/23/2022
1.1.53 438 9/22/2022
1.1.47 416 9/21/2022
1.1.45 435 9/16/2022
1.1.42 431 9/15/2022
1.1.40 426 9/8/2022
1.1.38 401 9/7/2022
1.1.36 407 9/3/2022
1.1.34 421 8/15/2022
1.1.32 426 8/6/2022
1.1.30 416 8/5/2022
1.1.28 403 8/4/2022
1.1.26 410 8/3/2022
1.1.24 421 8/3/2022
1.1.22 410 8/2/2022
1.1.20 415 7/30/2022
1.1.18 411 7/26/2022
1.1.16 410 7/24/2022
1.1.14 411 7/23/2022
1.1.12 415 7/13/2022
1.1.7 424 7/7/2022
1.1.5 480 7/7/2022
1.1.3 463 7/6/2022
1.1.1 423 7/5/2022
1.0.107.13280 423 7/1/2022
1.0.105.49254 434 6/30/2022
1.0.102.851 429 6/28/2022
1.0.100.17145 432 6/28/2022
1.0.98.48733 455 6/28/2022
1.0.96.40373 441 6/26/2022
1.0.92.59206 452 6/24/2022
1.0.90.38187 427 6/16/2022
1.0.88.50207 419 6/15/2022
1.0.86.52668 399 6/14/2022
1.0.83.14512 419 6/13/2022
1.0.81.41619 423 6/8/2022
1.0.79.53990 435 6/3/2022
1.0.77.26764 419 6/3/2022
1.0.75.37268 426 6/1/2022
1.0.72.43325 422 5/31/2022
1.0.70.15497 418 5/31/2022
1.0.68.55953 440 5/31/2022
1.0.66.24331 439 5/27/2022
1.0.64.6330 425 5/26/2022
1.0.62.28047 416 5/26/2022
1.0.60.49583 403 5/25/2022
1.0.58.20063 444 5/24/2022
1.0.56.35800 416 5/23/2022
1.0.54.60782 414 5/20/2022
1.0.51.48271 445 5/12/2022
1.0.49.30985 435 5/6/2022
1.0.46 444 5/5/2022
1.0.42 464 4/26/2022
1.0.40 449 4/25/2022
1.0.38 458 4/24/2022
1.0.36 488 4/23/2022
1.0.34 471 4/22/2022
1.0.32 435 4/22/2022
1.0.30 431 4/21/2022
1.0.26 467 4/21/2022
1.0.24 445 4/20/2022
1.0.22 423 4/19/2022
1.0.20 433 4/18/2022
1.0.18 433 4/17/2022
1.0.16 436 4/16/2022
1.0.14 454 4/15/2022
1.0.12 457 4/13/2022
1.0.10 432 4/6/2022
1.0.8 430 4/4/2022
1.0.6 429 4/3/2022
1.0.4 430 3/31/2022
1.0.2 139 3/31/2022
1.0.1-preview.68 112 3/30/2022
1.0.1-preview.67 131 3/25/2022
1.0.1-preview.66 122 3/25/2022
1.0.1-preview.65 115 3/25/2022
1.0.1-preview.64 118 3/23/2022
1.0.1-preview.63 107 3/22/2022
1.0.1-preview.62 112 3/21/2022
1.0.1-preview.61 120 3/20/2022
1.0.1-preview.60 121 3/19/2022
1.0.1-preview.58 124 3/16/2022
1.0.1-preview.57 123 3/16/2022
1.0.1-preview.56 127 3/14/2022