【RT-Thread笔记】BH1750软件包的使用

BH1750简介

BH1750是一种用于两线制串行总线接口的16位数字型光强度传感器集成电路。利用它的高分辨率可以探测较大范围的光强度变化。(1lx~65535lx)。

创建工程、验证

在RT-Thread中读取BH1750数据有两种方法:一种方法是借助bh1750软件包;另一种方法是直接使用i2c驱动框架读取BH1750数据。

关于直接使用i2c驱动框架读取BH1750数据的方法可以阅读Mculover666兄的这篇:

https://blog.csdn.net/Mculover666/article/details/104675712

本次实验我们借助bh1750软件包来读取BH1750传感器数据,使用RT-Thread Studio V1.1.0来创建工程。

1、添加bh1750软件包

2、打开i2c设备驱动

目前只有软件i2c驱动。保存RT-Thread Settings文件。编译报错:

那是因为我们没有打开I2C相关的宏,drv_soft_i2c.c中模拟了几个i2c,我们要确认我们使用哪一个i2c与bh1750传感器相连。

这里可以看到bh1750的示例的初始化函数中使用了i2c2,所以相应的我们需要在board.h中打开i2c2相关的宏,需要打开、修改哪些宏可以看相关注释:

这里我们使用的是小熊派开发板,bh1750与MCU通过PB6、PB7引脚相连:

虽然PB6、PB7可以配置为硬件i2功能,但是我们这里使用的是软件i2c,所以这里的PB6、PB7是当做gpio来用的。然后我们根据注释的说明把代码改为:

然后编译报错,错误提示这几个宏有问题。反反复复检查,好像没什么问题,为啥就会疯狂报错。隐约记得有些例程例程中表示引脚好像不是这么表示的,而是类似这样的:

每个引脚都有一个新的代号,而这些引脚与代号的关系可以在drv_gpio.c中查看:

可以看到我们的PB6、PB7引脚的代号分别是22、23。然后尝试着把上面的i2c宏代码改为:

编译成功!然后试着读取传感器数据,也成功了。所以,这大概是RT-Thread Studio V1.1.0的一个小bug,模板工程的board.h里关于i2c的注释有问题,严重误导了我们。。

3、下载、验证

若执行sensor read命令无数据输出时,需要打开\components\drivers\sensors\sensor_cmd.c,在sensor_show_data函数后面自行增加环境光照强度打印代码:

case RT_SENSOR_CLASS_LIGHT:
        LOG_I("num:%3d, light:%4d.%d, timestamp:%5d", num, sensor_data->data.light / 10, sensor_data->data.light % 10, sensor_data->timestamp);
        break;

4、编写应用

上面能输入那些命令对bh1750进行测试的前提是官方已经给我们写好了相关应用demo,在sensor_cmd.c中,如:

(1)测试函数

(2)显示数据

除此之外还有其它几个应用相关的函数。

我们也可以模仿sensor_cmd.c里面的代码来写我们自己的应用代码:

左右滑动查看全部代码>>>

static void bh1750_thread_entry(void *parameter)
{
    rt_device_t dev = RT_NULL;
    struct rt_sensor_data data;
    rt_size_t res;

/* 查找bh1750传感器  */
    dev = rt_device_find("li_bh1750");
    if (dev == RT_NULL)
    {
        rt_kprintf("Can't find device:li_bh1750\n");
        return;
    }

/* 以只读模式打开bh1750 */
    if (rt_device_open(dev, RT_DEVICE_FLAG_RDONLY) != RT_EOK)
    {
        rt_kprintf("open device failed!");
        return;
    }

while(1)
    {
        /* 从传感器读取一个数据 */
        res = rt_device_read(dev, 0, &data, 1);
        if (1 != res)
        {
            rt_kprintf("read data failed!size is %d", res);
        }
        else
        {
            rt_kprintf("light:%4d.%d lux\n", data.data.light / 10, data.data.light % 10);
        }
        rt_thread_mdelay(1000);
    }
}

