夸克之书

  • 首页
  • 科普
  • 笔记
  • C#
  • 物联网
  • 算法
  • Linux
  • 树莓派
夸克之内,别有洞天
  1. 首页
  2. 树莓派
  3. 正文

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

2019-09-18 1800点热度 2人点赞 0条评论

前言

这是.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 Core Iot入门系列篇(1):点亮一个LED灯插图

安装完成之后是这样的。

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

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 Core Iot入门系列篇(1):点亮一个LED灯插图2
Windows中运行提示错误

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

右键单击项目,选择发布

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

发布培配置文件如下

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

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

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

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

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

4、运行

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

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

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

sudo dotnet 1.Gpio.dll

可以看到LED灯开始闪烁。

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

5、调试

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

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

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

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

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

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

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

调试代码类型选择托管

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

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

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

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

Demo和参考资料

Demo下载:Github

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

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2020-12-13

Afirefish

夸克之内,别有洞天

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

Afirefish

夸克之内,别有洞天

搜索文章
分类目录
  • C# (28)
  • Linux (3)
  • 树莓派 (13)
  • 物联网 (19)
  • 科普 (4)
  • 笔记 (30)
  • 默认 (44)
最新 热点 随机
最新 热点 随机
树莓派PWM风扇控制 PVE重启后LVM Thin数据丢失,错误:Volume group "****" has insufficient free space (128 extents): 4048 required. OpenWrt配置SmartDNS OpenWrt x86安装Frpc Intel网卡开机显示Initializing Intel(R) Boot Agent GE v1.5.50 IdentityServer4证书创建 免费本地解析域名(locallocal.cn),支持HTTPS 使用淘宝npm以及安装cnpm
Steam饥荒专用服务器搭建你见过哪些有趣的代码?修改PostgreSQL数据库默认用户postgres密码在VS Code开发Arduino项目Error response from daemon: cannot stop container: ******: Cannot kill container *******:.....单机Docker搭建FastDFSC# Json序列化时将长整型(long)属性序列化为Json字符串使用淘宝npm以及安装cnpm
Winform设置程序开机启动 你见过哪些有趣的代码? 修改PostgreSQL数据库默认用户postgres密码 Steam饥荒专用服务器搭建 C# HTTP请求参数转实体类 在VS Code开发Arduino项目 IIS应用程序池两种运行模式:集成模式和经典模式。 Ubuntu18.04下Mysql8.0.15关闭大小写敏感
最近评论
发布于 7 天前(02月21日) 好的谢谢,那我只能通过kill杀死推流指令进程来实现了。
发布于 7 天前(02月21日) 要用这个项目的话,你得自己拉代码来改了。做这玩意儿主要是考虑全天候的,没考虑过关[笑哭]
发布于 1 周前(02月21日) 就是想问有没有能通过代码控制的关闭推流的指令,而不需要手动控制。我想设置一个按钮来控制开始推流和结束...
发布于 1 周前(02月20日) 唔,没懂你意思,直接拔电源不就行了。不拔电源关闭推流服务也行撒。
发布于 1 周前(02月20日) 你好,我想问一下,如果不想推流了,该用什么方法停止树莓派推流呢?
书签
  • 打赏
  • 毒鸡汤(有点意思)
  • 米店
  • 金鱼直播间
放松一下
https://www.quarkbook.com/wp-content/uploads/2020/09/Yanni-Nightingale.flac
用户您好!请先登录!
登录 注册

COPYRIGHT © 2020 夸克之书. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

蜀ICP备15036129号-9

登录
注册|忘记密码?