这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 在FireBeetle2ESP32-C5上实现光照强度检测及显示

共2条 1/1 1 跳转至

在FireBeetle2ESP32-C5上实现光照强度检测及显示

菜鸟
2025-11-20 23:19:13     打赏

BH1750是一种光照强度传感器,它是以I2C接口进行工作,可以精确的数值来指示光照强度,其单位为lx。

相对于FireBeetle 2 ESP32-C5开发板来说,它有2个I2C接口可供使用,见图1所示。

image.png

图1  引脚排列及功能

为此,可将一组分配给OLED屏,一组分配给光照强度传感器,具体的硬件分配为:

OLED_SCLK----7

OLED_SDIN----6

BH1750_SCLK----10

BH1750_SDIN----9

为便于功能的实现,这里的OLED屏显示采用硬件方式,而光照强度传感器是采用软件模拟的方式。 

对光照强度传感器的初识参数定义为:

#define SCLK_Pin 10

#define SDIN_Pin  9

#define SCL_Set       digitalWrite(SCLK_Pin, HIGH)

#define SCL_Clr       digitalWrite(SCLK_Pin, LOW)

#define SDA_Set       digitalWrite(SDIN_Pin, HIGH)

#define SDA_Clr       digitalWrite(SDIN_Pin, LOW)

#define IIC_SDA_IN      digitalRead(SDIN_Pin)

#define IIC_WRITE      0    

#define IIC_READ       1    

#define SlaveAddress   0x46

unsigned char    BUF[3]; 

对传感器所用引脚的配置函数为:

void BH1750_Init(void){
    pinMode(SCLK_Pin, OUTPUT);
    pinMode(SDIN_Pin, OUTPUT);
}

将数据引脚配置为输入模式的函数为:

void IIC_INPUT_MODE_SET(){
    pinMode(SDIN_Pin, INPUT);
}

将数据引脚配置为输出模式的函数为:

void IIC_OUTPUT_MODE_SET(){
    pinMode(SDIN_Pin, OUTPUT);
}

实现字节数据方式的函数为:

void BH1750_SendACK(char ack){
   IIC_OUTPUT_MODE_SET();    
   SCL_Clr;              
   if(ack) 
   { 
     SDA_Set;
   }
   else 
   { 
     SDA_Clr;
   }
   delayMicroseconds(2);           
   SCL_Set;           
   delayMicroseconds(2);                
   SCL_Clr;  
}

在连接OLED屏的情况下,实现光照强度检测及显示的函数为:

void Get_Sunlight_Value(){
  int dis_data=0;
  float temp;
  char i=0;
  unsigned int sd;
  Single_Write_BH1750(0x01); 
  Single_Write_BH1750(0x10);
  delay(180);
  Multiple_Read_BH1750(); 
  for(i=0;i<3;i++)  dis_data=BUF[0];
  dis_data=(dis_data<<8)+BUF[1];
  temp=(float)dis_data/1.2;
  sd=temp;
  Serial.println(sd);
  display.clear();
  display.drawString(0, 20, "light="); 
  display.drawString(60, 20, String(sd));
  display.display();
}

进行检测的主程序为:

void setup() {
  BH1750_Init();
  display.init();
  display.flipScreenVertically();
  display.setTextAlignment(TEXT_ALIGN_LEFT);  
  display.setFont(ArialMT_Plain_16);
}

void loop() {  
   Get_Sunlight_Value();
   delay(1000); 
}

经程序的上传,其测试效果如图2所示。

image.png

图2 显示效果













关键词: FireBeetle 2 ESP32-C5    

菜鸟
2025-11-21 12:09:33     打赏
2楼

感谢支持!!!


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]