int bh1750_example(void)
{
    rt_thread_t tid;    /* 线程句柄 */

tid = rt_thread_create("bh1750_thread",
                            bh1750_thread_entry,
                            RT_NULL,
                            1024,
                            20,
                            10);
   if(tid != RT_NULL)
   {
        /* 线程创建成功,启动线程 */
        rt_thread_startup(tid);
   }

return 0;
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(bh1750_example, bh1750 example);

运行结果:

使用RT-Thread提供给我的I/O设备管理接口rt_device_find、rt_device_open、rt_device_read、rt_device_close来编写应用。相关框图:

(0)

相关推荐

  • 一个有趣的颜色传感器

    首发:Rice 嵌入式开发技术分享 作者:RiceDIY 简介 很久没有更新文章了,今天这篇文章是给电子芯吧客评测一个传感器--AS7341,这款传感器目前已经写成RT-Thread的软件包了.如果你 ...

  • RT-Thread Nano 3.1.3 正式发布

    Nano版本 VS 完整版本 那么在做应用时,应该如何去选择使用完整版本还是 Nano 版本呢? RT-Thread完整版不仅仅是一个实时内核,还具备丰富的中间层组件,包括如文件系统.图形库等较为完整 ...

  • 【竺】性能测试笔记7——理解TPS、QPS、RT、吞吐量性能指标

    从两个层面定义性能场景的需求指标:业务指标和技术指标 业务指标和性能指标之间的关系: 从图中可以知道: 所有的技术指标都是在有业务场景的前提下制定的 技术指标和业务指标之间也要有详细的换算过程 性能测 ...

  • 超级干货:高瓴资本张磊的投资笔记和思维导图

    超级干货:高瓴资本张磊的投资笔记和思维导图

  • 一则公报案例学习笔记:对修改股东出资期限应否适用资本多数决规则的思考|审判研究

    一.问题的提出 2021年第3期<最高人民法院公报案例>刊登了鸿大(上海)投资管理有限公司与姚锦城公司决议纠纷上诉案,裁判要旨为:"公司股东滥用控股地位,以多数决方式通过修改出资 ...

  • 725分高考状元唐楚玥记笔记的“三字”方法,以及里面藏着的学习秘诀

    你背不下来的书,总有人能背下来:你做不出来的题,总有人能做出来:你不爱做的笔记,总有人把它做到了极致. 不要小看记笔记,同样是一手漂亮的笔记,效果可能千差万别. 湖北725分高考状元唐楚玥的笔记就做到 ...

  • 72条经方笔记,助你精细辩证(建议收藏)

    导读:前人总结的经方运用思路,供大家参考. 1.温病不能发汗,又不能吃泻药,更不能用火攻,只能用白虎汤.真正的温病实证(表现为说胡话,大便干,下同时用强壮滋阴解热药活不用生地用人参也可),可用大量的麦 ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • 高建忠.读方用方笔记(十)临证谈理中丸

    我们上一节谈了理中丸的第一功效,就是止吐泻的,那么这一节我们来谈理中丸方中何为君药?我们先来看看原方: 理中丸方:人参,干姜,炙甘草,白术各三两.上四味,捣筛,蜜和为丸,如鸡子黄许大,以沸汤数合,和一 ...

  • 周哥学习笔记(2021.5.8)

    心理界限存在的意义,正是为了帮助人们控制情绪进入的量,不至于太过冷漠或太过投入,让我们保持一个合适的距离与外界互动. 人没有办法只通过吸收变得更美好和丰富,它必须通过大胆的碰撞和创造.如果不能保持足够 ...

  • 皮囊读书笔记,当没有倾听者时,它就是伙伴

    当没有倾听者时,你就与书对话,它就是你的伙伴. 书的前半段,我一直在思考,为什么叫皮囊,皮囊应该写的是, 我们的生命本来多轻盈,都是被这肉体和各种欲望的污浊给拖住. 从前面几章阿太和父亲的皮囊中似乎领 ...