张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED

简介:   感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧。其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊。百度也搜不到,上 GitHub 转了一圈,在 @ms-iot 那发现了 Lightning ,再看最后的更...

  感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧。其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊。百度也搜不到,上 GitHub 转了一圈,在 @ms-iot 那发现了 Lightning ,再看最后的更新时间,还是2016中旬……Windows 10 IoT 在国内真惨,这么长时间都没人写个教程……不说废话了……

  本文示例地址:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/RgbLed

  Lightning 项目地址:https://github.com/ms-iot/lightning

  效果图:

 

  一、 更改默认控制器驱动

  打开树莓派的 Windows Device Portal ,在 Devices 菜单中的 Default Controller Driver 选项,将默认的 Inbox Driver 更改为 Direct Memory Mapped Driver ,重启。

 

 

  二、更改 Package.appxmanifest 配置

  新建一个 UWP 项目,本文这里叫“RgbLedDemo”。以“查看代码”的形式打开 Package.appxmanifest 。

  在 Package 标签下添加一个命名空间,并更改 IgnorableNamespaces 属性。

xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
IgnorableNamespaces="uap mp iot"

  在 Capabilities 添加如下内容

<iot:Capability Name="lowLevelDevices" />
<DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141"/>

 

  三、引用 Microsoft.Iot.Lightning

  在 NuGet 包管理器下搜索 Lightning 即可。

  还有 Windows IoT Extensions for the UWP

 

  四、使用 Lightning

  注意引用

using Windows.Devices.Pwm;
using Microsoft.IoT.Lightning.Providers;

  1. 判断 Lightning 的启用

  这一步是必要的,因为使用 Lightning 必须关闭系统默认的控制器驱动,没启用的话抛出个异常就好了。

if (!LightningProvider.IsLightningEnabled)
{
    throw new NullReferenceException("Lightning isn't enabled !");
}

  2. 获取软件 PWM 控制器

  一切正常的情况下就该获取 Lightning 中的软件 PWM 控制器了。Lightning 中也集成了其他硬件 PWM 的控制器,因此在调用 PwmController.GetControllersAsync() 时返回的是一个集合,其中第二项是我们需要的软件 PWM 控制器。得到控制器后还需要设置 PWM 的频率,这个软件 PWM 控制器的频率范围在 40 - 1000 Hz 之间(低的可怜……),不在这个范围内的数字会抛出异常。

PwmController controller = (await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider()))[1];
controller.SetDesiredFrequency(1000);

  3. 设置 PWM 引脚

  以 Red 引脚为例。首先通过控制器来打开引脚,这里为 GPIO 17 位置的引脚。然后需要设置 Duty Cycle Percentage ,通俗点就是电压的占比,0 - 1 之间的小数。

PwmPin redPin = controller.OpenPin(17);
redPin.SetActiveDutyCyclePercentage(0);
redPin.Start(); 

  之后要改变 LED 的亮度还是要改变 SetActiveDutyCyclePercentage(value) 的 value 值。

  释放的话要先关闭 PWM。

redPin.Stop();
redPin.Dispose();

 

  五、注意

  使用 Lightning 后,之前基于默认控制器驱动编写的I2C,SPI代码会报错。但 Lightning 中集成了 I2C、SPI、GPIO 等的控制器,将其替换一下即可。

 

  本文的项目解析部分就结束了。下面给一个呼吸灯的测试代码,我用的是共阴极 RGB LED 。代码在 GitHub 的项目中有。

/// <summary>
/// Breathing LED
/// </summary>
/// <param name="delay">Delay Time</param>
public async Task BreathingAsync(int delay)
{
    double red = 255;
    double green = 0;
    double blue = 0;

    while (red != 0 && green != 255)
    {
        redPin.SetActiveDutyCyclePercentage(red / 255.0);
        greenPin.SetActiveDutyCyclePercentage(green / 255.0);

        red--;
        green++;
        await Task.Delay(delay);
    }

    while (green != 0 && blue != 255)
    {
        greenPin.SetActiveDutyCyclePercentage(green / 255.0);
        bluePin.SetActiveDutyCyclePercentage(blue / 255.0);

        green--;
        blue++;
        await Task.Delay(delay);
    }

    while (blue != 0 && red != 255)
    {
        bluePin.SetActiveDutyCyclePercentage(blue / 255.0);
        redPin.SetActiveDutyCyclePercentage(red / 255.0);

        blue--;
        red++;
        await Task.Delay(delay);
    }
}

 

目录
相关文章
|
6天前
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
37 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
|
1天前
|
存储 安全 数据安全/隐私保护
Windows 32 汇编笔记(一):基础知识
Windows 32 汇编笔记(一):基础知识
|
26天前
|
网络安全 C++ Windows
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
|
26天前
|
Windows
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
|
27天前
|
编解码 Windows
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
XviD是开源MPEG-4视频编码器,与DivX相似但后者非开源。早期MP4常使用XviD或DivX编码,现已被H.264取代。在Windows上集成FFmpeg的XviD编解码库libxvid,需访问<https://labs.xvid.com/source/>下载源码,解压后在MSYS环境中配置、编译和安装。之后重新配置FFmpeg,启用libxvid并编译安装。详细步骤包括configure命令、make和make install。成功后,通过`ffmpeg -version`检查是否启用libxvid。更多音视频开发技术可参考《FFmpeg开发实战:从零基础到短视频上线》。
60 0
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
|
17天前
|
Java Nacos 微服务
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
|
安全 Linux Windows
FLARE VM:Windows恶意软件分析
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396538 ...
1920 0
|
安全 API Windows
Windows恶意软件API调用特征分析
本文讲的是Windows恶意软件API调用特征分析,通常对病毒使用API的认识都是基于病毒工程师的经验,但是我们并不知道每个API对于是否是病毒的贡献有多大。通过对大量病毒样本的统计分析,我们可以得出相关的数据。
1730 0
|
2天前
|
网络协议 Unix 网络安全
FTP服务器怎么搭建?Windows server搭建FPT服务器
FTP服务器是按照FTP协议提供文件传输服务的计算机。它用于在两台计算机间安全地传输文件,支持用户权限管理和跨平台操作。FTP使用控制连接处理命令,数据连接传输文件,有PORT和PASV模式。要搭建FTP服务器,首先在Windows Server 2008 R2上安装IIS,确保选中FTP服务。接着,创建FTP文件夹作为站点根目录,通过IIS管理器添加FTP站点,配置站点信息、身份验证和权限。测试客户端通过telnet和浏览器访问FTP服务器,确认能成功登录及浏览文件。FTP常用于文件共享和管理,可通过专用工具如FlashFXP上传下载文件。
11 0
FTP服务器怎么搭建?Windows server搭建FPT服务器
|
8天前
|
前端开发 JavaScript 应用服务中间件
windows server + iis 部署若伊前端vue项目
5,配置url重写规则(重写后端请求) 注:如果没有Application Request Routing Cachefourcloudbdueclaim和URL重写,则是第二部的那两个插件没装上 打开iis,点击计算机->点击Application Request Routing Cache -> 打开功能
25 0