前言
这是.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)
安装完成之后是这样的。
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控制器,运行会报错。
所以需要将程序部署到树莓派中运行。
右键单击项目,选择发布
发布培配置文件如下
配置选择Debug,方便调试。正式发布的话,选择Release。
部署模式可以选择框架依赖或者独立,建议选择框架依赖,不会包含.net core的二进制文件,生成的内容只有项目相关的。
目标运行时一定要选择linux-arm,不然在树莓派中无法运行。
保存之后点击发布,发布成功之后将publish文件夹复制到树莓派当中。至于如何上传,选择自己喜欢的上传方式即可。我用的是FileZilla通过sftp上传。
4、运行
首先接入LED灯,对应程序中的7号引脚(硬件编码)。
然后通过SSH登录到树莓派当中,进入publish文件夹当中。运行发布后代码
sudo dotnet 1.Gpio.dll
可以看到LED灯开始闪烁。
5、调试
写程序免不了会出现问题,出现问题就要调试程序。而程序是运行在树莓派当中的,可以通过Visual Studio自带的SSH远程调试功能对运行在树莓派当中的程序进行调试。
在树莓派中运行发布后的程序,然后点击调试菜单当中的“附加到进程”
按照图示步骤连接到树莓派。
注意:要开启树莓派ROOT登录。开启方式传送门
(1)连接类型选择SSHbr>(2)连接目标输入root@树莓派IP地址
(3)点击刷新
(4)找到程序的运行进程,点击附加。
调试代码类型选择托管
第一次调试时间要长一点,可能还会报一个超时的错误,不用管。然后就可以对程序进行调试了。
可以看到已经进入断点,开始调试了。
Demo和参考资料
Demo下载:Github
参考资料:
(1)张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用
(2)https://docs.microsoft.com/en-us/uwp/api/windows.devices.gpio
文章评论