干簧管是一种可以用磁场控制开关状态的设备。当有磁场时,玻璃管中的两片铁片会贴合,从而导电。干簧管模块也就是基于这个原理的电子模块,有磁场时,输出低电平。
门口灯光:当你开门时,亮灯,关门时熄灯。只需要在门锁上装个干簧管,在门框上装个磁铁就能搞定。
当然,装在门上做防盗报警设备。
还有类似的很多应用场景。这篇文章讨论的就是类似第一种的灯光控制场景,不过并不是有磁场开灯,没磁场关灯,而是检测到磁场时开灯,再次检测到磁场时关灯。并没有什么卵用,只是写给Windows 10 IoT初学者看的起步例子。
干簧管端VCC接DC3.3, GND接GROUND, DO接GPIO 05
LED正极接DC3.3, 负极接GPIO 06
定义GPIO控制器、干簧管的GPIO端口、LED灯的GPIO端口、LED的开关标志
public GpioController GpioController { get; set; } public GpioPin ReedPin { get; set; } public GpioPin LedPin { get; set; } public bool IsLightOn { get; set; }
初始化GPIO控制器
GpioController = GpioController.GetDefault(); if (null != GpioController) { }
记住,Windows 10 IoT设备最好判做一下非空的判断,以保证代码在没有GPIO控制器的设备上不会爆。
打开干簧管GPIO端口
ReedPin = GpioController.OpenPin(5);
设置端口模式为输入(因为我们要监听干簧管输出的信号)
ReedPin.SetDriveMode(GpioPinDriveMode.Input);
类似的,打开LED的GPIO端口,并设置端口模式为输出。开灯是输出低电平,关灯是输出高电平。
LedPin = GpioController.OpenPin(6); LedPin.SetDriveMode(GpioPinDriveMode.Output);
LED一开始是熄灭的,所以先输出一个高电平
LedPin.Write(GpioPinValue.High);
然后,当干簧管的端口电平变化的时候,爆一个事件出来:
ReedPin.ValueChanged += (sender, args) => { };
在这个事件里,判断干簧管当前电平是否为低电平,如果是的话,证明遇到了磁场,控制LED的开关:
if (ReedPin.Read() == GpioPinValue.Low) { IsLightOn = !IsLightOn; LedPin.Write(IsLightOn ? GpioPinValue.Low : GpioPinValue.High); }
最后,整个代码看起来就像这样:
using Windows.Devices.Gpio; using Windows.UI.Xaml.Controls; namespace WindowsIoTReedLight { public sealed partial class MainPage : Page { public GpioController GpioController { get; set; } public GpioPin ReedPin { get; set; } public GpioPin LedPin { get; set; } public bool IsLightOn { get; set; } public MainPage() { this.InitializeComponent(); GpioController = GpioController.GetDefault(); if (null != GpioController) { ReedPin = GpioController.OpenPin(5); ReedPin.SetDriveMode(GpioPinDriveMode.Input); ReedPin.ValueChanged += (sender, args) => { if (ReedPin.Read() == GpioPinValue.Low) { IsLightOn = !IsLightOn; LedPin.Write(IsLightOn ? GpioPinValue.Low : GpioPinValue.High); } }; LedPin = GpioController.OpenPin(6); LedPin.SetDriveMode(GpioPinDriveMode.Output); LedPin.Write(GpioPinValue.High); } } } }
部署工程到树莓派上,然后拿块磁铁靠近干簧管,灯亮,再次靠近,灯灭。