张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器
原文:张高兴的 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 = 1;private double sensorTransmittance = 1;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 = 2;}}/// <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 = 2;}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 = 2;}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[2];sensor.WriteRead(new byte[] { sensorMode }, readBuf);byte temp = readBuf[0];readBuf[0] = readBuf[1];readBuf[1] = temp;double result = BitConverter.ToUInt16(readBuf, 0) / (1.2 * sensorResolution * sensorTransmittance);return result;}/// <summary>/// Cleanup/// </summary>public void Dispose(){sensor.Dispose();}}
}

  下面解释如何使用

  代码包含三个枚举类型,两个构造函数,三个方法。

  第一步调用构造函数将 BH1750FVI 实例化。

  第二步调用 InitializeAsync() 初始化 I2C 设备

  第三步调用 Read() 读取数据,返回的是一个 double 类型的值

  当需要关闭设备时,调用 Dispose()

posted on 2017-09-12 22:59 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/7512705.html

张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器相关推荐

  1. 张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231

    原文:张高兴的 Windows 10 IoT 开发笔记:RTC 时钟模块 DS3231 GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/ ...

  2. 张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号

    考虑到 Raspberry Pi 读取模拟信号是很烦人的事情,更何况是在没人玩的 Windows 10 IoT 下,所以准备正儿八经的写点东西. 需求:使用 Raspberry Pi 读取输出模拟信号 ...

  3. 张高兴的 Windows 10 IoT 开发笔记:FM 电台模块 KT0803L

    GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/KT0803L

  4. 张高兴的 Windows 10 IoT 开发笔记:BMP180 气压传感器

    注意:海拔高度仅供参考 GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/BMP180Demo

  5. 张高兴的 Windows 10 IoT 开发笔记:红外温度传感器 MLX90614

    GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/MLX90614 转载于:https://www.cnblo ...

  6. 张高兴的 Windows 10 IoT 开发笔记:DHT11 温湿度传感器

    GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/DHT11Demo 转载于:https://www.cnbl ...

  7. 张高兴的 Windows 10 IoT 开发笔记:ADXL345 加速度传感器

    GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ADXL345Demo 转载于:https://www.cn ...

  8. 张高兴的 Windows 10 IoT 开发笔记:使用 ULN2003A 控制步进电机

    GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ULN2003A

  9. Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建

    目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ...

最新文章

  1. Ant Design 3.16.2 发布,企业级 UI 设计语言
  2. UIImageView加上圆角
  3. Shell编程基础---shell的结构、执行及变量
  4. python socket服务器_python网络编程学习笔记(三):socket网络服务器
  5. 小程序 数据库 时间_使用云开发数据库构建更生动的小程序
  6. 解决VS2017使用scanf报错问题
  7. OPPO 正式发布 ColorOS 7,“轻”装上阵带来多项亮眼新功能……
  8. mysql打开闪退 ini_解决MySql客户端秒退(找不到my.ini)
  9. mysql8.0登录不上去怎么回事_速看!智慧团建系统登录平台及信息查询入口
  10. java冒泡排序的实际应用_冒泡排序和运用的场景 java语言
  11. 航天宏图PIE-SAR软件高分3数据预处理流程
  12. 关于瀚高数据库的适配
  13. 如何实现自定义倍速播放PC端浏览器中的视频
  14. 漫威商业逆袭成功秘诀
  15. Mac下用docker安装阿波罗Apollo
  16. PS改变icon图标颜色
  17. 阿里云短信服务不对个人开放?如何在阿里云市场免费购买短信服务?云市场购买到的短信服务如何使用?(以谷粒学院项目为例)
  18. Odoo与浪潮合资研发PS Cloud之如何处理序列号
  19. unity 阿拉伯文显示
  20. html图片缩放6,html img图片不变形等比例缩放,兼容ie6

热门文章

  1. BASH SHELL 脚本基础
  2. Nginx负载均衡+tomcat+session共享
  3. Openfiler之一:Openfiler的安装
  4. SQL查询表对应的外键约束
  5. [HNOI2015]接水果
  6. dedecms前端无法调用自定义变量怎么解决
  7. Molecule – 帮助你构建跨平台的 HTML5 游戏
  8. 产品经理如何评估产品机会
  9. Android开发之ViewPager滑动页面效果实现(源代码分享)
  10. 坐标架内转换到坐标架外的公式