下载地址:BH1750光照强度库文件下载

BH1750光照强度传感器(GY-30)

谢谢观看,有问题需要请教的,请加入STM32学习交流群(QQ群号:470804974),本人QQ号2974278195有问题可添加看到必回,免费领取更多STM32库函数代码,迅速排除疑难杂症

头文件

#ifndef _BH1750_H_
#define _BH1750_H_/************************************
*   连接   VCC-->3.3V      GND-->GND
*    ADDR----->GND
*    SCL ----->pb6
*    sda ----->pb5
*************************************///IO方向设置
#include "bsp_SysTick.h"
#include "timer.h"
#include "./usart/bsp_usart.h"
#define BH1750_SDA_IN()  {GPIOB->CRL&=0XFF0FFFFF;GPIOB->CRL|=(u32)8<<20;}
#define BH1750_SDA_OUT() {GPIOB->CRL&=0XFF0FFFFF;GPIOB->CRL|=(u32)3<<20;}//IO操作函数
#define BH1750_IIC_SCL    PBout(6) //SCL
#define BH1750_IIC_SDA    PBout(5) //SDA
#define BH1750_READ_SDA   PBin(5)  //输入SDA #define    BH1750_SlaveAddress   0x46 //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改//ALT  ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8extern float lux;void bh1750_iic_init(void);
void bh1750_iic_start(void);
void bh1750_iic_stop(void);
void bh1750_send_ack(char ack);
char bh1750_recv_ack(void);
void bh1750_send_byte(char dat);
char bh1750_recv_byte(unsigned char ack);void bh1750_iic_init(void);
void Single_Write_bh1750(unsigned char Reg_Address);
void bh1750_Init(void);
void bh1750_ReadOneTime(void);
void bh1750_ReadContinuous1(void);
u8 getValue(void);#endif

源文件

