cubemx stm32 bh1750模块 检测光强度 驱动代码

STM32实现光照强度传感器(BH1750)(标准库与HAL库实现) 阅读详情

CubeMX配置

  1. 打开i2c
  2. 打开与电脑通信的串口

硬件连接

使用的是野火的指南者,型号是stm32f103ve

ADDR引脚接地

在这里插入图片描述

代码

bh1750.c

#include "bh1750.h"
#include "i2c.h"


/*i2c句柄*/
#define bh1750_i2c hi2c1

/*内部函数声明区*/
static uint8_t	BH1750_Send_Cmd(BH1750_MODE cmd);
static uint8_t BH1750_Read_Dat(uint8_t* dat);
static uint16_t BH1750_Dat_To_Lux(uint8_t* dat);



/**
 * @brief	向BH1750发送一条指令
 * @param	cmd —— BH1750工作模式指令(在BH1750_MODE中枚举定义)
 * @retval	成功返回HAL_OK
*/
static uint8_t	BH1750_Send_Cmd(BH1750_MODE cmd)
{
	return HAL_I2C_Master_Transmit(&bh1750_i2c, BH1750_ADDR_WRITE, (uint8_t*)&cmd, 1, 0xFFFF);
}


/**
 * @brief	从BH1750接收一次光强数据
 * @param	dat —— 存储光照强度的地址(两个字节数组)
 * @retval	成功 —— 返回HAL_OK
*/
static uint8_t BH1750_Read_Dat(uint8_t* dat)
{
	return HAL_I2C_Master_Receive(&bh1750_i2c, BH1750_ADDR_READ, dat, 2, 0xFFFF);
}


/**
 * @brief	将BH1750的两个字节数据转换为光照强度值(0-65535)
 * @param	dat  —— 存储光照强度的地址(两个字节数组)
 * @retval	成功 —— 返回光照强度值
*/
static uint16_t BH1750_Dat_To_Lux(uint8_t* dat)
{
	uint16_t lux = 0;
	lux = dat[0];
	lux <<= 8;
	lux |= dat[1];
	lux = (int)(lux / 1.2);
	
	return lux;
}


/**
 * @brief	返回光照强度值
 * @param	无
 * @retval	成功 —— 返回光照强度值
*/
uint16_t Get_BH1750_Value(void)
{
	uint8_t dat[2] = {0};		//dat[0]是高字节,dat[1]是低字节
	uint16_t lux;

	if(HAL_OK != BH1750_Send_Cmd(ONCE_H_MODE))
	{
		return 0;
	}
	HAL_Delay(120);
	if(HAL_OK != BH1750_Read_Dat(dat))
	{
		return 0;
	}
	
	lux = BH1750_Dat_To_Lux(dat);
	return lux;
}

bh1750.h

#ifndef __BH1750_H_
#define __BH1750_H_

#include "stdint.h"

/*外部函数区*/
/*通过指针获取光照强度值*/
uint16_t Get_BH1750_Value(void);


/*	//用法

	uint16_t bh1750_lux;
	bh1750_lux = Get_BH1750_Value();
	printf("current: %5d lux\r\n", bh1750_lux);

*/


/*bh1750地址*/
#define	BH1750_ADDR_WRITE	0x46	//01000110
#define	BH1750_ADDR_READ	0x47	//01000111


typedef enum
{
	POWER_OFF_CMD	=	0x00,	//断电:无激活状态
	POWER_ON_CMD	=	0x01,	//通电:等待测量指令
	RESET_REGISTER	=	0x07,	//重置数字寄存器(在断电状态下不起作用)
	CONT_H_MODE		=	0x10,	//连续H分辨率模式:在11x分辨率下开始测量,测量时间120ms
	CONT_H_MODE2	=	0x11,	//连续H分辨率模式2:在0.51x分辨率下开始测量,测量时间120ms
	CONT_L_MODE		=	0x13,	//连续L分辨率模式:在411分辨率下开始测量,测量时间16ms
	ONCE_H_MODE		=	0x20,	//一次高分辨率模式:在11x分辨率下开始测量,测量时间120ms,测量后自动设置为断电模式
	ONCE_H_MODE2	=	0x21,	//一次高分辨率模式2:在0.51x分辨率下开始测量,测量时间120ms,测量后自动设置为断电模式
	ONCE_L_MODE		=	0x23	//一次低分辨率模式:在411x分辨率下开始测量,测量时间16ms,测量后自动设置为断电模式
} BH1750_MODE;




#endif /*__BH1750_H_*/

main.c

头文件

#include "bh1750.h"
#include "stdio.h"

初始化

uint16_t bh1750_lux;

while循环

	bh1750_lux = Get_BH1750_Value();
	PrintfDebug("current: %05d lux\r\n", bh1750_lux);
	HAL_Delay(100);

演示现象

注:当手电筒照射时才会有较高值。
在这里插入图片描述

