python模拟光照环境_树莓派通过C语言和python读取光照传感器

2023-05-16

本实验是树莓派通过C语言和python读取光照传感器BH1750,获取当前环境光照的系数,环境越亮系数越高,并转换成百分比。BH1750FVI是一种用于两线式串行总线接口的数字型光强度传感器集成电路,利用本实验的这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。在笔者的应用就可以用于环境监测。

1、接线图

242184b7436a

运行命令sudo i2cdetect -y 1 查看 地址为地址为0x23,说明成功连接到i2c传感器。

242184b7436a

2、C语言  bh1750.c

#include

#include

#include

#include

int main (void)

{

int handle = wiringPiI2CSetup(0x23);

while(1)

{

wiringPiI2CWrite(handle, 0x21);

delay(1000);

int word = wiringPiI2CReadReg16(handle, 0x00);

int lux = ((word & 0xff00)>>8) | ((word & 0x00ff)<<8);

int percent = (100.0/65535.0)*lux;

printf("Current light: %d Lux (%d%%)\n", lux, percent);

}

return 0;

}

编译:gcc bh1750.c -o bh1750 -lwiringPi

运行:./bh1750

242184b7436a

3、python语言 bh1750.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)

percent = int((100.0/65535.0)*res);

#print() res percent

print res,percent

#result="光照强度: "+str(res)+"lx"

#return result

while True:

getIlluminance()

time.sleep(2)

运行:python bh1750.py

242184b7436a

4、BH1750传感器原理图

242184b7436a

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python模拟光照环境_树莓派通过C语言和python读取光照传感器 的相关文章

  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 打印包含字符串和其他 2 个变量的变量

    var a 8 var b 3 var c hello my name is var a and var b bye print var c 当我运行程序时 var c 会像这样打印出来 hello my name is 8 and 3 b
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 如何使用 AWS Lambda Python 读取 AWS S3 存储的 Word 文档(.doc 和 .docx)文件内容?

    我的场景是 我尝试使用 python 实现从 Aws Lambda 读取 AWS 存储的 S3 word 文档 doc 和 docx 文件内容 下面的代码是我使用的 我的问题是我可以获取文件名 但无法读取内容 def lambda hand
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是

随机推荐