#include  "bh1750.h"u8 BUF[8];
u16 temp2=0;
float lux=0;void bh1750_iic_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE ); //使能GPIOB时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6);   //PB6,PB7 输出高}/****向BH1750单次写命令****/
void Single_Write_bh1750(unsigned char Reg_Address)
{bh1750_iic_start();bh1750_send_byte(0x46);  //发送器件地址0100 0110   最后一位0,表示写//IIC_Wait_Ack();bh1750_send_byte(Reg_Address);  //IIC_Wait_Ack();bh1750_iic_stop();
}/****BH1750初始化****/
void bh1750_Init(void)
{TIM3_PWM_Init(899,0);bh1750_iic_init();TIM_SetCompare3(TIM3,0);
}//光照强度数据接收和处理
u8 getValue(void)
{unsigned char value=0;Single_Write_bh1750(0x01);Single_Write_bh1750(0x10);Delay_ms(200);bh1750_ReadContinuous1();temp2=BUF[0];temp2=(temp2<<8)+BUF[1];lux=(float)temp2/1.2;    //lux是float型 if((lux>0)&&(lux<50))value=10;else if(lux<75)value=20;else if(lux<100)value=40;else if(lux<125)value=50;else if(lux<150)value=60;else if(lux<175)value=70;else if(lux<200)value=80;else if(lux<250)value=90;else if(lux<280)value=110;else if(lux<300)value=120;else if(lux<320)value=130;else if(lux<340)value=140;else if(lux<360)value=150;else if(lux<380)value=160;else if(lux<400)value=170;else if(lux<410)value=180;else if(lux<450)value=190;   else if(lux<800)value=240;//printf("光照强度:%f   value:%d\r\n",lux,value);TIM_SetCompare3(TIM3,value);return value;//Delay_ms(1000);
}
/****从BH1750单次读Lux****/
/****
模式选择:H-Resolution Mode,分辨率1lux
单次读Opecode:0010 0000 ,即0x20
器件地址:0100011,ADDR接GND
****/
void bh1750_ReadOneTime(void)
{bh1750_iic_start();bh1750_send_byte(0x46);  //发送器件地址0100 0110   最后一位0,表示写bh1750_recv_ack();bh1750_send_byte(0x20);   //发送One time H-Resolution Mode的Opecode 0010 0000,分辨率为1luxbh1750_recv_ack();bh1750_iic_stop();Delay_ms(200);bh1750_iic_start();bh1750_send_byte(0x47);  //bh1750_recv_ack();BUF[0]=bh1750_recv_byte(1);//IIC_Ack();        //主机应答//temp1=temp<<8;BUF[1]=bh1750_recv_byte(0);//IIC_NAck();        //主机不应答    bh1750_iic_stop();//    temp2=BUF[0];
//  temp2=(temp2<<8)+BUF[1];
//  lux=(float)temp2/1.2;    //lux是float型//return lux;//Delay_ms(200);
}/****从BH1750连续读Lux****/
/****
模式选择:H-Resolution Mode,分辨率1lux
连续读Opecode:0001 0000
器件地址:0100011,ADDR接GND
****/
void  bh1750_ReadContinuous1(void)
{
//  u16 temp=0,temp1=0;bh1750_iic_start();bh1750_send_byte(0x46);  //发送器件地址0100 0110   最后一位0,表示写bh1750_recv_ack();bh1750_send_byte(0x10);  //发送Continuous H-Resolution Mode的Opecode 0001 0000,分辨率为1luxbh1750_recv_ack();bh1750_iic_stop();Delay_ms(200);bh1750_iic_start();bh1750_send_byte(0x47);  bh1750_recv_ack();BUF[0]=bh1750_recv_byte(1);BUF[1]=bh1750_recv_byte(0);  //temp=bh1750_recv_byte(1);//temp1=bh1750_recv_byte(0);bh1750_iic_stop();//temp2=temp1+(temp<<8);//lux=(float)temp2/1.2;    //lux是float型}void Conversion(void)
{temp2=BUF[0];temp2=(temp2<<8)+BUF[1];lux=(float)temp2/1.2;    //lux是float型}/**************************************
起始信号
**************************************/
void bh1750_iic_start(void)
{BH1750_SDA_OUT()       //设置SDA线为输出//在开始数据传输前,先让SDA和SCL都拉高BH1750_IIC_SDA=1;    //发送起始条件的数据信号,释放总线Delay_us(2);BH1750_IIC_SCL=1;    Delay_us(5);   //Tsu;STA:起始条件的建立时间大于4.7us。BH1750_IIC_SDA=0;    //SDA由高变为低表示开始信号Delay_us(4);   //起始条件的保持时间大于4usBH1750_IIC_SCL=0;    //钳住IIC总线,准备发送或者接收数据Delay_us(2);
}/**************************************
停止信号
**************************************/
void bh1750_iic_stop(void)
{BH1750_SDA_OUT()       //设置SDA线为输出//IIC_SCL=0;    //此句是调试BH1750时加,2018.03.03BH1750_IIC_SDA=0;   //发送停止信号的数据信号Delay_us(2);BH1750_IIC_SCL=1;   //发送停止信号的时钟信号Delay_us(5);  //停止信号的建立时间大于4usBH1750_IIC_SDA=1;   //发送停止信号Delay_us(4);    //;
}/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void bh1750_send_ack(char ack)
{BH1750_IIC_SCL=0;BH1750_SDA_OUT();BH1750_IIC_SDA=ack;   //主器件应答Delay_us(2);BH1750_IIC_SCL=1;Delay_us(4);        //SCL高电平周期大于4usBH1750_IIC_SCL=0;         //清时钟线,钳住IIC总线以便继续接收Delay_us(2);}/**************************************
接收应答信号
**************************************/
char bh1750_recv_ack(void)
{u8 ucErrorTime=0;BH1750_SDA_IN();     //SDA设置成输入BH1750_IIC_SDA=1;Delay_us(2);BH1750_IIC_SCL=1;Delay_us(2);while(BH1750_READ_SDA){ucErrorTime++;if(ucErrorTime>=250){bh1750_iic_stop();return 1;       }}BH1750_IIC_SCL=0;return 0;
}/**************************************
向IIC总线发送一个字节数据
**************************************/
void bh1750_send_byte(char dat)
{u8 i;BH1750_SDA_OUT();  for(i=0;i<8;i++){if((dat<<i)&0x80)  BH1750_IIC_SDA=1;   //判断发送位else BH1750_IIC_SDA=0;Delay_us(2);BH1750_IIC_SCL=1;     //拉高SCL,通知被控器开始接收数据位Delay_us(4);   //保证SCL高电平周期大于4usBH1750_IIC_SCL=0;    //拉低SCL,允许SDA传输下一位数据。因为只有在SCL=0时才允许SDA的状态发生变化Delay_us(2);}//以下四句是调试BH1750时添加的,2018.03.03//特别注意;用方法三时,以下四句不可去掉,去掉后得到的数有问题//用方法二时,以下四句需注释掉,否则也会有问题,至于原因暂时还不清楚。
//   IIC_SDA=0;
//   Delay_us(2);
//   IIC_SCL=1;
//   Delay_us(2);BH1750_IIC_SCL=0;      //拉低SCL,为下次数据传输做好准备Delay_us(2);
}/**************************************
从IIC总线接收一个字节数据
用来接收从器件传来的数据,ack为1时,发送Ack(产生应答);ack为0时,发送NAck(不产生应答)
**************************************/
char bh1750_recv_byte(unsigned char ack)
{unsigned char i,receive=0;BH1750_SDA_IN();    for(i=0;i<8;i++){BH1750_IIC_SCL=0;    //置SCL为低,准备接收数据位Delay_us(5);  //时钟低电平周期大于4.7usBH1750_IIC_SCL=1;   //置SCL为高,使SDA上数据有效Delay_us(2);receive=receive<<1;if(BH1750_READ_SDA) receive=receive+1;    //读取SDA,把接收的数据位放入receve中,若此处写成IIC_SDA==1,会失败,思考原因?   Delay_us(2);}if(!ack) bh1750_send_ack(1);   //发送NAckelse bh1750_send_ack(0);    //发送Ack//IIC_SCL=0;      //在此处有何用处???(猜测:为下次数据传输做好准备, //钳住IIC总线,准备发送或者接收数据)//Delay_us(2);return receive;
}

下载地址:BH1750光照强度库文件下载

【STM32-库函数】光照强度传感器BH1750 GY-30相关推荐

  1. STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)

    目录 元器件类型选择 接线表设计 实现过程 标准库实现 HAL库实现 代码下载 元器件类型选择 单片机选择:STM32F103 光照度模块:维特智能出品的 BH1750 模块被企业封装过,将采集的光照 ...

  2. STM32之光照强度(BH1750)

    STM32之光照强度BH1750 光照强度BH1750 API BH1750函数使用API IIC函数API 原文件 bh1750.c 头文件 bh1750.h 光照强度BH1750 API BH17 ...

  3. 光照强度传感器BH1750

    一.芯片介绍 BH1750FVI是一款数字型光强度传感器集成芯片.BH1750的内部由光敏二极管.运算放大器.ADC采集.晶振等组成. 结构图 PD二极管通过光生伏特效应将输入光信号转换成电信号,经运 ...

  4. 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计

    目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...

  5. 小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇)

    小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇) 文章目录 前言 一.Keil5+FLYMCU(软件烧录) 二.DHT11温湿度模块驱动代码 三.BH1750光照强度驱动代码 四. ...

  6. ESP32-GY_30光照强度传感器

    ESP32-GY_30光照强度传感器的使用 GY_30光照强度传感器介绍 一.连接引脚 二.使用步骤 1.建仓代码 2.保存运行 总结 GY_30光照强度传感器介绍 GY-30光强传感器特点及使用介绍 ...

  7. stm32+HTU21D温湿度传感器通过usart1发送温湿度数据在串口助手显示

    stm32+HTU21D温湿度传感器 这里就不拍实物图了,我用的是下面这款HTU21D ic是stm32f103vet6 工程代码是io口模拟i2c和传感器通讯 PB6-SCL,PB7-SDA usa ...

  8. STM32的光敏传感器

    STM32的光敏传感器 简介 硬件连接 计算公式 程序 简介 1.照射光敏二极管的光强不同,通过光敏二极管的电流大小就不同,所以可以通过检测电流大小,达到检测光强的目的.利用这个电流变化,我们串接一个 ...

  9. ESP32-C3学习笔记(3):ESP32 C3 IIC总线驱动光照强度传感器(基于ESP-IDF Eclipse)

    一.硬件简介 光照强度传感器使用的是物联网俱乐部的智慧路灯案例扩展板E53_SC1,购买连接 https://item.taobao.com/item.htm?spm=2013.1.w4004-222 ...

最新文章

  1. linux学习笔记-rpm
  2. jquery中$(document).ready(function(){//todo});window.onload时间线关系
  3. [机器学习]总结特征工程干货
  4. 符合c语言常量12abc,《C语言》试题abc合2006上.doc
  5. word取消空格显示为点
  6. 计算机通过逻辑电路实现运算,计算机组成与体系结构数据表示与运算算法和逻辑电路实现.ppt...
  7. AOJ0008 Sum of 4 Integers【暴力】
  8. 计算机三级 信息安全技术 题纲
  9. JavaStudyNotes
  10. 计算机打印机无法打印,电脑打印机无法打印怎么办 打印机不能打印解决办法...
  11. 一份超详细的Spring4常用知识清单!
  12. WebRTC 教程二:WebRTC API 和 Leak
  13. java int16_、uint16_、int32_、uint32_ 数据
  14. scum服务器 指定资源,SCUM服务器配置详解 参数设置推荐
  15. Python学习——Python海龟制图中的文字
  16. 大学综评自招面试 计算机专业,【荔枝高校大会】自招综评面试6月16日扎堆举行,这些准备工作要做好!...
  17. C++ 中的指针参数传递和引⽤参数传递
  18. 【移动安全技术】_第四站_登陆框UI设计
  19. 7、刷牛客网SQL题(一)
  20. 工作流调度工具--Oozie

热门文章

  1. 旅游推荐系统- python- Django
  2. 如何给建筑模型空间添加标签?
  3. ALPHABET翻译软件测试,话说单词alphabet-英语文章阅读-大耳朵英语 - 免费在线英语学习 口语练习 四级听力资料 在线翻译 网络课堂 英语社区...
  4. 湖北沙洋中学2021年6月高考成绩查询,荆门2021年中考时间定于6月19日至22日!全市设7个考区、18个考点…...
  5. 除了上市,小米背后竟然还有这么多开源项目
  6. 百度惊现区块链项目“莱茨狗”,俄罗斯财长称不会允许自由地交易数字货币 | 区块链日报
  7. 2021-12-3 ds18x20包装库 9元钱的 ds18B20 esp8266 micropython 记录
  8. 【AI芯片】2019年AI芯片产业深度研究报告
  9. 全球与中国真空熔断器市场现状及未来发展趋势
  10. 环保监测中的无线传感器网络技术