nanoFramework.M5Core2 1.1.232

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

// Install nanoFramework.M5Core2 as a Cake Tool
#tool nuget:?package=nanoFramework.M5Core2&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 枚举是一个标记,可以组合按钮和状态。按钮是互斥的,因此您只能有左键、中键或右键,状态有 MovingLiftUpMoving 发生在已经建立接触且触摸点在移动时。当接触被释放时会出现 LiftUp

DoubleTouch 是一个特定类型,它会通知您有另一个接触点发生。每个接触点都会接收到此标记。该事件将触发2次,每次为一个点。在双触控上下文中,您可能无法获得第二个点的 LiftUp 事件,但您将获得与双触控标记消失有关的变更以及第一个点的最终 LiftUp

电源管理

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

有关 M5StickC/CPlus 中使用的 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();

有关更多信息,请参阅 串行端口文档

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支持。

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

NuGet包

此包不用于任何NuGet包。

GitHub仓库 (1)

显示依赖nanoFramework.M5Core2的最受欢迎的GitHub仓库前1名。

仓库 星星
nanoframework/nanoFramework.IoT.Device
📦 本仓库包含各种传感器、芯片、显示器、帽子以及驱动程序的 .NET nanoFramework 实现
版本 下载 最后更新
1.1.232 87 7/31/2024
1.1.229 98 7/19/2024
1.1.228 75 7/17/2024
1.1.227 76 7/12/2024
1.1.225 143 6/28/2024
1.1.223 111 6/19/2024
1.1.220 148 5/31/2024
1.1.217 174 5/15/2024
1.1.215 103 5/10/2024
1.1.213 188 4/17/2024
1.1.211 109 4/15/2024
1.1.209 113 4/5/2024
1.1.207 139 3/27/2024
1.1.203 236 2/28/2024
1.1.201 220 1/31/2024
1.1.199 102 1/26/2024
1.1.197 103 1/24/2024
1.1.187 481 11/17/2023
1.1.185 155 11/14/2023
1.1.183 170 11/9/2023
1.1.180 132 11/8/2023
1.1.177 360 10/11/2023
1.1.175 208 9/29/2023
1.1.171 241 9/8/2023
1.1.169 162 9/6/2023
1.1.167 262 8/18/2023
1.1.163 385 8/2/2023
1.1.161 173 7/28/2023
1.1.157 228 7/19/2023
1.1.155 184 7/14/2023
1.1.152 430 6/21/2023
1.1.150 224 6/14/2023
1.1.148 192 6/7/2023
1.1.146 238 5/31/2023
1.1.144 354 5/24/2023
1.1.142 198 5/17/2023
1.1.139 204 5/11/2023
1.1.137 204 5/5/2023
1.1.135 339 4/5/2023
1.1.133 269 3/29/2023
1.1.131 227 3/24/2023
1.1.128 265 3/17/2023
1.1.125 277 3/16/2023
1.1.123 275 3/13/2023
1.1.121 456 3/9/2023
1.1.119 493 2/27/2023
1.1.117 272 2/27/2023
1.1.115 271 2/22/2023
1.1.113 292 2/20/2023
1.1.111 270 2/16/2023
1.1.106 458 1/10/2023
1.1.104 315 1/9/2023
1.1.102 324 1/6/2023
1.1.100 326 1/6/2023
1.1.98 330 1/5/2023
1.1.96 552 12/29/2022
1.1.90 556 11/15/2022
1.1.88 374 11/14/2022
1.1.86 415 11/5/2022
1.1.84 375 11/5/2022
1.1.82 386 11/4/2022
1.1.80 359 11/3/2022
1.1.78 362 11/1/2022
1.1.76 409 10/27/2022
1.1.70 514 10/13/2022
1.1.68 420 10/12/2022
1.1.64 426 10/7/2022
1.1.62 394 10/7/2022
1.1.58 537 9/23/2022
1.1.55 847 9/23/2022
1.1.53 462 9/22/2022
1.1.47 417 9/21/2022
1.1.45 477 9/16/2022
1.1.42 466 9/15/2022
1.1.40 476 9/8/2022
1.1.38 416 9/7/2022
1.1.36 431 9/3/2022
1.1.34 476 8/15/2022
1.1.32 472 8/6/2022
1.1.30 675 8/5/2022
1.1.28 417 8/4/2022
1.1.26 444 8/3/2022
1.1.24 435 8/3/2022
1.1.22 452 8/2/2022
1.1.20 458 7/30/2022
1.1.18 467 7/26/2022
1.1.16 441 7/24/2022
1.1.14 434 7/23/2022
1.1.12 478 7/13/2022
1.1.7 617 7/7/2022
1.1.5 453 7/7/2022
1.1.3 465 7/6/2022
1.1.1 450 7/5/2022
1.0.107.13280 469 7/1/2022
1.0.105.49254 466 6/30/2022
1.0.102.851 452 6/28/2022
1.0.100.17145 443 6/28/2022
1.0.98.48733 493 6/28/2022
1.0.96.40373 485 6/26/2022
1.0.92.59206 458 6/24/2022
1.0.90.38187 479 6/16/2022
1.0.88.50207 466 6/15/2022
1.0.86.52668 434 6/14/2022
1.0.83.14512 484 6/13/2022
1.0.81.41619 487 6/8/2022
1.0.79.53990 484 6/3/2022
1.0.77.26764 446 6/3/2022
1.0.75.37268 447 6/1/2022
1.0.72.43325 460 5/31/2022
1.0.70.15497 454 5/31/2022
1.0.68.55953 466 5/31/2022
1.0.66.24331 454 5/27/2022
1.0.64.6330 446 5/26/2022
1.0.62.28047 474 5/26/2022
1.0.60.49583 469 5/25/2022
1.0.58.20063 455 5/24/2022
1.0.56.35800 475 5/23/2022
1.0.54.60782 472 5/20/2022
1.0.51.48271 474 5/12/2022
1.0.49.30985 542 5/6/2022
1.0.46 489 5/5/2022
1.0.42 506 4/26/2022
1.0.40 473 4/25/2022
1.0.38 481 4/24/2022
1.0.36 470 4/23/2022
1.0.34 489 4/22/2022
1.0.32 473 4/22/2022
1.0.30 467 4/21/2022
1.0.26 481 4/21/2022
1.0.24 469 4/20/2022
1.0.22 456 4/19/2022
1.0.20 474 4/18/2022
1.0.18 526 4/17/2022
1.0.16 471 4/16/2022
1.0.14 473 4/15/2022
1.0.12 501 4/13/2022
1.0.10 500 4/6/2022
1.0.8 491 4/4/2022
1.0.6 477 4/3/2022
1.0.4 478 3/31/2022
1.0.2 136 3/31/2022
1.0.1-preview.68 109 3/30/2022
1.0.1-preview.67 126 3/25/2022
1.0.1-preview.66 117 3/25/2022
1.0.1-preview.65 110 3/25/2022
1.0.1-preview.64 109 3/23/2022
1.0.1-preview.63 91 3/22/2022
1.0.1-preview.62 102 3/21/2022
1.0.1-preview.61 112 3/20/2022
1.0.1-preview.60 113 3/19/2022
1.0.1-preview.58 114 3/16/2022
1.0.1-preview.57 118 3/16/2022
1.0.1-preview.56 119 3/14/2022
1.0.1-preview.55 116 3/14/2022
1.0.1-preview.54 108 3/11/2022
1.0.1-preview.53 109 3/9/2022
1.0.1-preview.52 119 3/8/2022
1.0.1-preview.51 119 3/7/2022
1.0.1-preview.50 112 3/4/2022
1.0.1-preview.49 122 3/3/2022
1.0.1-preview.48 117 2/27/2022
1.0.1-preview.47 109 2/26/2022
1.0.1-preview.46 107 2/25/2022
1.0.1-preview.45 117 2/18/2022
1.0.1-preview.43 114 2/16/2022
1.0.1-preview.42 119 2/12/2022
1.0.1-preview.41 113 2/10/2022
1.0.1-preview.40 128 2/9/2022
1.0.1-preview.39 124 2/8/2022
1.0.1-preview.38 123 2/6/2022
1.0.1-preview.37 123 2/5/2022
1.0.1-preview.36 127 2/4/2022
1.0.1-preview.35 129 2/3/2022
1.0.1-preview.34 131 1/31/2022
1.0.1-preview.32 131 1/31/2022
1.0.1-preview.31 187 1/29/2022
1.0.1-preview.30 139 1/28/2022
1.0.1-preview.28 137 1/28/2022
1.0.1-preview.26 141 1/27/2022
1.0.1-preview.25 147 1/27/2022
1.0.1-preview.24 146 1/26/2022
1.0.1-preview.23 144 1/24/2022
1.0.1-preview.22 141 1/21/2022
1.0.1-preview.21 132 1/21/2022
1.0.1-preview.20 136 1/21/2022
1.0.1-preview.19 128 1/21/2022
1.0.1-preview.18 135 1/20/2022
1.0.1-preview.17 132 1/20/2022
1.0.1-preview.16 136 1/16/2022
1.0.1-preview.15 143 1/14/2022
1.0.1-preview.14 133 1/14/2022
1.0.1-preview.13 139 1/12/2022
1.0.1-preview.12 151 1/11/2022
1.0.1-preview.9 147 1/5/2022
1.0.1-preview.8 137 12/31/2021
1.0.1-preview.7 132 12/31/2021
1.0.1-preview.6 144 12/29/2021
1.0.1-preview.5 127 12/28/2021
1.0.1-preview.3 138 12/27/2021
1.0.0 378 12/23/2021
1.0.0-preview.99 139 12/23/2021
1.0.0-preview.98 140 12/23/2021
1.0.0-preview.94 180 11/12/2021
1.0.0-preview.91 169 11/9/2021
1.0.0-preview.88 176 11/9/2021