第12章 STM32+BH1750光照传感器+OLED模块显示环境光照强度

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

今天给大家介绍一块嵌入式毕设中也经常用到的一款传感器——BH1750光照传感器如下图。该传感器的购买链接和代码我已放在资料里想要资料的同学评论区留下邮箱即可相比光敏传感器它可以直接输出环境光照强度的数值范围是0~65535lx非常适合懒人党各位的传感器买到手后赶紧跟着文章试试吧

 首先BH1750光照传感器上有5根引脚分别是连接3.3V的VCC、接地的GND、连接IIC时钟线的SCL引脚连接IIC数据线的SDA引脚和ADDR引脚。关于ADDR引脚我们可以不用管它。拿到BH1750传感器模块后按照资料提供的接线图下图用杜邦线将STM32、BH1750和USB转TTL模块连接起来再通过烧录器将下面的例程代码烧录进STM32即可看到效果USB转TTL要连接电脑。

 接下来讲解BH1750的STM32例程代码程序。
 

 第11行 delay_init( ) 初始化延时函数执行这条语句后延时效果才会准确。 

第13行 NVIC_PriorityGroupConfig( )是设置中断优先级分组。

第15行 USART_Config( ) 初始化串口1函数该串口用来打印光照强度值。资料提供的程序用的串口1来打印到时大家根据自身需要在uart.h文件里面打开对应的串口注释就可以使用对应的串口了。

第17行 BH1750_Init( ) 初始化光照传感器模块。里面初始化了A6和PA7引脚来进行IIC通讯和发送上电指令给BH1750传感器。

第19~20行 BH1750_Data_Send( )的作用是将括号里的数据通过IIC方式发送给BH1750传感器模块BH1750传感器接收到数据后就会去执行相关操作。
比如第19行的BH1750_Data_Send(0x07)是让BH1750传感器内部存储光照数值的寄存器的值重置为默认值。BH1750_Data_Send(0x10)是设置BH1750传感器工作在高精度测量模式。

第22行 delay_ms(180) 延时180ms,等待模块准备完成并开始测量。以上我们就设置好了BH1750传感器模块的工作模式到时候程序运行完第17~20行这段代码就会按照我们设置的模式开始工作剩下的就是在while(1)里调用第26行的 BH1750_Data_Read( ) 进行读取光照值数据即可。

第26行 是获取真实的光照轻度值BH1750_Data_Read( )函数会返回BH1750传感器检测到的光照值然后除以1.2得到的就是真实的光照强度值了。

第27行 串口1打印真实的光照强度值—LIGHTstreng其中" %8.2f "的作用是让输出的数据保留两位小数。

实现效果如下

串口助手显示BH1750光照值

在上面我们已经学会了使用BH1750模块测量周围环境的光照强度并进行光强的数值打印。接下来我们结合第七章STM32+OLED+DHT11的代码实现OLED上显示光照强度值

首先打开BH1750的工程文件和第七章的工程文件因为BH1750与STM32之间是通过I2C进行通讯的所以我们把I2C驱动源码文件移植到第七章的工程文件中按下图操作。

移植完I2C驱动源码文件后我们就可以将包含STM32与BH1750通讯的函数代码文件也移植过来。由于BH1750的代码工程已将这部分内容都整合在上面移植的BH1750文件内了所以文件方面的移植只要完成上图的操作就可以了。

接下来打开第七章的代码进行下图操作将包含I2C驱动源码和STM32与BH1750通讯的函数代码C文件添加进工程中。

在弹出的窗口进行下图操作。

所需的C文件添加进来后再将移植过来的BH1750文件添加到编译路径。具体操作如下

1.点击图中红色框的“魔法棒”图标。

 2.点击“魔法棒”后会弹出下图中的窗口先点击窗口顶部的 C/C++ 图中1号标位置然后点击图中2号标位置。

 3.完成2的步骤后会弹出下图中的窗口先点击1号标的位置会弹出下面蓝色区域的长条框长条框里面就可以添加我们要新的编译路径。怎么添加呢我们点击长条框右侧的地方2号标位置找到刚从BH1750工程文件移植过来的BH1750文件即可。

 4.如下图所示就是将移植过来的BH1750文件添加到代码编译路径的结果图然后点击OK推出就可以啦。

做完上图操作我们就可以调用bh1750.c里面函数了。

1.首先在第七章代码的main.c开头添加bh750.h头文件第1个箭头指示

2.声明一个float类型变量lightvalue和两个uint32_t类型的变量lightV_HlightV_L2个箭头指示,变量lightvalue存储光照强度数值变量lightV_HlightV_L分别用来存储光照强度数值的整数位和小数位

3.然后再调用BH1750模块初始化函数、重置BH1750内部数据寄存器函数和设置其工作模式的函数让BH1750开始工作第3个箭头指示

4.4个红框的代码实现在OLED上显示”光照lx”的字样

5.5个红框的代码就是将BH1750获取到的光照值转换成光照强度值赋值并将光照强度值的整数和小数位分别复制给变量lightV_HlightV_L 

6.然后再调用第6个框框的代码将光照强度值得整数位和小数位进行显示到此就大功告成啦。

 

按照下面的接线图用杜邦线将每个模块接到STM32上然后将上面移植完成的代码烧录进STM32就可以看到效果了。

 实现效果如下

STM32+OLED+BH1750显示光照值强度

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6