ESP8266-Arduino编程实例-BH1745NUC亮度和颜色传感器驱动

BH1745NUC亮度和颜色传感器驱动

1、BH1745NUC介绍

BH1745NUC 是具有 I²C 总线接口的数字颜色传感器 IC。 该 IC 感应红光、绿光和蓝光 (RGB) 并将它们转换为数字值。 高灵敏度、宽动态范围和出色的 Ircut 特性使该 IC 最适合获取环境光的照度和色温,用于调整电视、手机和平板电脑的 LCD 背光。 可以检测非常宽范围的光强度。 (0.005 – 40k lx)

在这里插入图片描述

BH1745NUC具有如下特性:

  • VCC 电压范围:2.3V 至 3.6V
  • 最大灵敏度:0.005Lx/Step
  • 电流消耗:130μA(典型值)
  • 待机模式电流:0.8μA(典型值)
  • 工作温度范围:-40°C 至 +85°C
  • 高灵敏度和宽动态范围 (0.005 – 40k lx)
  • 支持低透光率(暗)窗口
  • 对应I²C总线接口
  • 通过断电功能实现低电流
  • 拒绝 50Hz/60Hz 光噪声
  • 对应1.8V逻辑接口
  • 可编程中断功能
  • 可以选择 2 种 I²C 总线从机地址(ADDR =‘L’:“0111000”,ADDR =‘H’:“0111001”)

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • BH1745NUC传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

传感器引脚 ESP8266开发板引脚
Vin 5v
Gnd Gnd
SCL D1
SDA D2

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次实例使用到的驱动库如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <Wire.h>

// I2C address of the BH1745NUC
#define Addr 0x38

void setup()
{
// Initialise I2C communication as MASTER
Wire.begin();
// Initialise serial communication, set baud rate = 9600
Serial.begin(9600);

// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select mode control register1
Wire.write(0x41);
// Set RGBC measurement time 160 msec
Wire.write(0x00);
// Stop I2C Transmission
Wire.endTransmission();

// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select mode control register2
Wire.write(0x42);
// Set measurement mode is active, gain = 1x
Wire.write(0x90);
// Stop I2C Transmission
Wire.endTransmission();

// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select mode control register3
Wire.write(0x44);
// Set default value
Wire.write(0x02);
// Stop I2C Transmission
Wire.endTransmission();
delay(300);
}

void loop()
{
unsigned int data[8];
for(int i = 0; i < 8; i++)
{
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write((80+i));
// Stop I2C Transmission
Wire.endTransmission();

// Request 1 byte of data from the device
Wire.requestFrom(Addr, 1);

// Read 8 bytes of data
// Red lsb, Red msb, Green lsb, Green msb, Blue lsb, Blue msb
// cData lsb, cData msb
if(Wire.available() == 1)
{
data[i] = Wire.read();
}
delay(300);
}

// Convert the data
int red = ((data[1] & 0xFF) \* 256) + (data[0] & 0xFF);
int green = ((data[3] & 0xFF) \* 256) + (data[2] & 0xFF);
int blue = ((data[5] & 0xFF) \* 256) + (data[4] & 0xFF);
int cData = ((data[7] & 0xFF) \* 256) + (data[6] & 0xFF);

// Output data to serial monitor
Serial.print("Red Color luminance : ");
Serial.println(red);
Serial.print("Green Color luminance : ");
Serial.println(green);
Serial.print("Blue Color luminance : ");
Serial.println(blue);
Serial.print("Clear Data Color luminance : ");
Serial.println(cData);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126794275