ESP8266-Arduino编程实例-MAX44009环境光传感器驱动

MAX44009环境光传感器驱动

1、MAX44009介绍

MAX44009 环境光传感器具有 I²C 数字输出,非常适合智能手机、笔记本电脑和工业传感器等多种便携式应用。 它的工作电流小于 1µA,是业内功耗最低的环境光传感器,具有 0.045 勒克斯至 188,000 勒克斯的超宽 22 位动态范围。

低光操作允许在深色玻璃应用中轻松操作。

片上光电二极管的光谱响应经过优化,可模拟人眼对环境光的感知,并具有红外和紫外阻挡能力。 自适应增益模块自动选择正确的勒克斯范围以优化计数/lux。

MAX4409有如下特性:

  • 0.045 lux至 188,000 lux范围
  • VCC = 1.7V 至 3.6V
  • ICC = 0.65µA 工作电流
  • -40°C 至 +85°C 温度范围
  • 设备地址选项 – 1001 010x 和 1001 011x

在这里插入图片描述

2、硬件准备

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

硬件接线如下:

传感器引脚 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
#include<Wire.h>
// 设备地址
#define Addr 0x4A

void setup()
{
// I2C总线初始化
Wire.begin();
// 串口初始化
Serial.begin(9600);
// 设备启动
Wire.beginTransmission(Addr);
Wire.write(0x02);
Wire.write(0x40);
Wire.endTransmission();
delay(300);
}

void loop()
{
unsigned int data[2];
Wire.beginTransmission(Addr);
Wire.write(0x03);
Wire.endTransmission();

// 请求读取2位数据
Wire.requestFrom(Addr, 2);
if (Wire.available() == 2)
{
data[0] = Wire.read();
data[1] = Wire.read();
}

// 数据转换为lux
int exponent = (data[0] & 0xF0) >> 4;
int mantissa = ((data[0] & 0x0F) << 4) | (data[1] & 0x0F);
float luminance = pow(2, exponent) \* mantissa \* 0.045;

Serial.print("Ambient Light luminance :");
Serial.print(luminance);
Serial.println(" lux");
delay(500);
}

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