张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器
BH1750FVI 是一款 IIC 接口的数字型光强度传感器集成电路。下面介绍一下其在 Windows 10 IoT Core 环境下的用法。
项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码。
1. 准备
包含 BH1750FVI 的传感器,这里选择的是淘宝上最多的 GY-30;Raspberry Pi 2/3 一块,环境为 Windows 10 IoT Core;公母头杜邦线 4-5 根
2. 连线
Raspberry Pi 2/3 的引脚如图

由于采用的是 IIC 通信方式,因此我们需要把 GY-30 上的 SDA 与 Pin3 相连,SCL 与 Pin5 相连。VCC 接 3.3V,GND 接地。ADD 决定了传感器的地址,将其连接至 VCC ≥ 0.7 V 的时候,地址为 0x5C,接地时为 0x23。可以不连接。
SDA - Pin3
SCL - Pin5
VCC - 3.3V
GND - GND

3. 代码
GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/BH1750FVIDemo
需要新建一个 Windows 通用 项目 ,并且添加引用 Windows IoT Extensions for the UWP

在项目中添加一个 C# 代码文件 BH1750FVI.cs,代码如下
using System;
using System.Threading.Tasks;
using Windows.Devices.I2c; namespace BH1750FVIDemo
{
/// <summary>
/// I2C Address Setting
/// </summary>
enum AddressSetting
{
/// <summary>
/// ADD Pin connect to high power level
/// </summary>
AddPinHigh = 0x5C,
/// <summary>
/// ADD Pin connect to low power level
/// </summary>
AddPinLow = 0x23
}; /// <summary>
/// The mode of measuring
/// </summary>
enum MeasurementMode
{
/// <summary>
/// Start measurement at 1 lx resolution
/// </summary>
ContinuouslyHighResolutionMode = 0x10,
/// <summary>
/// Start measurement at 0.5 lx resolution
/// </summary>
ContinuouslyHighResolutionMode2 = 0x11,
/// <summary>
/// Start measurement at 4 lx resolution
/// </summary>
ContinuouslyLowResolutionMode = 0x13,
/// <summary>
/// Start measurement at 1 lx resolution once
/// </summary>
OneTimeHighResolutionMode = 0x20,
/// <summary>
/// Start measurement at 0.5 lx resolution once
/// </summary>
OneTimeHighResolutionMode2 = 0x21,
/// <summary>
/// Start measurement at 4 lx resolution once
/// </summary>
OneTimeLowResolutionMode = 0x23
} /// <summary>
/// Setting light transmittance
/// </summary>
enum LightTransmittance
{
Fifty,
Eighty,
Hundred,
Hundred_Twenty,
Hundred_Fifty,
Two_Hundred
} class BH1750FVI
{
I2cDevice sensor;
private byte sensorAddress;
private byte sensorMode;
private byte sensorResolution = ;
private double sensorTransmittance = ; private byte registerHighVal = 0x42;
private byte registerLowVal = 0x65; /// <summary>
/// Constructor
/// </summary>
/// <param name="address">Enumeration type of AddressSetting</param>
/// <param name="mode">Enumeration type of MeasurementMode</param>
public BH1750FVI(AddressSetting address, MeasurementMode mode)
{
sensorAddress = (byte)address;
sensorMode = (byte)mode; if (mode == MeasurementMode.ContinuouslyHighResolutionMode2 || mode == MeasurementMode.OneTimeHighResolutionMode2)
{
sensorResolution = ;
}
} /// <summary>
/// Constructor
/// </summary>
/// <param name="address">Enumeration type of AddressSetting</param>
/// <param name="mode">Enumeration type of MeasurementMode</param>
/// <param name="transmittance">Enumeration type of LightTransmittance</param>
public BH1750FVI(AddressSetting address, MeasurementMode mode, LightTransmittance transmittance)
{
sensorAddress = (byte)address;
sensorMode = (byte)mode; if (mode == MeasurementMode.ContinuouslyHighResolutionMode2 || mode == MeasurementMode.OneTimeHighResolutionMode2)
{
sensorResolution = ;
} switch (transmittance)
{
case LightTransmittance.Fifty:
{
registerHighVal = 0x44;
registerLowVal = 0x6A;
sensorTransmittance = 0.5;
}
break;
case LightTransmittance.Eighty:
{
registerHighVal = 0x42;
registerLowVal = 0x76;
sensorTransmittance = 0.8;
}
break;
case LightTransmittance.Hundred:
{
registerHighVal = 0x42;
registerLowVal = 0x65;
}
break;
case LightTransmittance.Hundred_Twenty:
{
registerHighVal = 0x41;
registerLowVal = 0x7A;
sensorTransmittance = 1.2;
}
break;
case LightTransmittance.Hundred_Fifty:
{
registerHighVal = 0x41;
registerLowVal = 0x7E;
sensorTransmittance = 1.5;
}
break;
case LightTransmittance.Two_Hundred:
{
registerHighVal = 0x41;
registerLowVal = 0x73;
sensorTransmittance = ;
}
break;
}
} /// <summary>
/// Initialize BH1750FVI
/// </summary>
public async Task InitializeAsync()
{
var settings = new I2cConnectionSettings(sensorAddress);
settings.BusSpeed = I2cBusSpeed.FastMode; var controller = await I2cController.GetDefaultAsync();
sensor = controller.GetDevice(settings); sensor.Write(new byte[] { 0x01 });
sensor.Write(new byte[] { registerHighVal });
sensor.Write(new byte[] { registerLowVal });
} /// <summary>
/// Read data from BH1750FVI
/// </summary>
/// <returns>A double type contains data</returns>
public double Read()
{
byte[] readBuf = new byte[]; sensor.WriteRead(new byte[] { sensorMode }, readBuf); byte temp = readBuf[];
readBuf[] = readBuf[];
readBuf[] = temp; double result = BitConverter.ToUInt16(readBuf, ) / (1.2 * sensorResolution * sensorTransmittance); return result;
} /// <summary>
/// Cleanup
/// </summary>
public void Dispose()
{
sensor.Dispose();
}
}
}
下面解释如何使用
代码包含三个枚举类型,两个构造函数,三个方法。
第一步调用构造函数将 BH1750FVI 实例化。
第二步调用 InitializeAsync() 初始化 I2C 设备
第三步调用 Read() 读取数据,返回的是一个 double 类型的值
当需要关闭设备时,调用 Dispose()
张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器的更多相关文章
- 张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号
考虑到 Raspberry Pi 读取模拟信号是很烦人的事情,更何况是在没人玩的 Windows 10 IoT 下,所以准备正儿八经的写点东西. 需求:使用 Raspberry Pi 读取输出模拟信号 ...
- 张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED
感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧.其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊.百度也搜不 ...
- 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块
HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 H ...
- 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用
今天是大年初二,都去走亲戚了吧,享受一下这难得的能和亲友相聚的时光.而我就不一样了,今天一回到家就又开始瞎折腾了,哈哈哈. 问题背景 最近花了点时间用 ASP.NET Core 2 写了个个人博客,中 ...
- 张高兴的 Windows 10 IoT 开发笔记:串口红外编解码模块 YS-IRTM
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub: https://github.c ...
- 张高兴的 Windows 10 IoT 开发笔记:无线收发芯片 nRF24L01
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
- 张高兴的 Windows 10 IoT 开发笔记:FM 电台模块 KT0803L
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
- 张高兴的 Windows 10 IoT 开发笔记:0.96 寸 I2C OLED
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
- 张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动数码管
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
随机推荐
- 【Beta】 第二次Daily Scrum Meeting
一.本次会议为第二次meeting会议 二.时间:13:30AM-13:55AM 地点:禹州 三.会议站立式照片 四.今日任务安排 成员 昨日任务 今日任务 林晓芳 对已完成的功能进行进一步测试,以便 ...
- 201521123058 java第六次作业
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法 1.1 Object对 ...
- 201521123097《Java程序设计》第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 在本周的学习中,我知道了在类的定义里,还学习到了抽象类以及抽象方法的使用格式. 2. 书面作 ...
- java第一次作业0
lsl321 java第一次作业 #1. 本章学习总结 你对于本章知识的学习总结 本章我们学习了各种java相关文件的使用,以及码云,博客,pat等程序辅助软件,这些对于我们专业的学习有非常大的帮助, ...
- Java多态总结
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 1.定义: 多态:指允许不同类的对象对同一消息做出响应.即同一消息可 ...
- find命令基础讲解
目录 前言 find命令 查找条件 指定搜索层级 根据文件名和inode查找 根据属名属主查找 根据文件类型查找 组合条件 根据文件大小查找 根据时间戳查找 根据权限查找 动作处理 参数替换xargs ...
- 离线安装 Cloudera Manager 5 和 CDH5.10
关于CDH和Cloudera Manager CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloud ...
- 微信小程序语音识别服务搭建全过程解析(项目开源在github)
silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...
- Apache Spark RDD(Resilient Distributed Datasets)论文
Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...
- 在java中使用MongoDB数据库
Java 安装 要想在 Java 程序中使用 MongoDB,需要先确定是否安装了 MongoDB JDBC 驱动,并且要在机器上安装了 Java.查看 Java 教程来确保在机器上安装好 Java. ...