树莓派.Net Core Iot入门系列篇(1):点亮一个LED灯

3,255次阅读
没有评论

前言

这是.Net Core Iot系列入门教程中的第一篇,旨在为大家提供一个思路:不懂底层没关系,照样可以玩得转IOT。这句话不是说底层不重要,底层(操作系统、计算机网络、C等)依然很重要,要想走得更远,就要尽可能的了解并学习这些相关知识。

先不说这些,回到主题,来看如何使用C#来控制GPIO。不得不说,微软老大哥确实牛逼,直接封装了树莓派等开发板的GPIO操作类库,可以通过Nuget安装使用。

注意

System.Device.GPIO 仍处于早期预览状态。并且目前仅支持部分 Raspberry Pi 、 Pine64 和 Hummingboard 的板子。

前提

在继续往下之前,默认是具备了以下这些条件的。

  • 有树莓派的开发板,且安装的是官网操作系统(未测试第三方操作系统)
  • 树莓派能够联网
  • 按照上一篇的教程安装了.Net Core Sdk
  • 有一台安装了visual studio 2019的计算机,并安装了.Net Core SDK(2.2及以上)

正文

1、新建项目

使用VS2019创建一个.Net Core 控制台应用程序,然后使用Nuget安装System.Devices.Gpio和Iot.Device.Bindings(如果仅操作GPIO可以不安装Iot.Device.Bindings)

树莓派.Net

安装完成之后是这样的。

树莓派.Net

2、编写程序

然后将替换Program中的程序。

using System;
using System.Device.Gpio;
using System.Threading;

namespace _1.Gpio
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Start!");
            try
            {
                int pin = 7;
                using (GpioController controller = new GpioController(PinNumberingScheme.Board))
                {
                    //注册退出事件
                    Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) => 
                    {
                        if (controller.IsPinOpen(pin))
                        {
                            controller.ClosePin(pin);
                        }
                        controller.Dispose();
                        Console.WriteLine("Close pin and exit successful!");
                    };
                    // 设置引脚
                    controller.OpenPin(pin, PinMode.Output);
                    if (!controller.IsPinOpen(pin))
                    {
                        Console.WriteLine($"Set pin {pin} output mode failed.");
                    }
                    while (true)
                    {
                        // 打开
                        controller.Write(pin, PinValue.High);
                        Thread.Sleep(500);
                        // 关闭 
                        controller.Write(pin, PinValue.Low);
                        Thread.Sleep(500);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

3、安装部署

程序写好之后是不能直接在Windows当中运行的,虽然说.Net Core是跨平台的,但是Windows没有GPIO控制器,运行会报错。

树莓派.Net
Windows中运行提示错误

所以需要将程序部署到树莓派中运行。

右键单击项目,选择发布

树莓派.Net

发布培配置文件如下

树莓派.Net

配置选择Debug,方便调试。正式发布的话,选择Release。

部署模式可以选择框架依赖或者独立,建议选择框架依赖,不会包含.net core的二进制文件,生成的内容只有项目相关的。

目标运行时一定要选择linux-arm,不然在树莓派中无法运行。

保存之后点击发布,发布成功之后将publish文件夹复制到树莓派当中。至于如何上传,选择自己喜欢的上传方式即可。我用的是FileZilla通过sftp上传。

4、运行

首先接入LED灯,对应程序中的7号引脚(硬件编码)。

树莓派.Net
树莓派引脚

然后通过SSH登录到树莓派当中,进入publish文件夹当中。运行发布后代码

sudo dotnet 1.Gpio.dll

可以看到LED灯开始闪烁。

树莓派.Net

5、调试

写程序免不了会出现问题,出现问题就要调试程序。而程序是运行在树莓派当中的,可以通过Visual Studio自带的SSH远程调试功能对运行在树莓派当中的程序进行调试。

在树莓派中运行发布后的程序,然后点击调试菜单当中的“附加到进程”

树莓派.Net

按照图示步骤连接到树莓派。

注意:要开启树莓派ROOT登录。开启方式传送门

树莓派.Net

(1)连接类型选择SSHbr>(2)连接目标输入root@树莓派IP地址(3)点击刷新
(4)找到程序的运行进程,点击附加。

调试代码类型选择托管

树莓派.Net

第一次调试时间要长一点,可能还会报一个超时的错误,不用管。然后就可以对程序进行调试了。

树莓派.Net

可以看到已经进入断点,开始调试了。

Demo和参考资料

Demo下载:Github

参考资料:
(1)张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用
(2)https://docs.microsoft.com/en-us/uwp/api/windows.devices.gpio

afirefish
版权声明:本站原创文章,由afirefish2019-09-18发表,共计1933字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...