nanoFramework.M5StickC 1.1.232

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

// Install nanoFramework.M5StickC as a Cake Tool
#tool nuget:?package=nanoFramework.M5StickC&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包也提供了对屏幕的支持,需要使用正确的镜像刷入(使用< Lottery>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:您将能够访问的所有类都使用懒加载模式来实例化,包括屏幕。这具有尽可能少地使用内存和配置时间的优势。

以下示例将使用M5Core或M5Stick作为示例,它们的工作方式非常相似。

命名空间

请确保您在C#程序头中添加了正确的namespaces引用,例如: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或更多的数据,但没有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 事件,但你会通过 DoubleTouch 标志消失和第一个点最终的 LiftUp 来获取变化。

电源管理

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

有关 M5StickC/CPlus 中使用的 AXP192 的详细示例,请参阅;对于 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();

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

ADC 通道

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

// 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是兼容的。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于目标框架.NET标准的信息。

NuGet包

此包未由任何NuGet包使用。

GitHub代码库

此包未由任何流行的GitHub代码库使用。

版本 下载 最后更新
1.1.232 28 7/31/2024
1.1.229 48 7/19/2024
1.1.228 50 7/17/2024
1.1.227 73 7/12/2024
1.1.225 76 6/28/2024
1.1.223 74 6/19/2024
1.1.220 85 5/31/2024
1.1.217 89 5/15/2024
1.1.215 79 5/10/2024
1.1.213 105 4/17/2024
1.1.211 88 4/15/2024
1.1.209 89 4/5/2024
1.1.207 95 3/27/2024
1.1.203 91 2/28/2024
1.1.201 109 1/31/2024
1.1.199 90 1/26/2024
1.1.197 89 1/24/2024
1.1.187 208 11/17/2023
1.1.185 112 11/14/2023
1.1.183 110 11/9/2023
1.1.180 109 11/8/2023
1.1.177 130 10/11/2023
1.1.175 135 9/29/2023
1.1.171 137 9/8/2023
1.1.169 138 9/6/2023
1.1.167 160 8/18/2023
1.1.163 147 8/2/2023
1.1.161 123 7/28/2023
1.1.157 130 7/19/2023
1.1.155 130 7/14/2023
1.1.152 154 6/21/2023
1.1.150 151 6/14/2023
1.1.148 153 6/7/2023
1.1.146 149 5/31/2023
1.1.144 161 5/24/2023
1.1.142 164 5/17/2023
1.1.139 172 5/11/2023
1.1.137 167 5/5/2023
1.1.135 227 4/5/2023
1.1.133 260 3/29/2023
1.1.131 230 3/24/2023
1.1.128 249 3/17/2023
1.1.125 238 3/16/2023
1.1.123 235 3/13/2023
1.1.121 255 3/9/2023
1.1.119 260 2/27/2023
1.1.117 260 2/27/2023
1.1.115 244 2/22/2023
1.1.113 266 2/20/2023
1.1.111 267 2/16/2023
1.1.106 327 1/10/2023
1.1.104 315 1/9/2023
1.1.102 306 1/6/2023
1.1.100 321 1/6/2023
1.1.98 310 1/5/2023
1.1.96 311 12/29/2022
1.1.90 374 11/15/2022
1.1.88 366 11/14/2022
1.1.86 370 11/5/2022
1.1.84 396 11/5/2022
1.1.82 370 11/4/2022
1.1.80 366 11/3/2022
1.1.78 372 11/1/2022
1.1.76 381 10/27/2022
1.1.70 427 10/13/2022
1.1.68 413 10/12/2022
1.1.64 413 10/7/2022
1.1.62 406 10/7/2022
1.1.58 496 9/23/2022
1.1.55 452 9/23/2022
1.1.53 434 9/22/2022
1.1.47 434 9/21/2022
1.1.45 457 9/16/2022
1.1.42 460 9/15/2022
1.1.40 438 9/8/2022
1.1.38 422 9/7/2022
1.1.36 449 9/3/2022
1.1.34 456 8/15/2022
1.1.32 461 8/6/2022
1.1.30 442 8/5/2022
1.1.28 433 8/4/2022
1.1.26 444 8/3/2022
1.1.24 469 8/3/2022
1.1.22 464 8/2/2022
1.1.20 449 7/30/2022
1.1.18 440 7/26/2022
1.1.16 458 7/24/2022
1.1.14 460 7/23/2022
1.1.12 453 7/13/2022
1.1.7 463 7/7/2022
1.1.5 456 7/7/2022
1.1.3 441 7/6/2022
1.1.1 459 7/5/2022
1.0.107.13280 424 7/1/2022
1.0.105.49254 496 6/30/2022
1.0.102.851 461 6/28/2022
1.0.100.17145 449 6/28/2022
1.0.98.48733 466 6/28/2022
1.0.96.40373 450 6/26/2022
1.0.92.59206 451 6/24/2022
1.0.90.38187 459 6/16/2022
1.0.88.50207 461 6/15/2022
1.0.86.52668 433 6/14/2022
1.0.83.14512 447 6/13/2022
1.0.81.41619 445 6/8/2022
1.0.79.53990 448 6/3/2022
1.0.77.26764 471 6/3/2022
1.0.75.37268 438 6/1/2022
1.0.72.43325 459 5/31/2022
1.0.70.15497 447 5/31/2022
1.0.68.55953 451 5/31/2022
1.0.66.24331 459 5/27/2022
1.0.64.6330 464 5/26/2022
1.0.62.28047 460 5/26/2022
1.0.60.49583 462 5/25/2022
1.0.58.20063 463 5/24/2022
1.0.56.35800 476 5/23/2022
1.0.54.60782 467 5/20/2022
1.0.51.48271 461 5/12/2022
1.0.49.30985 459 5/6/2022
1.0.46 470 5/5/2022
1.0.42 483 4/26/2022
1.0.40 477 4/25/2022
1.0.38 491 4/24/2022
1.0.36 482 4/23/2022
1.0.34 481 4/22/2022
1.0.32 474 4/22/2022
1.0.30 480 4/21/2022
1.0.26 466 4/21/2022
1.0.24 468 4/20/2022
1.0.22 486 4/19/2022
1.0.20 490 4/18/2022
1.0.18 487 4/17/2022
1.0.16 505 4/16/2022
1.0.14 471 4/15/2022
1.0.12 468 4/13/2022
1.0.10 462 4/6/2022
1.0.8 463 4/4/2022
1.0.6 481 4/3/2022
1.0.4 476 3/31/2022
1.0.2 468 3/31/2022
1.0.1-preview.68 116 3/30/2022
1.0.1-preview.67 113 3/25/2022
1.0.1-preview.66 124 3/25/2022
1.0.1-preview.65 114 3/25/2022
1.0.1-preview.64 116 3/23/2022
1.0.1-preview.63 103 3/22/2022
1.0.1-preview.62 107 3/21/2022
1.0.1-preview.61 113 3/20/2022
1.0.1-preview.60 115 3/19/2022
1.0.1-preview.58 122 3/16/2022
1.0.1-preview.57 116 3/16/2022
1.0.1-preview.56 115 3/14/2022
1.0.1-preview.55 119 3/14/2022
1.0.1-preview.54 110 3/11/2022
1.0.1-preview.53 109 3/9/2022
1.0.1-preview.52 112 3/8/2022
1.0.1-preview.51 114 3/7/2022
1.0.1-preview.50 111 3/4/2022
1.0.1-preview.49 115 3/3/2022
1.0.1-preview.48 113 2/27/2022
1.0.1-preview.47 112 2/26/2022
1.0.1-preview.46 121 2/25/2022
1.0.1-preview.45 117 2/18/2022
1.0.1-preview.43 112 2/16/2022
1.0.1-preview.42 116 2/12/2022
1.0.1-preview.41 113 2/10/2022
1.0.1-preview.40 118 2/9/2022
1.0.1-preview.39 120 2/8/2022
1.0.1-preview.38 124 2/6/2022
1.0.1-preview.37 124 2/5/2022
1.0.1-preview.36 121 2/4/2022
1.0.1-preview.35 129 2/3/2022
1.0.1-preview.34 128 1/31/2022
1.0.1-preview.32 134 1/31/2022
1.0.1-preview.31 125 1/29/2022
1.0.1-preview.30 126 1/28/2022
1.0.1-preview.28 127 1/28/2022
1.0.1-preview.26 124 1/27/2022
1.0.1-preview.25 133 1/27/2022
1.0.1-preview.24 124 1/26/2022
1.0.1-preview.23 129 1/24/2022
1.0.1-preview.22 121 1/21/2022
1.0.1-preview.21 130 1/21/2022
1.0.1-preview.20 132 1/21/2022
1.0.1-preview.19 131 1/21/2022
1.0.1-preview.18 128 1/20/2022
1.0.1-preview.17 135 1/20/2022
1.0.1-preview.16 133 1/16/2022
1.0.1-preview.15 123 1/14/2022
1.0.1-preview.14 130 1/14/2022
1.0.1-preview.13 128 1/12/2022
1.0.1-preview.12 130 1/11/2022
1.0.1-preview.9 136 1/5/2022
1.0.1-preview.8 133 12/31/2021
1.0.1-preview.7 136 12/31/2021
1.0.1-preview.6 129 12/29/2021
1.0.1-preview.5 129 12/28/2021
1.0.1-preview.3 134 12/27/2021
1.0.0 330 12/23/2021
1.0.0-preview.99 135 12/23/2021
1.0.0-preview.98 136 12/23/2021
1.0.0-preview.94 170 11/12/2021
1.0.0-preview.91 168 11/9/2021
1.0.0-preview.88 169 11/9/2021
1.0.0-preview.86 151 11/3/2021
1.0.0-preview.83 207 10/28/2021
1.0.0-preview.81 181 10/27/2021
1.0.0-preview.77 189 10/27/2021