参考资料

【STM32Cube_14】使用硬件I2C读写环境光强度传感器(BH1750)

STM32_智慧农业环境测控系统(附代码) stm32单片机开发、温湿度传感器、光敏传感器 阅读详情

相关推荐

STM32 CubeMX配置I2C驱动BH1750(GY-302模块)避坑指南,附HAL库代码

本文详细介绍了如何使用STM32 CubeMX配置I2C驱动BH1750光照传感器(GY-302模块),包括硬件连接、CubeMX工程初始化、HAL库代码实现及典型问题排查。重点解决了I2C通信失败和数据异常等常见问题,并提供了低功耗设计和数据滤波算法等高级优化方案,帮助开发者快速构建稳定的光照强度检测系统。

weixin_30268921的博客 591

STM32使用HAL库BH1750光照度传感器

STM32使用HAL库驱动BH1750光照度传感器。

qq_39649731的博客 4023

「超级干货」STM32CubeMX学习教程之硬件I2C读取光照度

使用STM32 HAL库读写环境光照度传感器(BH1750) 本文将教大家如何快速使用STM32HAL库读取光照度数据。 实现功能:通过App实时监测光照度数据。 戳我五分钟免费构建物联网应用,立即免费体验: 一.使用STM32CubeMX创建一个新工程 1.如下图创建一个新工程: 2.如下图选择自己现有的STM32开发板进行开发: 3.配置时钟源 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 如果使用默认

weixin_50563088的博客 999

STM32硬件接口I2C应用(基于BH1750)

本文主要介绍STM32F4的内部I2C接口的使用方法,包括使用STM32Cube配置i2c接口函数,还介绍了STM32 HAL库中的接口函数,为了验证接口函数的是否能够正常工作,还使用bh1750作为device,以I2C接口作为通信接口,以实现该芯片数据的读写操作。

mftang的博客 2729

STM32驱动BH1750光传感器:硬件连接与软件优化

数字光传感器在现代物联网和嵌入式系统中扮演着重要角色,其中I2C接口的BH1750因其高精度和易用性广受欢迎。该传感器通过内置16位ADC实现0-65535 lx范围的精确测量,其数字输出特性避免了传统光敏电阻需要的额外ADC电路。在STM32开发中,通过CubeMX配置I2C外设并配合HAL库驱动,可以快速实现光照数据采集。实际工程中需要注意电源稳定性、信号完整性和低功耗设计,特别是在智能家居、农业监测等场景下。BH1750与MAX44009等同类传感器相比,在室内环境监测中表现出更好的性价比和稳定性,是

weixin_28366475的博客 348

STM32G474实战:用BH1750光照传感器做个智能台灯自动调光(附完整代码)

本文详细介绍了如何利用STM32G474单片机和BH1750光照传感器构建智能台灯自动调光系统。通过硬件连接、代码实现及PWM调光算法,实现环境光强自适应调节,提供完整的开发教程和实战代码,适合嵌入式系统开发者参考。

weixin_27013291的博客 318

零基础STM32单片机编程入门(十六) BH1750光照强度传感器模块实战含源码

介绍了BH1750光强度模块的原理,驱动时序等,介绍了STM32F103C8T6驱动这个模块进行光强度测量,提供代码

光子物联科技主要介绍STM32单片机,GD32单片机以及各种传感器模块原理以及驱动,适合学生,工程师等学习单片机嵌入式开发、传感器驱动、通信协议等。 7315

STM32CubeMX | 29-使用硬件I2C读取甲醛传感器SGP30

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)。 1. 准备工作 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi)。 SGP30传感器模块 SGP30是一款单一芯片上具有多个传感元件的金属氧化物室内气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号,主要是对空气质量进行检测。TVOC(Total Volatile Organic Compounds,总挥发性有机物)是

Mculover666的博客(嵌入式) 1万+

STM32G474单片机开发入门(二十五)BH1750光照强度传感器模块实战

介绍了BH1750光照强度模块,包括原理,驱动等,使用STM32G474RET6单片机进行模块驱动,显示光强度值,提供参考。

光子物联科技主要介绍STM32单片机,GD32单片机以及各种传感器模块原理以及驱动,适合学生,工程师等学习单片机嵌入式开发、传感器驱动、通信协议等。 2706

STM32平台上GY-30光强度模块的程序移植与应用

GY-30光强度模块是一种常见的环境光线传感器,其核心是BH1750FVI传感器,它使用I2C通讯协议与微控制器连接,测量从0到65535 lux的光照强度。模块通常包括一个电压稳压器和一个BH1750FVI传感器,能够提供较高的精确度和稳定性。

weixin_31974443的博客 557

STM32与GY-30光强度传感器的应用与实践

