GY30模块(BH1750FVI传感器),树莓派系统,python-smbus,iic开启
2.取消对IIC驱动的黑名单
nano /etc/modprobe.d/raspi-blacklist.conf
3.启动IIC驱动
nano /etc/modules
添加i2c-dev ,如下:
5.安装python-smbus
这个安装会附带安装i2c-tools,省的单独安装了
sudo apt-get install python-smbus
6.将BH1750连接到树莓派
GY-30 树莓派
pi@raspberrypi:~$ i2cdetect -y 1
Error: Could not open file dev/i2c-1' or `/dev/i2c/1': No such file or directory
无设备目录
解决方法:
方法一:raspi-config,进入Interfacing Options高级设置,将spi与i2c设置为enable,reboot;
方法二:blacklist里面有i2c,所以i2cdetect检测不到dev里面的设备,现在把blacklist里面的i2c模块注释掉就可以检测到i2cdev。
三、光照强度测量
1.创建iic_bh1750.c
#include <stdio.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <errno.h>
#define I2C_ADDR 0x23
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("开启高分辨率模式2\r\n");
usleep(200000);
if(read(fd,&buf,3)){
flight=(buf[0]*256+buf[1])*0.5/1.2;
printf("光照度: %6.2flx\r\n",flight);
else{
printf("读取错误\r\n");
gcc -o bh1750 iic_bh1750.c
./bh1750
2.与python相比
创建illuminance.py
cd /home/pi/helloworld/illuminance
vim illuminance.py
illuminance.py
#!/usr/bin/env python
# encoding: utf-8
import smbus
import time
#BH1750地址
__DEV_ADDR=0x23
__CMD_PWR_OFF=0x00 #关机
__CMD_PWR_ON=0x01 #开机
__CMD_RESET=0x07 #重置
__CMD_CHRES=0x10 #持续高分辨率检测
__CMD_CHRES2=0x11 #持续高分辨率模式2检测
__CMD_CLHRES=0x13 #持续低分辨率检测
__CMD_THRES=0x20 #一次高分辨率
__CMD_THRES2=0x21 #一次高分辨率模式2
__CMD_TLRES=0x23 #一次分辨率
__CMD_SEN100H=0x42 #灵敏度100%,高位
__CMD_SEN100L=0X65 #灵敏度100%,低位
__CMD_SEN50H=0x44 #50%
__CMD_SEN50L=0x6A #50%
__CMD_SEN200H=0x41 #200%
__CMD_SEN200L=0x73 #200%
bus=smbus.SMBus(1)
bus.write_byte(__DEV_ADDR,__CMD_PWR_ON)
bus.write_byte(__DEV_ADDR,__CMD_RESET)
bus.write_byte(__DEV_ADDR,__CMD_SEN100H)
bus.write_byte(__DEV_ADDR,__CMD_SEN100L)
bus.write_byte(__DEV_ADDR,__CMD_PWR_OFF)
def getIlluminance():
bus.write_byte(__DEV_ADDR,__CMD_PWR_ON)
bus.write_byte(__DEV_ADDR,__CMD_THRES2)
time.sleep(0.2)
res=bus.read_word_data(__DEV_ADDR,0)
#read_word_data
res=((res>>8)&0xff)|(res<<8)&0xff00
res=round(res/(2*1.2),2)
result="光照强度: "+str(res)+"lx"
return result
重启uwsgi服务
sudo systemctl restart emperor.uwsgi.service
在树莓派浏览器输入
http://127.0.0.1/illuminance
或者在电脑浏览器输入 http://树莓派IP/illuminance