这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 过程二、光强获取

共3条 1/1 1 跳转至

过程二、光强获取

菜鸟
2024-11-02 15:30:34     打赏

这里用到的是BH1750

https://docs.m5stack.com/en/hat/hat_dlight

本文分三部分,1、介绍BH1750,2、ESP32 读取BH1750数据串口打印。3、ESP32 读取BH1750数据屏幕显示。

一、BH1750介绍如下。

BH1750 是一种数字光强传感器,用于测量环境光的照度(Lux),广泛应用于智能照明、手机自动亮度调节、环境监测等领域。它由罗姆 (ROHM) 生产,具有高灵敏度和宽测量范围的特点,适用于不同的光照环境。

BH1750 可测量 1 到 65535 Lux 的光照强度,适应暗光和强光环境。这使其适用于室内外环境监测。

BH1750 提供多种工作模式,可以根据需要选择不同的分辨率和功耗:

  • 连续高分辨率模式 (1lx 分辨率)

  • 连续高分辨率模式 2 (0.5lx 分辨率)

  • 连续低分辨率模式 (4lx 分辨率)

  • 一次性高分辨率模式 (在测量一次后进入待机状态)

  • 一次性高分辨率模式 2

  • 一次性低分辨率模式


    image.pngimage.png

BH1750 使用 IIC 接口进行通信,支持标准的 SDA(数据)和 SCL(时钟)引脚。默认 I²C 地址为 0x23。

二、ESP32 -S3 读取BH1750数据

#include <M5Unified.h>
#include <M5_DLight.h>

M5GFX display;
M5_DLight sensor;
uint16_t lux;

void setup() {
    auto cfg = M5.config();
    cfg.output_power = false;
    M5.begin(cfg);
    Serial.begin(115200);
    Serial.println("Sensor begin.....");
    sensor.begin();
    sensor.setMode(CONTINUOUSLY_H_RESOLUTION_MODE);
}

void loop() {
    lux = sensor.getLUX();
    Serial.print("lux: ");
    Serial.println(lux);
    delay(100);
}

image.png

三、屏幕显示光强度数据

#include <M5Unified.h>
#include <M5_DLight.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>

// 显示屏和传感器设置
#define TFT_CS        7       // CS 引脚
#define TFT_DC        39      // DC 引脚
#define TFT_RST       40      // RESET 引脚
#define TFT_BACKLIGHT 45      // 背光控制引脚

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
M5_DLight sensor;

const int buttonA_PIN = 12;  // 按钮 A 引脚
const int buttonB_PIN = 13;  // 按钮 B 引脚

uint16_t lux;  // 光照强度变量

void setup() {
    // 初始化 M5 和传感器
    auto cfg = M5.config();
    cfg.output_power = false;
    M5.begin(cfg);

    Serial.begin(115200);
    Serial.println("Sensor begin.....");
    sensor.begin();
    sensor.setMode(CONTINUOUSLY_H_RESOLUTION_MODE);

    // 初始化显示屏
    pinMode(TFT_BACKLIGHT, OUTPUT);
    digitalWrite(TFT_BACKLIGHT, HIGH); // 打开背光
    tft.init(135, 240);
    tft.setRotation(0);
    tft.fillScreen(ST77XX_BLACK);

    // 初始化按钮引脚
    pinMode(buttonA_PIN, INPUT_PULLUP);
    pinMode(buttonB_PIN, INPUT_PULLUP);
}

void loop() {
    // 获取光照强度数据
    lux = sensor.getLUX();

    // 读取按钮状态
    int buttonA_state = digitalRead(buttonA_PIN);
    int buttonB_state = digitalRead(buttonB_PIN);

    // 清空屏幕
    tft.fillScreen(ST77XX_BLACK);
    tft.setTextColor(ST77XX_WHITE);
    tft.setCursor(10, 10);
    tft.setTextSize(2);

    // 显示按钮状态或光强数据
    if (buttonA_state == LOW && buttonB_state == LOW) { // 同时按下
        tft.print("Button 1 & 2 Pressed");
    } else if (buttonA_state == LOW) { // 按下按钮 A
        tft.print("Button 1 Pressed");
    } else if (buttonB_state == LOW) { // 按下按钮 B
        tft.print("Button 2 Pressed");
    } else { // 没有按下时显示光照强度
        tft.print("lux: ");
        tft.print(lux);
        Serial.print("lux: ");
        Serial.println(lux);
    }

    delay(100);  // 1 秒更新一次
}

image.pngimage.pngimage.png

最后两张图照片里面不明显,2380是强光手电筒强光模式。
564是弱光模式。





关键词: 电子     测光    

院士
2024-11-02 20:31:12     打赏
2楼

请问:附带有BH1750的使用数据没有?


菜鸟
2024-11-03 21:27:34     打赏
3楼

这里只介绍了读取1750的数据。i2c的地址是0x23


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]