软件包贡献者——Sanjay_Wu
Hello,我是Sanjay_Wu,一个毕业差不多一年的嵌入式小菜鸟,我的座右铭是:「不断思考与总结,持续求知和探索」。在刚进入大学时就开始跟着师兄学习电子技术,并参加过各类的比赛以及项目的开发,那时候实验室基本所有人都是学习使用ucos,自己接触ucos的时候觉得它很枯燥,断断续续也没有把它学完。大三和团队做了一个项目,由于团队不会开发服务器,在师兄的推荐下用OneNET平台,也从OneNET平台上学习了OneNET的各类协议,包括MQTT、EDP、HTTP等,这是自己真正接触到物联网方面的东西,有种阿姆斯特朗登上月球的感觉!后来毕业了,从事的工作也是物联网方面的,有一次一个大学“机”友分享了RT-Thread的一些网络编程微信推文,内容讲得非常好,然后就关注并了解RT-Thread,在了解到RT-Thread是一个物联网操作系统之后,就开始学习开RT-Thread。学习过程中发现RT-Thread真的很牛,它不仅仅是一个实时内核,还具备丰富的中间层组件,而最吸引我的还是设备驱动框架、组件以及物联网软件包等,同时还有非常便捷的ENV工具,RT-Thread让学习操作系统变得更有趣,开发变得更简单,debug更容易,后来我就慢慢跟着官方的文档学习和总结。非常崇拜熊大、armink等技术大牛以及他们的无私开源精神,站在他们的肩膀上,让开发者少走了很多弯路,提高了开发效率。
关于BH1750FVI 光传感器驱动软件包
BH1750FVI
传感器软件包提供了使用光照强度传感器 BH1750FVI
基本功能,BH1750FVI 是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化。(1lx-65535lx)。本文介绍该软件包的基本功能,以及 Finsh/MSH
测试命令等,这里我做了两个版本的软件包,新版是基于sensor
框架,目前最新版本(latest)的是基于sensor
框架的,以下介绍的是使用基于sensor框架新版本软件包使用方法,旧版本(非sensor框架)使用方法在:https://github.com/sanjaywu/bh1750_sensor/blob/bh1750-v1.0.0/old_readme.md。
基本功能主要由传感器 BH1750FVI
决定:在输入电压为 2.4v-3.6v
范围内,测量光照强度的量程如下表所示:
BH1750FVI
的分辨率以及测量时间都与测量模式有关,具体如下表所示:
1.1 目录结构
1.2 许可证
BH1750FVI 传感器软件包遵循 Apache-2.0 许可,详见 LICENSE 文件。
1.3 依赖
依赖 RT-Thread I2C
设备驱动框架。
2.获取软件包
使用 BH1750FVI
软件包需要在 RT-Thread 的包管理器中选择它,具体路径如下:
1RT-Thread online packages --->
2 peripheral libraries and drivers --->
3 sensors drivers --->
4 [*] bh1750 sensor driver package, support: ambient light. --->
5 Version (latest) --->
每个功能的配置说明如下:
-
bh1750 sensor driver package, support: ambient light
:选择使用BH1750FVI
传感器软件包; -
Version
:配置软件包版本,默认最新版本; -
版本说明:
v1.0.0
版本是旧版本(非sensor框架)、v2.0.0
和latest
是新版本(基于sensor框架)。
然后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update
命令更新包到 BSP 中。
按照前文介绍,如果你获取的是v2.0.0
和latest
版本,使用的是sensor框架,在获取 BH1750FVI
软件包后,就可以按照下文提供的 API 使用传感器 bh1750
与 Finsh/MSH
命令进行测试,详细内容如下。
3.1 API
BH1750FVI 软件包初始化函数如下所示:
int rt_hw_bh1750_init(const char *name, struct rt_sensor_config *cfg);
该函数需要由用户调用,函数主要完成的功能有,
-
设备配置和初始化(根据传入的配置信息,配置接口设备);
-
注册相应的传感器设备,完成 bh1750 设备的注册;
3.2 初始化示例
1int bh1750_port(void)
2{
3 struct rt_sensor_config cfg;
4
5 cfg.intf.dev_name = "i2c2"; //根据传感器所挂的I2C设备修改
6 cfg.intf.user_data = (void *)BH1750_ADDR;
7 cfg.irq_pin.pin = RT_PIN_NONE;
8
9 rt_hw_bh1750_init("bh1750", &cfg);
10
11 return 0;
12}
13INIT_APP_EXPORT(bh1750_port);
在使用该传感器前,需进行如上的初始,cfg.intf.dev_name = "i2c2";
根据所挂载的i2c修改,初始化成功开机会打印如下信息:
1 \ | /
2- RT - Thread Operating System
3 / | \ 4.0.1 build Apr 30 2019
4 2006 - 2019 Copyright by rt-thread team
5[I/sensor] rt_sensor init success
6[I/sensor.rohm.bh1750] light sensor init success
7msh >
3.3 Finsh/MSH 测试命令
BH1750FVI 软件包提供了丰富的测试命令,项目只要在 RT-Thread 上开启 Finsh/MSH 功能即可。在做一些基于 BH1750FVI
的应用开发、调试时,这些命令会非常实用,它可以准确的读取传感器测量的光照强度。
3.3.1、输入list_device
1msh >list_device
2device type ref count
3-------- -------------------- ----------
4li_bh175 Sensor Device 1
5i2c2 I2C Bus 0
6uart1 Character Device 2
7pin Miscellaneous Device 0
8msh >
查看到对应设备以及注册成功。
3.3.2、输入sensor probe li_bh1750
1msh >sensor probe li_bh1750
2[I/sensor.cmd] device id: 0xff!
3msh >
3.3.3、输入sensor read
1msh >sensor read
2[I/sensor.cmd] num: 0, light: 494.1, timestamp:2647042
3[I/sensor.cmd] num: 1, light: 495.0, timestamp:2647268
4[I/sensor.cmd] num: 2, light: 495.0, timestamp:2647494
5[I/sensor.cmd] num: 3, light: 490.8, timestamp:2647720
6[I/sensor.cmd] num: 4, light: 490.8, timestamp:2647946
7msh >
读取到光照强度数据,单位:lux。
4.注意事项如果使用基于sensor框架的软件包(v2.0.0
、latest
版本),在执行sensor read
之后没有任何打印出光照强度数据,打开\components\drivers\sensors\sensor_cmd.c,在sensor_show_data
函数后面自行增加环境光照强度打印代码:
1case RT_SENSOR_CLASS_LIGHT:
2 LOG_I("num:%3d, light:%4d.%d, timestamp:%5d", num, sensor_data->data.light / 10, sensor_data->data.light % 10, sensor_data->timestamp);
3 break;
5.联系方式维护:Sanjay_Wu
RT-Thread
让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。