BearPi Std 板从入门到放弃 - 先天神魂篇(3)(RT-Thread I2C设备 读取光照强度BH1750)

简介

使用BearPi IOT Std开发板及其扩展板E53_SC1, SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM  AT24C02, 本次主要就是读取光照强度;
主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C1E53_SC1扩展板 : LED : PB9 \ 推挽输出 \ 高电平点亮光照强度传感器:BH1750EEPROM芯片 : AT24C02

步骤

  1. 创建项目
    参考 BearPi IOT Std板 RT-Thread 工程创建
  2. 开启rt-thread i2c支持
    rtconfig.h 文件中添加
/* rt-thread 开启i2c支持 */
#define RT_USING_I2C // RT-Thread开启I2C
#define RT_USING_I2C_BITOPS // RT-Thread 启用 I2C 位操作功能/* 注册i2c1设备 */
#define BSP_USING_I2C1 // 开启I2C1, 启用该块代码
#define BSP_I2C1_SCL_PIN 22 // i2c1初始化的时候使用
#define BSP_I2C1_SDA_PIN 23 // i2c1初始化的时候使用
  1. env + 指令 scons --target=mdk5 -s 更新支持模块到Keil工程文件中

  2. 编译烧录
    list device # 可以看到i2c1 设备了
    在这里插入图片描述

  3. 添加使用代码

#include <board.h>
#include <rtthread.h>
#include <drv_gpio.h>
#ifndef RT_USING_NANO
#include <rtdevice.h>
#endif /* RT_USING_NANO */int main(void)
{struct rt_i2c_bus_device *i2c_bus;      /* I2C总线设备句柄 */float lux = 0.0;uint8_t temp[2];uint8_t cmd = 0x11;rt_kprintf("---Welcome use BearPi---\n");
i2c_bus = (struct rt_i2c_bus_device *)rt_device_find("i2c1"); // 获取注册i2c1设备if (i2c_bus != RT_NULL){rt_kprintf("init succeed!\n");rt_kprintf("send result: %d\n", rt_i2c_master_send(i2c_bus, 0x23, RT_I2C_WR, &cmd, 1)); // 发送连续读H分辨率模式到BH1750rt_thread_mdelay(180); // 延时180msrt_kprintf("recv result: %d\n", rt_i2c_master_recv(i2c_bus, 0x23, RT_I2C_RD, temp, 2)); //  读取BH1750传来的光照强度数据/* 计算光照强度数据 */lux = (float)((temp[0]<<8)|temp[1]);lux /= (float)(1.2);rt_kprintf("LUX : %f\n", lux);}
}
  1. 编译烧录
  2. 串口打开, 复位查看
    在这里插入图片描述

前言后说

  1. 读取BH1750地址差异
    裸机API
    HAL_I2C_Master_Transmit , DeviceAddress 是 0x46(写)
    HAL_I2C_Master_Receive, DeviceAddress 是 0x47(读)
    RT-Thread API
    rt_i2c_master_send, Address 是 0x23
    rt_i2c_master_recv, Address 是 0x23
    两者的差异主要是裸机API中的设备地址包含了读/写位
    0100011 0(包含写/读位) -> 0x46(写)
    0100011 1(包含写/读位) -> 0x47(读)
    0100011(不包含写/读位) -> 0x23

  2. 使用 rt_kprintf 打印不了浮点数
    将 rt-thread/src/kservice.c 里面 rt_kprintf 实现函数中的
    length = rt_vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args);
    改为
    length = vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args);
    记得加上头文件和Keil中设置Micro Lib库支持

项目代码

参考

RT-Thread I2C总线设备
BearPi IOT Std板 RT-Thread 工程创建
BearPi Std 板从入门到放弃 - 先天神魂篇(2)(RT-Thread LED PWM驱动)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于网络爬虫技术的网络新闻分析

目录 前言 一、网络爬虫技术 二、代理IP 三、网络新闻分析 总结&#xff1a; 前言 随着互联网的发展和普及&#xff0c;网络新闻成为人们获取信息的重要途径。然而&#xff0c;由于网络新闻的数量庞大&#xff0c;分析和处理这些新闻变得愈发困难。本文将介绍如何使用网络…

竞赛保研 python的搜索引擎系统设计与实现

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python的搜索引擎系统设计与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;5分创新点&#xff1a;3分 该项目较为新颖&#xff…

代码随想录算法训练营第55天| 392.判断子序列 115.不同的子序列

JAVA代码编写 392.判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"…

Linux服务器性能优化小结

文章目录 生产环境监测常见专业名词扫盲服务器平均负载服务器平均负载的定义如何判断平均负载值以及好坏情况如果依据平均负载来判断服务器当前状况系统平均负载和CPU使用率的区别 CPU上下文切换基本概念3种上下文切换进程上下文切换线程上下文切换中断上下文切换 查看上下文切…

Java后端问题排查经验

线上出现问题首先应该做什么&#xff0c;不是解决问题&#xff0c;而是先恢复系统&#xff0c;把损失降到最小&#xff0c;有机会的话保留日志等数据用于后期问题复盘分析。解决问题可以后期慢慢复现排查&#xff0c;而线上用户的体验则不能多耽误一分一秒&#xff0c;任何线上…

word怎么分页?学会这几招,轻松掌握分页功能!

