一、前期准备

1.环境要求
GY30模块(BH1750FVI传感器),树莓派系统,python-smbus,iic开启

2.取消对IIC驱动的黑名单
nano /etc/modprobe.d/raspi-blacklist.conf

3.启动IIC驱动
nano  /etc/modules
添加i2c-dev ,如下:

4.重启

5.安装python-smbus
这个安装会附带安装i2c-tools,省的单独安装了

  1. sudo apt-get install python-smbus

6.将BH1750连接到树莓派

 GY-30   树莓派
VCC —— 1
GND —— 6
SDA —— 3
SCL —— 5
ADDR —— 不接

二、连接测试

  1. sudo i2cdetect -y 1

问题分析:

  1. pi@raspberrypi:~$ i2cdetect -y 1
  2. 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

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <linux/i2c-dev.h>
  4. #include <errno.h>
  5. #define I2C_ADDR 0x23
  6. int main(void)
  7. {
  8. int fd;
  9. char buf[3];
  10. char val,value;
  11. float flight;
  12. fd=open("/dev/i2c-1",O_RDWR);
  13. if(fd<0)
  14. {
  15. printf("打开文件错误:%s\r\n",strerror(errno)); return 1;
  16. }
  17. if(ioctl( fd,I2C_SLAVE,I2C_ADDR)<0 )
  18. {
  19. printf("ioctl 错误 : %s\r\n",strerror(errno));return 1;
  20. }
  21. val=0x01;
  22. if(write(fd,&val,1)<0)
  23. {
  24. printf("上电失败\r\n");
  25. }
  26. val=0x11;
  27. if(write(fd,&val,1)<0)
  28. {
  29. printf("开启高分辨率模式2\r\n");
  30. }
  31. usleep(200000);
  32. if(read(fd,&buf,3)){
  33. flight=(buf[0]*256+buf[1])*0.5/1.2;
  34. printf("光照度: %6.2flx\r\n",flight);
  35. }
  36. else{
  37. printf("读取错误\r\n");
  38. }
  39. }

编译:
gcc  -o  bh1750  iic_bh1750.c
执行:
./bh1750

2.与python相比

创建illuminance.py

  1. cd /home/pi/helloworld/illuminance
  2. vim illuminance.py

illuminance.py

  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3.  
  4. import smbus
  5. import time
  6.  
  7. #BH1750地址
  8. __DEV_ADDR=0x23
  9.  
  10. #控制字
  11. __CMD_PWR_OFF=0x00 #关机
  12. __CMD_PWR_ON=0x01 #开机
  13. __CMD_RESET=0x07 #重置
  14. __CMD_CHRES=0x10 #持续高分辨率检测
  15. __CMD_CHRES2=0x11 #持续高分辨率模式2检测
  16. __CMD_CLHRES=0x13 #持续低分辨率检测
  17. __CMD_THRES=0x20 #一次高分辨率
  18. __CMD_THRES2=0x21 #一次高分辨率模式2
  19. __CMD_TLRES=0x23 #一次分辨率
  20. __CMD_SEN100H=0x42 #灵敏度100%,高位
  21. __CMD_SEN100L=0X65 #灵敏度100%,低位
  22. __CMD_SEN50H=0x44 #50%
  23. __CMD_SEN50L=0x6A #50%
  24. __CMD_SEN200H=0x41 #200%
  25. __CMD_SEN200L=0x73 #200%
  26.  
  27. bus=smbus.SMBus(1)
  28. bus.write_byte(__DEV_ADDR,__CMD_PWR_ON)
  29. bus.write_byte(__DEV_ADDR,__CMD_RESET)
  30. bus.write_byte(__DEV_ADDR,__CMD_SEN100H)
  31. bus.write_byte(__DEV_ADDR,__CMD_SEN100L)
  32. bus.write_byte(__DEV_ADDR,__CMD_PWR_OFF)
  33. def getIlluminance():
  34. bus.write_byte(__DEV_ADDR,__CMD_PWR_ON)
  35. bus.write_byte(__DEV_ADDR,__CMD_THRES2)
  36. time.sleep(0.2)
  37. res=bus.read_word_data(__DEV_ADDR,0)
  38. #read_word_data
  39. res=((res>>8)&0xff)|(res<<8)&0xff00
  40. res=round(res/(2*1.2),2)
  41. result="光照强度: "+str(res)+"lx"
  42. return result

测试结果

重启uwsgi服务

  1. sudo systemctl restart emperor.uwsgi.service

测试

  1. 在树莓派浏览器输入
  2. http://127.0.0.1/illuminance
  3. 或者在电脑浏览器输入 http://树莓派IP/illuminance

