树莓派集成BH1750光敏传感器配置
我是代码小白,一个正在做毕设的秃头少年。鄙人拙作,有不当之处,还请指教。
今天介绍的是在树莓派上集成BH1750光照传感器并收集信息的配置过程。
1.硬件
树莓派PI3B+RS
GY-302 BH1750 FVI模块
2.树莓派环境
可以执行 cmake、make等指令。
因为本文的传感器驱动代码使用c语言编写的
3.树莓派与BH1750接线
BH1750光照传感器有五个引脚,按从上到下的顺序是VCC,GND,SCL,SDA,ADDR,我们要用的口只有前四个,ADDR口现在对于我们无用,VCC口连接树莓派的2口,GND口连树莓派的6口,SCL口连接树莓派的5口,SDA口连接树莓派的3口,具体连接如图(2-4)所示。
4.将驱动代码bh1750.c和编译指示性文件CMakeLists.txt复制到树莓派的文件夹中
bh1750.c代码
#include <stdio.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <errno.h>
#define I2C_ADDR 0x23
void usleep(int micro_seconds);
ssize_t write (int fd, const void * buf, size_t count);
ssize_t read(int fd, void * buf, size_t count);
int ioctl( int fd, int request, .../* void *arg */ );
int main(void)
{int fd;char buf[3];char val,value;float flight;fd=open("/dev/i2c-1",O_RDWR);if(fd<0){// printf("打开文件错误:%s\r\n",strerror(errno)); return 1;}if(ioctl( fd,I2C_SLAVE,I2C_ADDR)<0 ){// printf("ioctl 错误 : %s\r\n",strerror(errno));return 1;}val=0x01;if(write(fd,&val,1)<0){// printf("上电失败\r\n");}val=0x11;if(write(fd,&val,1)<0){//printf("开启高分辨率模式\r\n");}usleep(200000);if(read(fd,&buf,3)){flight=(buf[0]*256+buf[1])*0.5/1.2;printf("%6.2f",flight);}else{printf("0.0");}
}
CMakeLists.txt代码
cmake_minimum_required(VERSION 2.8)
project( bh1750.c )
add_executable( bh1750 bh1750.c )
5.编译驱动文件
远程连接树莓派,打开到你放置代码的文件夹
输入命令
cmake .
结束之后在输入
make
如图
之后就是测试代码是否生效
执行命令 ./bh1750
成功的话就会有光照数据传出来
可以看到光照传感器的值已经传出来了。
单位为lux
6.有些树莓派可能没有激活激活i2c串口导致提示 打开文件错误
解决办法:打开树莓派配置界面
sudo raspi-config
选择:
Interfacing Options-> I2C->Enable
不同版本的raspbian选择方式可能不一样
更新i2c配置
sudo apt-get install i2c-tools
我刚开始就是这个错误,到这里已经解决了。
这部分参考链接:
参考i2c激活