Microsoft Word作为办公文档处理的主力工具&#xff0c;其强大的排版功能为用户提供了丰富的文档编辑体验。其中&#xff0c;分页是一个常用但可能被忽视的重要功能&#xff0c;能够使文档结构更清晰、更易读。本文将向您介绍word怎么分页的三种方法&#xff0c;帮助您更好地掌…

Linux消息队列 msgget()、msgsend()、msgrcv()、msgctl()

一、消息队列 1、消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 2、每个数据块都被认为是有一个类型&#xff0c;接收者进程接收的数据块可以有不同的类型值 3、消息队列与管道不同的是&#xff0c;消息队列是基于消息的&#xff0c;而管道是基于字节流的&…

目标跟踪 MOT数据集和可视化

目录 MOT15数据集格式简介 gt可视化 本人修改的GT可视化代码&#xff1a; MOT15数据集格式简介 以下内容转自&#xff1a;【目标跟踪】MOT数据集GroundTruth可视化-腾讯云开发者社区-腾讯云 MOT15数据集下载&#xff1a;https://pan.baidu.com/s/1foGrBXvsanW8BI4eybqfWg?…

C语言学习第二十六天(算法的时间复杂度和空间复杂度)

1、算法效率 衡量一个算法的好坏&#xff0c;是从时间和空间两个方面来衡量的&#xff0c;换句话说就是从时间复杂度和空间复杂度来衡量的 这里需要补充一点&#xff1a;时间复杂度是衡量一个算法的运行快慢&#xff0c;空间复杂度是主要衡量一个算法运行所需要的额外空间。 …

【操作系统】实验五 文件系统

实验目的&#xff1a; 1. 掌握文件系统的基本概念和工作机制 2. 掌握文件系统的主要数据结构的实现 3、掌握软件系统实现算法 实验内容&#xff1a; 设计并实现一个虚拟的一级&#xff08;单用户&#xff09;文件系统程序 提供以下操作 1、文件创建/删除接口命令 2、目录创建/删…

Java基于微信小程序的小区车位租赁系统的设计与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 简介技术路线需求分析用户信息管理车位信息管理车位申请管理论坛信息管理 效果图推荐阅读 简介 …

【强化学习-读书笔记】动态规划(策略评估、价值迭代、策略迭代算法)

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto动态规划 (Dynamic Programming, DP) 是一类优化方法&#xff0c;在给定一个用马尔可夫决策过程 (MDP) 描述的完备环境模型的情况下&#xff0c;其可以计算最优的策…

优化问题笔记(2)

目录 3. 约束优化问题的全局解3.1 凸优化问题3.2 二次优化问题3.3 无约束二次优化问题3.4 一个典型的二次等式约束二次优化问题 Reference 3. 约束优化问题的全局解 3.1 凸优化问题 局部解成为全局解的一类重要的优化问题是所谓凸优化问题. 我们称优化问题 ( f , D ) (f,\ma…

算法-动态规划

动态规划算法 应用场景-背包问题 介绍 动态规划(Dynamic Programming)算法的核心思想是&#xff1a;将大问题划分为小问题进行解决&#xff0c;从而一步步获取最优解的处理算法动态规划算法与分治算法类似&#xff0c;其基本思想也是将待求解问题分解成若干个子问题&#xff0…

Centos7运行pyppeteer报错Browser closed unexpectedly经验总结【必须手动安装谷歌浏览器以自动安装一些依赖】

参考解决方案&#xff1a;pyppeteer.errors.BrowserError: Browser closed unexpectedly - Stack Overflow ldd ~/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome | grep not found 注意&#xff1a;安装google-chrome是为了安装这些缺失的so库&#xff0…

针对这两个趋势,3.0全新新零售商业模式可以采取以下策略:

国内市场确实存在“消费升级”和“消费降级”两个趋势&#xff0c;这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场&#xff0c;消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场&#xff0c;消费者更加…

修改antd表单Form.Item的label颜色的方法

默认的Form.item的标签颜色为黑色&#xff0c;但是如果我是用深色背景&#xff0c;这样的情况下表单就看不清楚label了&#xff0c;就像下面的情况&#xff0c;密码两个字完全看不到&#xff0c;所以想把它改为白色字体&#xff0c;就像上面的账号两个字一样&#xff1a; 所以怎…

随笔记录-springboot_LoggingApplicationListener+LogbackLoggingSystem

环境&#xff1a;springboot-2.3.1 加载日志监听器初始化日志框架 SpringApplication#prepareEnvironment SpringApplicationRunListeners#environmentPrepared EventPublishingRunListener#environmentPrepared SimpleApplicationEventMulticaster#multicastEvent(Applicati…

HarmonyOS ArkTS Tab使用方法(十五)

一&#xff0c;使用方法 Android中Java代码使用fragment进行Tab切换&#xff0c;下面使用HarmonyOS ArkTS 语言实现Tab的使用&#xff0c;代码如下&#xff1a; /** Copyright (c) 2022 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "…

(4)Linux的Redirect 重定向以及打包与压缩

&#x1f4ad; 写在前面 本章仍然是继续对Linux 常用指令进行介绍&#xff0c;将讲解重定向、时间相关的指令、文件查找和打包压缩等指令。我们将初次理解 "Linux下一切皆文件"这一概念&#xff0c;我将通过一个有趣的故事去讲解它。 初识重定向&#xff08;Redire…