当前位置: 首页 > article >正文

STM32应用开发——BH1750光照传感器详解

BH1750是一款高精度的数字光照传感器,它能够直接输出环境光照强度的数值,测量范围在0~65535勒克斯(lx)。本文将详细介绍如何在STM32平台上使用BH1750传感器,包括硬件连接、软件配置和代码实现。

1. BH1750简介

BH1750具有以下特点:

  • 两线式串行总线接口
  • 内置16位AD转换器,直接数字输出
  • 可调的分辨率,支持高精度和高速度模式
  • 宽泛的测量范围,适用于多种应用场景

2. 硬件接线

BH1750模块通常有以下几个引脚:

  • VCC:电源正
  • GND:电源负
  • SCL:I2C时钟线
  • SDA:I2C数据线
  • ADDR:地址端口(可选)

STM32与BH1750的引脚连接如下:

  • STM32_VCC -> BH1750_VCC(3.3V或5V)
  • STM32_GND -> BH1750_GND
  • STM32_PB6 -> BH1750_SCL(I2C时钟线)
  • STM32_PB7 -> BH1750_SDA(I2C数据线)

3. 软件编程

3.1 IIC设备地址

BH1750有两个设备地址,可以通过ADDR引脚的电平来选择。如果不连接ADDR引脚,默认使用低地址0x23。

3.2 IIC读写

BH1750的通信协议遵循标准的I2C协议。需要发送设备地址、命令和读取数据。

3.3 BH1750指令集

BH1750支持多种指令,用于配置传感器的工作模式和读取数据。常用的指令包括:

  • 0x01:开启设备
  • 0x00:关闭设备
  • 0x10:连续高分辨率模式
  • 0x20:单次高分辨率模式
3.4 BH1750工作流程
  1. 初始化I2C接口。
  2. 向BH1750发送开启命令。
  3. 设置测量模式。
  4. 读取测量结果。
3.5 BH1750测量模式

BH1750支持多种测量模式,包括:

  • 连续高分辨率模式(0x10)
  • 单次高分辨率模式(0x20)
  • 连续低分辨率模式(0x13)
  • 单次低分辨率模式(0x23)

4. 测试代码

以下是STM32的HAL库代码实现:

#include "stm32f1xx_hal.h"
#include "bh1750.h"

// BH1750 I2C地址
#define BH1750_ADDR 0x23

// BH1750初始化函数
void BH1750_Init(void) {
    // 初始化I2C
    HAL_I2C_Init(&hi2c1);
    // 写入电源管理寄存器,唤醒BH1750
    HAL_I2C_Mem_Write(&hi2c1, BH1750_ADDR, BH1750_PWR_MGMT, I2C_MEMADD_SIZE_8BIT, 0x00, 1, HAL_MAX_DELAY);
    // 配置加速度计和陀螺仪
    HAL_I2C_Mem_Write(&hi2c1, BH1750_ADDR, BH1750_CONT_H_RES_MODE, I2C_MEMADD_SIZE_8BIT, 0x10, 1, HAL_MAX_DELAY);
}

// 读取光照强度
float BH1750_ReadLightIntensity(void) {
    uint8_t buf[2];
    // 读取数据
    HAL_I2C_Mem_Read(&hi2c1, BH1750_ADDR, BH1750_DATA0_LOW, I2C_MEMADD_SIZE_8BIT, buf, 2, HAL_MAX_DELAY);
    uint16_t data = (buf[0] << 8) | buf[1];
    // 计算光照强度
    return (float)data / 1.2;
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_I2C1_Init();
    BH1750_Init();

    while (1) {
        float light = BH1750_ReadLightIntensity();
        printf("Light Intensity: %.2f lx\n", light);
        HAL_Delay(1000);
    }
}

5. 注意事项

  1. I2C地址:确保BH1750的I2C地址与代码中的设置一致。
  2. 电源要求:BH1750可以在2.5V至3.6V的电源电压下工作,确保电源供应稳定。
  3. 数据转换:从BH1750读取的原始数据需要根据传感器的量程转换为实际的物理量数值。

通过上述步骤,我们可以在STM32F103C8T6上使用HAL库成功驱动BH1750光照传感器,并实现光照强度的实时监测。这为开发需要光照监测的嵌入式系统提供了基础。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料


http://www.kler.cn/news/357031.html

相关文章:

  • Lucas带你手撕机器学习——线性回归
  • 记录Visio导出图片的文字与latex中文字大小一致的问题,和visio导出适用于论文的高清图片问题
  • Java项目-基于Springboot的应急救援物资管理系统项目(源码+说明).zip
  • 虾​皮​一​面​-​2
  • 数学归纳法——第一数学归纳法、第二数学归纳法步骤和示例
  • SpringBoot中的RedisTemplate对象中的setIfAbsent()方法有什么作用?
  • Mapbox GL 加载GeoServer底图服务器的WMS source
  • 开源的存储引擎--cantian
  • js 字符串与数组的操作
  • python【装饰器】
  • python中_init_.py 到底有啥用?
  • nvm安装,node多版本管理
  • 多级缓存-案例导入说明
  • 自定义多级联动选择器指南(uni-app)
  • Spring Boot实现的电影评论系统开发
  • 开发工具(上)
  • 【数据结构与算法】第2课—数据结构之顺序表
  • 对于从vscode ssh到virtualBox的timeout记录
  • 【JavaScript】LeetCode:76-80
  • 【RestTemplate】重试机制详解