张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

什么是 GPIO

GPIO 是 General Purpose Input Output 的缩写,即“通用输入输出”。 Raspberry Pi 有两行 GPIO 引脚, Raspberry Pi 通过这两行引脚进行一些硬件上的扩展,与传感器进行交互等等。

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

Raspberry Pi B+/2B/3B/3B+/Zero 引脚图


简单的讲,每一个 GPIO 引脚都有两种模式:输出模式(OUTPUT)和输入模式(INPUT)。输出模式类似于一个电源,Raspberry Pi 可以控制这个电源是否向外供电,比如打开外部的 LED 小灯,当然最有用的还是向外部设备发送信号。输入模式相当于电源的阴极,还是以 LED 小灯为例,只不过这次 LED 小灯的阳极接着外部电源,一个电路只有产生电压差时才会有电流,因此要想让小灯亮需要让电流流入 Raspberry Pi 中。和输出模式相反,输入模式是接收外部设备发来的信号。

GPIO 通常采用标准逻辑电平,即高电平和低电平,用二进制 0 和 1 表示。在这两值中间还有阈值电平,即高电平和低电平之间的界限。 Arduino 会将 -0.5 ~ 1.5 V 读取为低电平,3 ~ 5.5 V 读取为高电平, Raspberry Pi 未查到相关资料。GPIO 还可用于中断请求,即设置 GPIO 为输入模式,值达到相应的要求时进行中断。

相关类(Class)

此处默认各位是面向对象的程序员,具有一定的 C# 基础,这里只介绍本人认为常用的方法,介绍将以代码注释的形式体现。

GPIO 操作主要依赖于两个类: GpioController 、 GpioPin 。这两个类位于 System.Devices.Gpio 名称空间下。

GpioController

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

GpioPin

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

人体红外传感器实验

示例地址:https://github.com/ZhangGaoxing/dotnet-core-iot-demo/tree/master/src/PIR

人体红外传感器是基于周围区域的红外热来检测运动的,也称被动红外传感器(Passive Infra-Red, PIR)。

这里使用的是 HC-SR501 。当传感器检测到人体时,LED 小灯亮,当传感器未检测到人体时,LED 小灯灭。

传感器图像

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

HC-SR501


硬件

名称 数量
HC-SR501 x1
LED 小灯 x1
220 Ω 电阻 x1
杜邦线 若干

电路

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

HC-SR501

  • VCC - 5V

  • GND - GND

  • OUT - GPIO 17

LED

  • VCC & 220 Ω resistor - GPIO 27

  • GND - GND

代码

  1. 打开 Visual Studio ,新建一个 .NET Core 控制台应用程序,项目名称为“PIR”。

  2. 引入 System.Devices.Gpio NuGet 包。

  3. 新建类 HCSR501,替换如下代码(此处略有精简,只为必要的代码,不包含自定义事件,详细可查看提供的示例):

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

 Program.cs 中,将主函数代码替换如下:

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用

  1. 发布、拷贝、更改权限、运行

效果图

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用



 如何改进?

剔除主函数循环,尝试在自定义事件中进行检测,即 GpioPin 的 ValueChanged 事件。

原文地址:https://www.cnblogs.com/zhanggaoxing/p/10327917.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用