Windows 10 物联网酷睿上安装ASP.NET酷睿 3.0并让我ASP.NET酷睿 3.0 LED 控制应用程序工作后,我想用一些经典作品完成这段旅程 –你好,Blinky 应用程序

ASP.NET核心的源代码”你好,闪烁”在我的GitHub存储库gpeipman/AspNetCoreHelloBlinky中可用。请随意浏览代码,使其在您的电路板上工作。

控制 LED ASP.NET 芯 3.0

打开和关闭 LED实际上是一件简单的事情。我从.NET 核心 IoT 库的 LED 闪烁示例中学习了代码,并使其与ASP.NET Core 3.0 一起工作。

此处显示了接线。这与 .NET Core IoT 库示例相同,图表的积分将转到他们的人。

这是我的 LED 控制客户端。

public class LedClient : IDisposable
{
    private const int LedPin = 17;
 
    private GpioController _controller = new GpioController();
    private bool disposedValue = false;
    private object _locker = new object();
 
    public LedClient()
    {
        _controller.OpenPin(LedPin, PinMode.Output);
        _controller.Write(LedPin, PinValue.Low);
 
        IsLedOn = false;
    }
 
    public bool IsLedOn { get; private set; }
 
    public void LedOn()
    {
        lock (_locker)
        {
            _controller.Write(LedPin, PinValue.High);
 
            IsLedOn = true;
        }
    }
 
    public void LedOff()
    {
        lock (_locker)
        {
            _controller.Write(LedPin, PinValue.Low);
 
            IsLedOn = false;
        }
    }       
        
    protected virtual void Dispose(bool disposing)
    {
        if (!disposedValue)
        {
            if (disposing)
            {
                _controller.Dispose();
            }
 
            disposedValue = true;
        }
    }
 
    public void Dispose()
    {
        Dispose(true);
    }
}

这是一个小类,作为单一子注入ASP.NET核心控制器。它保存着一个Gpio控制器的内部实例。LedOn()和方法 LedOff() 打开或关闭 LED。

获得ASP.NET核心”你好,闪烁”活着

闪烁 LED 对任务来说更具挑战性,因为我需要完成一些代码,这些代码会自动闪烁 LED,而控件将返回ASP.NET Core Web 应用程序。

我决定为”你好,闪烁”编写客户端类,并使用任务保持 LED 闪烁。

public class LedBlinkClient : IDisposable
{
    private const int LedPin = 17;
    private const int LightTimeInMilliseconds = 1000;
    private const int DimTimeInMilliseconds = 200;
 
    private bool disposedValue = false;
    private object _locker = new object();
    private bool _isBlinking = false;
 
    private Task _blinkTask;
    private CancellationTokenSource _tokenSource;
    private CancellationToken _token;
 
    public void StartBlinking()
    {
        if(_blinkTask != null)
        {
            return;
        }
 
        lock (_locker)
        {
            if(_blinkTask != null)
            {
                return;
            }
 
            _tokenSource = new CancellationTokenSource();
            _token = _tokenSource

开针(LedPin、引脚模式输出);

[是闪烁] 真实;

而(真实)
{
如果 (_token.已取消请求)
{
中断;
}

控制器。写入(LedPin,引脚值.高);
线程.睡眠(光时In毫秒);
控制器。写入(LedPin,引脚值.低);
线程.睡眠(DimTimeIn毫秒);
}

[闪烁 ] false;
}
});
[闪烁任务.开始();
}
}

公共空隙停止闪烁()
{
if(\blinkTask = null)
{
返回;
}

锁(锁)
{
if(\blinkTask = null)
{
返回;
}

[令牌源.取消();
[闪烁任务.等待();
[闪烁 ] false;

[令牌源.Dispose();
[闪烁任务.Dispose();

[令牌源 = null;=
[闪烁任务 ] 为空;
}
}

公共布尔是闪烁
{
获取 [ 返回 ] 正在闪烁;
}

受保护的虚拟空隙处置(布尔处置)
{
如果 (已释放值)
{
如果(处置)
{
停止闪烁();
}

处置值 = true;
}
}

公共空隙处置()
{
处置(真实);
}
}

在尝试”你好,闪烁”之前,我们必须对 Web 应用程序进行一些更改。

ConfigureServices()在 Startup 类中,我们必须 LedBlinkClient 注册为单例。

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddRazorPages();
 
    services.AddSingleton<LedBlinkClient>();
}

我们需要注入 LedBlinkClient HomeController 和创建操作以开始和停止闪烁。

public class HomeController : Controller
{
    private readonly LedBlinkClient _blinkClient;
 
    public HomeController(LedBlinkClient blinkClient)
    {
        _blinkClient = blinkClient;
    }
 
    public IActionResult Index()
    {
        ViewBag.BlinkState = _blinkClient.IsBlinking ? "Blinking" : "Not blinking";
 
        return View();
    }
 
    public IActionResult StartBlinking()
    {
        _blinkClient.StartBlinking();
 
        return RedirectToAction(nameof(Index));
    }
 
    public IActionResult StopBlinking()
    {
        _blinkClient.StopBlinking();
 
        return RedirectToAction(nameof(Index));
    }
 
    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
    public IActionResult Error()
    {
        return View(new ErrorViewModel
        {
            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
        });
    }
}

的索引视图 HomeController 将显示 LED 的闪烁状态,并显示用于启动和停止闪烁的链接。

@{
    ViewData["Title"] = "Home Page";
}
 
<div class="text-center">
    <h1 class="display-4">Hello, blinky!</h1>
    <p>Learn about 
        <a href="https://gunnarpeipman.com/aspnet/aspnet-core-hello-blinky">
            how to blink LED with ASP.NET Core
        </a>.
    </p>
    <p>Led is <strong>@ViewBag.BlinkState</strong></p>
    <p>
        <a asp-action="StartBlinking">Start blinking</a> | <a asp-action="StopBlinking">Stop blinking</a>
    </p>
</div>

有了这个,我们的工作就完成了

包装

使用ASP.NET 核心 3.0和 .NET 核心 IoT 库在树莓派上使我们能够编写一个代码,与传感器和连接到主板的其他设备进行通信。ASP.NET Core 3.0 可能不是此任务的理想主机,但如果我们需要基于浏览器的 UI 来控制某些内容,那么在我看来,这是要走的路。让”你好,闪烁”工作不是一个复杂的任务,”你好,闪烁”一直稳定至今在我的董事会。

Comments are closed.