查看: 2052|回复: 0

[评测分享] 【ESP32-E Arduino开发板】BH1750光强检测

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2021-8-16 00:42:30 | 显示全部楼层 |阅读模式
    分享到:
    BH1750是一种基于I2C接口的光照强度检测器件,采用该器件的功能模块则更加便于使用,该模块与开发板的线路连接如图1所示,即除了电源引脚接到3.3V电源外,I2C的2个引脚直接连到开发板的对应引脚上。
                                  
    1.jpg
    图1  线路连接
    光强检测的初始化函数及循环函数如图2所示。
    2.jpg
    图2  初始化及循环函数
    此外,辅助BH1750检测的启动和停止函数为:
    1. void BH1750_Start()
    2. {
    3. pinMode(SDA,OUTPUT);
    4. digitalWrite(SDA, HIGH);
    5. digitalWrite(SCL, HIGH);
    6. delayMicroseconds(5);
    7. digitalWrite(SDA, LOW);
    8. delayMicroseconds(5);
    9. digitalWrite(SCL, LOW);
    10. }

    11. void BH1750_Stop()
    12. {
    13. pinMode(SDA,OUTPUT);
    14. digitalWrite(SDA, LOW);
    15. digitalWrite(SCL, HIGH);
    16. delayMicroseconds(5);
    17. digitalWrite(SDA, HIGH);
    18. delayMicroseconds(5);
    19. }
    复制代码

    BH1750的字节发送函数为:
    1. void BH1750_SendByte(char data)
    2. {
    3. char i;
    4. pinMode(SDA,OUTPUT);
    5. digitalWrite(SCL, LOW);
    6. delayMicroseconds(2);
    7. for (i=0; i<8; i++)      //8位计数器
    8. {
    9. if(data&0x80) digitalWrite(SDA, HIGH);
    10. else digitalWrite(SDA, LOW);
    11. data <<= 1;
    12. digitalWrite(SCL, HIGH);    //拉高时钟线
    13. delayMicroseconds(2);    //延时
    14. digitalWrite(SCL, LOW);  //拉低时钟线
    15. delayMicroseconds(2);    //延时
    16. }
    17. }
    复制代码

    BH1750的多字节读取函数为:
    1. void Multiple_Read_BH1750()
    2. {
    3. BH1750_Start();
    4. BH1750_SendByte(SlaveAddress+1);
    5. BH1750_RecvACK();
    6. BUF[0] = BH1750_RecvByte();
    7. BH1750_SendACK(0);
    8. BUF[1] = BH1750_RecvByte();
    9. BH1750_SendACK(1);
    10. BH1750_Stop();
    11. delay(5);
    12. }
    复制代码

    获取并输出光强值的函数为:
    1. void Get_Sunlight_Value()
    2. {
    3. int dis_data=0;
    4. float temp;
    5. char i=0;
    6. unsigned int sd;
    7. Single_Write_BH1750(0x01);
    8. Single_Write_BH1750(0x10);
    9. delay(180);
    10. Multiple_Read_BH1750();
    11. for(i=0;i<3;i++)    dis_data=BUF[0];
    12. dis_data=(dis_data<<8)+BUF[1];
    13. temp=(float)dis_data/1.2;
    14. sd=temp;
    15. Serial.println(sd);
    16. }
    复制代码

    在编程编译后,即可观察检测的结果。在未连接传感器的情况下,其输出如图3所示,在日常光线下其光强则如图4所示。
    3.jpg
    图3  未连接传感器的检测输出
    4.jpg
    图4  日常光强的检测输出
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 10:11 , Processed in 0.124715 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.