Raspberry Pi开发之旅-光照强度检测(BH1750)的更多相关文章

  1. Raspberry Pi开发之旅-土壤湿度检测

    一.土壤传感器 传感器四个针脚:  针脚 含义 AO 模拟信号输出 DO 数字信号输出 GND 电源负极 VCC 电源正极 二.接线 YL-38和YL69 之间直接用2根母对母线连接. YL-38和树 ...

  2. Raspberry Pi开发之旅-发送邮件记录时间及IP

    由于我使用树莓派的场景大多数是在没有显示器.只用terminal连接它的情况下,所以,它的IP地址有时会在重启之后变掉(DHCP的),导致我无法通过terminal连接上它.然后我又要很麻烦地登录路由 ...

  3. Raspberry Pi开发之旅-同步时间

    使用htpdate同步时间 由于树莓派板子上没有 RTC 硬件和电池,因此树莓派上的系统时间重启是保存不了的.网上已经有人想到应对 NTP 被防火墙封掉类似的需求了,开源的 htpdate 命令直接使 ...

  4. Raspberry Pi开发之旅-空气温湿度检测(DHT11)

    一.首先,简单介绍下DHT11: DHT11是一个温湿度传感器,分为3个接口,分别为:VCC, DATA, GND  引脚号 名称 类型 说明 1 VCC 电源 +级,输入3V-5.5V 2 DATA ...

  5. Raspberry Pi开发之旅-实现云平台监控

    一.基本设置 1 sudo raspi-config 移动到第五项“Enable Camera”,回车进入,按tab键切换到“Enable”回车确认.回到主菜单,tab键切换到“Finish”回车确认 ...

  6. Raspberry Pi开发之旅-WIFI遥控小车

    一.简单介绍树莓派的GPIO口 上图是树莓派2代的接口(不同型号接口会有差异),我们就以此为例来说下这些接口. 1.GPIO介绍 GPIO 英文全称是:General-purpose input/ou ...

  7. Raspberry Pi开发之旅-远程监控

    1.安装辅助工具 1 2 sudo apt-get install libjpeg8-dev sudo apt-get install cmake 2.编辑源文件 1 2 sudo git clone ...

  8. Raspberry Pi开发之旅-控制蜂鸣器演奏乐曲

    一.无源蜂鸣器和有源蜂鸣器 步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这次尝试用GPIO的PWM接口驱动无源蜂鸣器弹奏一曲<一闪一闪亮晶晶>. 无源蜂鸣器: 无源内部没有震荡源, ...

  9. [树莓派(raspberry pi)] 02、PI3安装openCV开发环境做图像识别(详细版)

    前言 上一篇我们讲了在linux环境下给树莓派安装系统及入门各种资料 ,今天我们更进一步,尝试在PI3上安装openCV开发环境. 博主在做的过程中主要参考一个国外小哥的文章(见最后链接1),不过其教 ...

随机推荐

  1. noip模拟赛 梦想

    题目描述 LYK做了一个梦. 这个梦是这样的,LYK是一个财主,有一个仆人在为LYK打工. 不幸的是,又到了月末,到了给仆人发工资的时间.但这个仆人很奇怪,它可能想要至少x块钱,并且当LYK凑不出恰好 ...

  2. 转载 - C++ - placement new

    出处:http://www.cnblogs.com/wanghetao/archive/2011/11/21/2257403.html 有关placement new                  ...

  3. spring-boot | 整合通用Mabatis 分页插件PageHelper

    Mybatis通用Mapper介绍 Mybatis 通用 Mapper 极其方便的使用 Mybatis 单表的增删改查,支持单表操作,不支持通用的多表联合查询 优点: 通用 Mapper 可以极大的方 ...

  4. (15)MOG背景减少

    1.根据上一帧找出变化的东西(如行走的人),消除背景,即不变的东西   motion detection 2.存在自身移动时的噪声和周围物体缓慢移动的噪声(这里播放的视频,我不断移动,背景可能有轻微的 ...

  5. codevs1314 寻宝

    题目描述 Description 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书.说明书的内容如下: 藏宝楼共 ...

  6. Ubuntu 16.04下没有“用户和组”功能的问题解决

    在16.04以前的版本会自带“用户和组”的功能,但是在16.04发现系统只自带了“用户账户”的功能. 问题解决: 1.安装gnome-system-tools sudo apt-get install ...

  7. 5、Java并发性和多线程-相同线程

    以下内容转自http://tutorials.jenkov.com/java-concurrency/same-threading.html(使用谷歌翻译): 相同线程(同一线程)是一种并发模型,其中 ...

  8. FreeMarker与Spring MVC 4集合的HelloWorld示例

    0.整体的项目结构 1.引入POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  9. 《深入理解PHP内核》

    http://www.php-internals.com/ http://www.cnblogs.com/zcy_soft/category/252731.html

  10. 新手学測试----Unit Test(单元測试)

    在程序猿做项目的过程中,每当完毕一个功能,首先自己须要对完毕的功能进行測试.我如今正在做的项目用的工具是VS2012.那么接下来,就说一说在VS2012中是怎样创建单元測试的. 怎样创建单元測试? 在 ...