基于STM32物联网开发板--环境光采集BH1750

发布时间:2024-01-05  

1 概述


BH1750FVl 是一种用于 RC 总线接口的数字环境光传感器LC。该芯片最适合于获取移动电话液晶显示器和按键背光功率的环境光数据。采集范围在(1~65535 l×)之间。


特征

  • IIC 总线接口

  • 光强数字转换器

  • 16 位分辩率(1 ~65535)

  • 直接数字输出, 省略复杂的计算, 省略标定

  • 不区分环境光源, 接近于视觉灵敏度的分光特性


应用

  • 手机、 液晶电视、 笔记本电脑;

  • 便携式游戏机、数码相机、 数码摄像机;

  • 汽车导航、 PDA、 液晶显示器;



硬件接口:

引脚

说明

B_SCL

PB10I2C时钟线

B_SDA

PB11 I2C数据线

2 软件设计

开发平台:STM32CubeMX +KEIL5

主控MCU:STM32F103RET6

通讯方式:I2C


BH1750引脚初始化代码如下:

GPIO_InitStruct.Pin = B_SCL_Pin|B_SDA_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

//输出模式

GPIO_InitStruct.Pull = GPIO_PULLUP;

//上拉

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


3 I2C通讯协议


I2C协议属于总线协议,半双工,串行通讯,通过设备地址来选中设备。在I2C通讯过程中,一次完整的数据传输需要有起始信号、数据费收发、应答信号、停止信号等几部分组成,下面是对该协议的实现程序示例:

起始信号和停止信号:


//发送起始信号

static void IIC2_Start(void)

{

  

IIC2_SDAout_Mode();//输出模式

IIC2_SCL(1);

IIC2_SDAout(1);

Delay_Us(2);

IIC2_SDAout(0);


IIC2_SCL(0);//方便后续数据收发

}

//停止信号

static void IIC2_Stop(void)

{

IIC2_SDAout_Mode();//输出模式

IIC2_SCL(0);

IIC2_SDAout(0);

Delay_Us(2);

IIC2_SCL(1);

Delay_Us(2);

IIC2_SDAout(1);

}

发送应答和获取应答:


/***********发送应答信号**************************

**

**形参:u8 ack -- 0应答,1非应答

**

***************************************************/

static void IIC2_SendAck(u8 ack)

{

IIC2_SDAout_Mode();//输出模式

IIC2_SCL(0);//告诉从机,主机开始发送数据

  if(ack&0x01)

  {

    IIC2_SDAout(1);

  }

  else IIC2_SDAout(0);

Delay_Us(2);

IIC2_SCL(1);//告诉从机,主机数据发送完成

//方便下一次数据收发

Delay_Us(2);

IIC2_SCL(0);

}

//获取应答信号

static u8 IIC2_Wait_Ack(void)

{

u8 cnt=0;

IIC2_SDAIN_Mode();//配置为输入模式

IIC2_SDAout(1);

IIC2_SCL(0);//告诉从机,主机需要获取数据

Delay_Us(2);

IIC2_SCL(1);//从机数据发送完成,主机开始读取数据

while(IIC2_SDAin)

{

cnt++;

Delay_Us(1);

if(cnt>=100)return 1;

}

Delay_Us(2);

IIC2_SCL(0);//方便下一次数据收发

return 0;

}

读取数据和发送数据:


//发送一个字节数据

static void IIC2_Send_Byte(u8 data)

{

u8 i=0;

IIC2_SDAout_Mode();//输出模式

for(i=0;i< 8;i++)

{

IIC2_SCL(0);//告诉从机,主机开始发送数据

if(data&0x80)IIC2_SDAout(1);

else IIC2_SDAout(0);

Delay_Us(2);

IIC2_SCL(1);//主机数据发送完成

data< <=1;

Delay_Us(2);

}

IIC2_SCL(0);//方便下一次数据收发

}

//读取一个字节数据

static u8 IIC2_Read_Byte(void)

{

u8 i=0;

u8 data=0;

IIC2_SDAIN_Mode();//配置为输入模式

for(i=0;i< 8;i++)

{

IIC2_SCL(0);//告诉从机,主机需要获取数据

Delay_Us(2);

IIC2_SCL(1);//开始读取数据

data< <=1;//默认收到0

if(IIC2_SDAin)data|=0x01;

Delay_Us(2);

}

IIC2_SCL(0);

return data;

}

4 BH1750环境光使用步骤

该模块相关命令如下:


#define BHAddWrite     0x46      //写地址

#define BHAddRead      0x47      //读地址

#define BHPowDown      0x00      //关闭模块

#define BHPowOn        0x01      //打开模块等待指令 

#define BHReset        0x07      //重置数据寄存器仅在BHpowOn模式下有效

#define BHModeH1       0x10      //高分辨率 模式1 单位 11X 测量时间 120ms 

#define BHModeH2       0x11      //高分辨率 模式2 单位 0.51X 测量时间 120ms 

#define BHModeL        0x13      //低分辨率 单位4lx 测量时间16ms  

#define BHSigModeH     0x20      //一次测量高分辨率模式1,然后转到powerdown模式

#define BHSigModeH2    0x21      //同上类似

#define BHSigModeL     0x23      //同上类似

1.初始化模块:①GPIO 引 脚初始化--》 ②发送启动指令(0x01)--》 ③发送重置寄存器命令(0x07)--》 ④设置模式(0x10)-->⑤延时 120ms 以上等待启动。


初始化示例如下:


void BH1750init(void)

{

IIC2_Init();//GPIO初始化

bh_data_send(BHPowOn);    //发送启动信号

bh_data_send(BHReset);    //清除寄存器  

  bh_data_send(BHModeH1);   //设置为模式2

  Delay_Ms(180);            //最高延时180ms

}

2.读取光强数据:①发送起始信号--》 ②发送设备地址+读使能+获取应答--》 ③读取高 8 位数据+发送应答--》 ④读取低 8 位数据+发送应答--》 ⑤发送停止信号。


读取数据示例代码如下:


复制

u16 bh_data_read(void)  

{  

    u16 buf;  

    IIC2_Start();                       //iic开始  

    IIC2_Send_Byte(BHAddRead);         //发送读地址

    IIC2_Wait_Ack();                     //等待响应  

    buf=IIC2_Read_Byte();              //读取数据  

IIC2_SendAck(0);

    buf=buf< <8;                        //读取并保存高八位数据

    buf+=0x00ff&IIC2_Read_Byte();      //读取并保存第八位数据

IIC2_SendAck(1);

    IIC2_Stop();                        //发送停止信号

    return buf;   

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>