数字光照传感器驱动 LED:Windows 10 IoT Core 树莓派实战
项目概述
本 Windows 10 IoT Core 项目演示如何根据数字光照传感器读实时驱动 LED。仅监控传感器连接的 GPIO 引脚,光照存在点亮 LED,光照消失熄灭 LED。全部逻辑集中在单个 C# 文件,无 UI,代码极简,适合快速原型验证。
硬件接线
下图为接线图,引脚编号可自行调整,代码同步修改即可。
- 数字光照传感器 → GPIO #5
- 红色 LED → GPIO #12
核心代码实现
步骤 1:创建 UWP 项目
- 打开 Visual Studio 2017/2015
- 选择 Blank App (Universal Windows)
- 项目名设为 DigitalLightSensorApp
步骤 2:编写逻辑
打开 MainPage.xaml.cs,替换 using 指令:
using Windows.UI.Xaml.Controls;
using Windows.Devices.Gpio;
声明 GPIO 引脚成员:
private GpioPin _sensorPin;
private GpioPin _ledPin;
定义引脚编号:
private int _sensorGpioPinNumber = 5;
private int _ledGpioPinNumber = 12;
初始化函数:打开引脚、设置模式、注册事件、设置初始状态:
private void Initialize() {
var gpioController = GpioController.GetDefault();
// 传感器 - 输入
_sensorPin = gpioController.OpenPin(_sensorGpioPinNumber);
_sensorPin.SetDriveMode(GpioPinDriveMode.Input);
_sensorPin.ValueChanged += HandleSensorLightDetectionChange;
// LED - 输出
_ledPin = gpioController.OpenPin(_ledGpioPinNumber);
_ledPin.SetDriveMode(GpioPinDriveMode.Output);
// 初始状态
HandleLightStatus();
}
响应传感器变化:
private void HandleSensorLightDetectionChange(GpioPin sender, GpioPinValueChangedEventArgs args) {
HandleLightStatus();
}
根据读值控制 LED。高电平=黑暗→熄灭 LED;低电平=有光→点亮 LED:
private void HandleLightStatus() {
if (_sensorPin.Read() == GpioPinValue.High) {
_ledPin.Write(GpioPinValue.Low); // 关灯
} else {
_ledPin.Write(GpioPinValue.High); // 开灯
}
}
构造函数调用初始化:
public MainPage() {
this.InitializeComponent();
Initialize();
}
完整源码
using Windows.UI.Xaml.Controls;
using Windows.Devices.Gpio;
namespace DigitalLightSensorApp {
public sealed partial class MainPage : Page {
private GpioPin _sensorPin;
private GpioPin _ledPin;
private int _sensorGpioPinNumber = 5;
private int _ledGpioPinNumber = 12;
public MainPage() {
this.InitializeComponent();
Initialize();
}
private void Initialize() {
var gpioController = GpioController.GetDefault();
_sensorPin = gpioController.OpenPin(_sensorGpioPinNumber);
_sensorPin.SetDriveMode(GpioPinDriveMode.Input);
_sensorPin.ValueChanged += HandleSensorLightDetectionChange;
_ledPin = gpioController.OpenPin(_ledGpioPinNumber);
_ledPin.SetDriveMode(GpioPinDriveMode.Output);
HandleLightStatus();
}
private void HandleSensorLightDetectionChange(GpioPin sender, GpioPinValueChangedEventArgs args) {
HandleLightStatus();
}
private void HandleLightStatus() {
if (_sensorPin.Read() == GpioPinValue.High) {
_ledPin.Write(GpioPinValue.Low);
} else {
_ledPin.Write(GpioPinValue.High);
}
}
}
}
程序持续运行,实时响应环境光变化。
更多细节参考 Digital Light Sensor 文档。
制造工艺
- 树莓派 GPIO 直连 DS1820 单总线温度传感器指南
- 树莓派 3 接 HC‑SR04 超声波测距传感器完全指南
- 树莓派接 KY‑033 循迹/门状态传感器:简易 Python 实现
- BMP180 I2C 气压传感器树莓派接入指南
- 树莓派接入 DS18B20 单总线数字温度计:分步实战指南
- 树莓派读取线性霍尔传感器:Java 指南与 ADC0832 深度解析
- 树莓派多传感器温度光照监测系统:DS18B20 实战构建
- 树莓派 DS18B20 温度传感器测试与 HC-SR04 超声波测距实战
- 4 美元太阳能庭院灯改造:MSP430 + nRF24L01+ 打造花园无线传感器节点
- 树莓派纯数字引脚实现低成本红外测距传感器:RC 计时法
- 基于树莓派的卫生间占用传感器:通过 Twilio 实现语音与短信提醒
- 数字磁性霍尔传感器:原理、设计与汽车应用