光强度传感器主要通过感光元件将光照强度转换为电信号,从而测量光的强度。GY-30光强度传感器因其高精度和广泛的应用领域而受到青睐,它通常搭载了BH1750或类似的数字光强度传感器模块,能够通过I2C通信协议快速准确地读取环境光强。STM32的官方开发工具链主要包括::一个图形化工具,用于配置微控制器的初始化代码。它能够帮助开发者快速搭建项目框架,并生成针对特定硬件的初始化代码。:Keil公司提供的集成开发环境,非常适合于ARM Cortex-M系列微控制器的开发。

weixin_34779181的博客 867

四年嵌入式技术沉淀,处女作《STM32CubeMX系列实战教程》诞生

秒变 STM32 大神,STM32CubeMX你值得拥有! 本教程共包含 20 篇文章,手把手带你学会用 STM32CubeMX 配置工程并生成底层初始化代码工程,将有限的精力专注于应用代码编写。

Mculover666的博客(嵌入式) 2万+

STM32 BH1750光照强度模块 函数库+TIMER+USART.7z

STM32 BH1750光照强度模块 函数库,附带TIMER、USART库

【免费下载】 基于STM32F103的BH1750光照传感器驱动程序

基于STM32F103的BH1750光照传感器驱动程序 【下载地址】基于STM32F103的BH1750光照传感器驱动程序 本资源文件提供了一个基于STM32F103微控制器的BH1750光照传感器驱动程序。该驱动程序用于检测环境光强度,并通过I2C接口与STM32F103进行通信。BH1750是一款16位数字输出型的光...

gitblog_09757的博客 707

基于CubeMX(HAL)+STM32+ESP8266+BH1750 通过MQTT协议实现的智能街灯(模拟)-本人专注嵌入式领域

嵌入式优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人单片机开发经验充足,深耕嵌入式领域,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明,项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要嵌入式物联网单片机相关领域开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注嵌入式领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,优快云博客端可私信,为你解惑,欢迎交流。 【建议小白】: 在所有嵌入式开发中硬件部分若不会画PCB/电路,可选择根据引脚定义将其代替为面包板+杜邦线+外设模块的方式,只需轻松简单连线,下载源码烧录进去便可轻松复刻出一样的项目 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能

bh1750 stm32c8t6_bh1750stm32f10x_BH1750_

BH1750 STM32F103驱动,包含整个Keil文件

STM32CubeMX学习教程之硬件I2C读取光照度

使用STM32 HAL库读写环境光照度传感器(BH1750) 本文将教大家如何快速使用STM32HAL库读取光照度数据。 实现功能:通过APP实时监测光照度数据。 程序下载路径:demo程序。 一、使用STM32CubeMX创建一个新工程 1、如下图创建一个新工程: 2、如下图选择自己现有的STM32开发板进行开发: 3、配置时钟源 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 如果使用默认内部时钟(HSI),这一步可以略过; 下面工程我使用的

三明治开发社区的博客 2432

网格自适应实战 | 攻克超弹性体大变形不收敛难题

本文针对超弹性体(如橡胶)在大变形仿真中因网格严重扭曲导致计算不收敛的难题,提供了基于ANSYS网格自适应技术的实战解决方案。文章详细阐述了从问题诊断、模型准备到核心参数设置的完整流程,并介绍了结合混合U-P单元技术的进阶组合策略,有效攻克了材料压缩等场景下的仿真收敛问题。

week9的博客 517

基于stm32环境监测系统

stm32F4环境监测系统

StevenXander的博客 6915

GStreamer Plugin之Gst-nvdewarper

支持三种投影类型 NVDS_META_SURFACE_FISH_PUSHBROOM, NVDS_META_SURFACE_FISH_VERTCYL 和NVDS_META_SURFACE_PERSPECTIVE_PERSPECTIVE。关于每个平面的NvDewarperSurfaceMeta参数(projection_type, surface_index, and source_id)以及内存中有效的矫正平面(num_filled_surfaces)包含RGBA格式的一帧的缓存。矫正后的RGBA格式。

pvmsmfchcs的博客 366

在 SAP BTP 中通过 MTA 自动创建 Service Broker 的原理与实战

本文探讨了如何在SAP BTP的Cloud Foundry环境中通过MTA部署自动创建和注册Service Broker。传统手动注册方式存在依赖管理员、环境一致性差等问题。通过MTA部署可实现自动化Broker注册,利用占位符生成安全凭证,并确保平台端与应用端认证一致。文章详细解析了关键配置参数,包括create-service-broker标志、Broker名称、认证凭据和访问URL的设置方法。这种基础设施即代码(IaC)方式能提升DevOps实践水平,使服务注册成为应用部署流水线的有机组成部分。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200
上一篇: cubemx stm32 基于uln2003模块的步进电机驱动代码
下一篇: 树莓派Pico 基于MicorPython编程 第一话:树莓派环境配置及安装Thonny
嵌入一下?
博客等级 码龄6年 324粉丝 66原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入一下?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值