STM32读取BH1750光照强度数据打印到串口

news2024/11/26 0:30:51

【1】BH1750是什么?

BH1750是一种数字式环境光强度传感器(Digital Light Sensor),也称为其他名称,例如GY-302传感器、BH1750FVI传感器等。它的工作原理是通过收集光线照射到传感器上的量来测量环境亮度。

使用I2C(Inter-Integrated Circuit)接口,BH1750可以轻松地接入到各种嵌入式系统中,并提供实时的环境光强度数据。其度量范围是1-65535 lux,测量精度可以达到每个范围16位,使其成为许多应用中的理想选择。例如,自动照明控制、日光灯节能控制、智能家居、汽车照明系统和摄影中的曝光控制等等。

BH1750还有一些其他优点。例如,其本身具有非常低的功率消耗(例如小于1μA),这意味着它可以轻松地集成在嵌入式系统中,并且非常适用于电池供电的系统。并且它是一种数字式光强度传感器,相比于模拟式光强度传感器,它的抗干扰性能更好,并且可以一次完成多种测量,例如高分辨率的光强测量、低光强测量等。

img

【2】什么是IIC协议?

IIC(Inter-Integrated Circuit)协议也称为I2C协议,是一种串行通信协议,由Philips公司(现在的NXP公司)于1980年代初期开发。它是一种双向、两线式的串行通信协议,通常被用于板间通信以及嵌入式系统中的设备之间的通信。

IIC协议由两根线构成:数据线(SDA)和时钟线(SCL)。SDA线负责传输数据,而SCL线则负责传输时钟信号。在IIC总线上,多个设备可以连接到同一根时钟线和数据线上,通过设置每个设备的唯一地址来进行通信。IIC协议支持多主机和多从机的通信,也支持多种通信速率(通常为100kHz或400kHz)。

IIC协议是一种简单易用的通信协议,因此被广泛应用于各种嵌入式系统和电子设备中,例如SMBus、PMbus、I2C EEPROM、I2C LCD、I2C ADC、I2C DAC、I2C RTC等等。

【2】STM32读取BH1750数据

下面是使用标准库函数STM32F103C8T6读取BH1750光照强度数据并打印到串口的代码:

#include "main.h"
#include "stm32f1xx_hal.h"
#include "stdio.h"

#define BH1750_ADDRESS 0x23 //BH1750地址

I2C_HandleTypeDef hi2c1;  //IIC外设句柄

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_I2C1_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_I2C1_Init();

  uint8_t buf[2];
  uint16_t value = 0;

  //初始化BH1750
  buf[0] = 0x01; //使用高分辨率模式
  HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDRESS << 1, buf, 1, 100);
  HAL_Delay(100);

  while (1)
  {
    //读取光照强度数据
    buf[0] = 0x00; //高8位
    HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDRESS << 1, buf, 1, 100);
    HAL_I2C_Master_Receive(&hi2c1, BH1750_ADDRESS << 1, buf, 2, 100);

    value = (buf[0] << 8) | buf[1];
    value = value/1.2; //单位转换,参考BH1750手册
    printf("Light intensity: %d lux\n", value);
    
    HAL_Delay(1000);
  }
}

void SystemClock_Config(void) 
{
	RCC_OscInitTypeDef RCC_OscInitStruct = {0};
	RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
	RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
	RCC_OscInitStruct.HSIState = RCC_HSI_ON;
	RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
	RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
	if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 
	{
		Error_Handler();
	}
	RCC_ClkInitStruct.ClockType = RCC
	static void MX_GPIO_Init(void) 
	{
		GPIO_InitTypeDef GPIO_InitStruct = {0};
		__HAL_RCC_GPIOA_CLK_ENABLE();
		/*Configure GPIO pin Output Level */
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
		/*Configure GPIO pin : PA1 */
		GPIO_InitStruct.Pin = GPIO_PIN_1;
		GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
		GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
		HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	}
	static void MX_I2C1_Init(void) 
	{
		hi2c1.Instance = I2C1;
		hi2c1.Init.ClockSpeed = 100000;
		hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
		hi2c1.Init.OwnAddress1 = 0;
		hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
		hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
		hi2c1.Init.OwnAddress2 = 0;
		hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
		hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
		if (HAL_I2C_Init(&hi2c1) != HAL_OK) 
		{
			Error_Handler();
		}
	}
	void MX_USART1_UART_Init(void) 
	{
		huart1.Instance = USART1;
		huart1.Init.BaudRate = 115200;
		huart1.Init.WordLength = UART_WORDLENGTH_8B;
		huart1.Init.StopBits = UART_STOPBITS_1;
		huart1.Init.Parity = UART_PARITY_NONE;
		huart1.Init.Mode = UART_MODE_TX_RX;
		huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
		huart1.Init.OverSampling = UART_OVERSAMPLING_16;
		if (HAL_UART_Init(&huart1) != HAL_OK) 
		{
			Error_Handler();
		}
	}
	void Error_Handler(void) 
	{
		__disable_irq();
		while (1) 
		{
		}
	}

在代码中,使用HAL库函数初始化了I2C接口和USART串口,同时使用了STM32提供的延时库函数HAL_Delay()。在主函数中,首先定义了一个缓冲区buf[2]和一个变量value,缓冲区buf[2]用于存储从BH1750读取的光照强度数据。变量value用于存储经过单位转换后的光照强度值。

接着,使用HAL_I2C_Master_Transmit()函数向BH1750传输一个命令,以初始化BH1750。在这里,将BH1750设置为使用高分辨率模式,以获得更高的测量精度。紧接着,使用HAL_Delay()函数延时100毫秒,以确保BH1750设备初始化成功。

然后,在while循环中,使用HAL_I2C_Master_Transmit()和HAL_I2C_Master_Receive()函数从BH1750读取光照强度数据。读取的光照强度值存储在缓冲区buf[2]中,并进行了单位转换,最后通过printf()函数打印到串口。

在此示例中,使用了printf()函数将光照强度值打印到串口,因此需要在调试器中打开串口窗口才能看到打印的数据。

为了使代码正常工作,应在stm32f1xx_hal_conf.h头文件中将USE_HAL_DRIVER宏定义设置为1。

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

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

相关文章

操作系统 第三章 3.2 错题整理

页面引用串长度是什么意思 合法位存在位 不存在即发生故障 区分好页表项和逻辑地址 是不同的 逻辑地址48bit 偏移量12bit 页号36bit 页表项8B 4KB/8B2^9 一个页面能存放2^9个页表项 页号9bit&#xff0c;36/94 虚拟存储器包括内存和磁盘对换区&#xff0c;工作集要频繁用到&…

深度学习:使用UNet做图像语义分割,训练自己制作的数据集,详细教程

语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同&#xff0c;语义分割需要判断图像每个像素点的类别&#xff0c;进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。我总结了使用UNet网络做图像语义分割的…

我们不一样-康耐视visionpro和apple vision pro

​ 机器视觉Halcon-不同颜色快速识别 康耐视Visionpro是美国cognex visionpro。 康耐视 VisionPro 是领先的计算机式视觉软件。它主要用于设置和部署视觉应用 - 无论是使用相机还是图像采集卡。借助 VisionPro,用户可执行各种功能,包括几何对象定位和检测、识别、测量和对准…

【Web服务应用】LVS负载均衡集群

LVS负载均衡集群 一、企业级集群含义1.1集群的含义1.2LVS一些专业术语 二、企业集群分类2.1负载均衡集群2.2高可用集群2.3高性能运算集群&#xff08;High Performance Computer Cluster&#xff09; 三、负载均衡的架构3.1负载均衡的结构 四、负载均很集群的工作模式4.1NAT模式…

JDBC连接数据库步骤(入门到进阶全)

目录 一、JDBC是什么&#xff1f; 二&#xff0c;JDBC的本质是什么&#xff1f; 为什么要用面向接口编程&#xff1f; 三、JDBC实现原理 四、使用idea开发JDBC代码配置驱动 ​编辑 五、JDBC编程六步概述 六、JDBC编程实现 1.插入实现 2.删除与更新实现 3 .类加载的方式注…

Jetson AGX Orin安装Anaconda、Cuda、Cudnn、Pytorch、Tensorrt最全教程

文章目录 一&#xff1a;Anaconda安装二&#xff1a;Cuda、Cudnn安装三&#xff1a;Pytorch安装四&#xff1a;Tensorrt安装 一&#xff1a;Anaconda安装 Jetson系列边缘开发板&#xff0c;其架构都是arm64&#xff0c;而不是传统PC的amd64&#xff0c;深度学习的环境配置方法…

chatgpt赋能python:Python对接技术在SEO中的应用

Python对接技术在SEO中的应用 Python作为一种高性能的编程语言&#xff0c;被广泛应用于各种领域&#xff0c;其中也包括了搜索引擎优化&#xff08;SEO&#xff09;领域。Python对接技术&#xff0c;也称为API对接技术&#xff0c;是指通过调用API接口来获取数据、信息或实现…

AI数字人打造之sadtalker让照片开口说话

1 sadtalker介绍 西安交通大学也开源了人工智能SadTalker模型&#xff0c;通过从音频中学习生成3D运动系数&#xff0c;使用全新的3D面部渲染器来生成头部运动&#xff0c;可以实现图片音频就能生成高质量的视频。 论文地址&#xff1a;Learning Realistic 3D Motion Coefficie…

chatgpt赋能python:Python屏蔽语句的重要性

Python屏蔽语句的重要性 Python是一种高级程序设计语言&#xff0c;被认为是开发Web应用程序、数据科学和人工智能的最佳语言之一。在编写Python程序时&#xff0c;每个人都会遇到需要屏蔽语句的情况。在本文中&#xff0c;我们将详细介绍Python屏蔽语句的重要性和用法。 什么…

chatgpt赋能python:Python建模仿真:优秀的工具与技巧

Python建模仿真&#xff1a;优秀的工具与技巧 在现代科技时代&#xff0c;建模仿真是许多不同行业的核心部分&#xff0c;帮助工程师和科学家研究解决许多问题。Python作为一种简单易学且强大的语言&#xff0c;已经被广泛应用于建模仿真领域。 Python的优点 Python在建模仿…

用Python进行数学建模(一)

一、导入数据 1.直接赋值 2.读取 Excel 文件 3.代码示例 import pandas as pd# 读取数据文件 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:] ".csv"):dfFile pd.read_csv(readPath, header0, sep",") # 间隔…

chatgpt赋能python:Python嵌入C:一个高效的编程技巧

Python嵌入C&#xff1a;一个高效的编程技巧 作为一名有10年Python编程经验的工程师&#xff0c;我发现在某些情况下&#xff0c;Python嵌入C是一种高效的编程技巧。这种技巧可以使您利用Python的简洁性和高级功能&#xff0c;同时仍然保持程序的执行速度。在本文中&#xff0…

chatgpt赋能python:Python对接硬件:从入门到精通

Python对接硬件&#xff1a;从入门到精通 Python是一门极为强大的编程语言&#xff0c;它不只是用来进行数据分析和Web开发的&#xff0c;也可以用来对接各种硬件设备。这是因为Python具有简单易学&#xff0c;语法简洁&#xff0c;库众多的优点。 什么是Python对接硬件 Pyt…

通过AI工具(ChatGPT接口)生成一字未改的论文,查重率4.2%,可以直接当作论文使用

论文题目&#xff1a;基于AIOT技术的能源控制器的设计以及应用 查重结果&#xff1a;4.2% AI工具国内体验&#xff0c;关注&#xff1a;码视野&#xff0c;回复关键字&#xff1a;1002 一、引言 随着全球经济的快速发展和人口的增长&#xff0c;对能源的需求日益增加。然而&…

nodejs环境变量配置问题记录

问题一&#xff1a;Error: EPERM: operation not permitted, open ‘D:\Program Files\nodejs\node_cache\_cacache\tmp\bccd20 这个问题主要是没有权限导致的。 问题二&#xff1a;使用node命令提示 ‘node‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 这个错误是环…

chatgpt赋能python:Python如何将文件另存为:让您的文件管理更便捷

Python如何将文件另存为&#xff1a;让您的文件管理更便捷 随着数字化时代的来临&#xff0c;文件管理已经成为我们日常工作不可缺少的一部分。当涉及到大量的文件管理时&#xff0c;手动操作可能会浪费大量的时间和精力。 在这种情况下&#xff0c;自动化的解决方案将会是很有…

【玩转Linux操作】用户管理(命令讲解配上样例解释)

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;添加用户⭐命令&#x1f388;useradd 用户名 ⭐演示…

【日志解析】【启发式】Drain:一种用于日志解析的深度解析树

Drain&#xff1a;An Online Log Parsing Approach with Fixed Depth Tree 文章目录 Drain&#xff1a;An Online Log Parsing Approach with Fixed Depth Tree1 论文出处2 背景2.1 背景介绍2.2 针对问题2.3 创新点 3 主要设计思路3.1 Drain整体结构3.2 具体步骤 4 实验设计5 个…

pycharm利用快捷键,快速注释多行代码的方法分享

最近在pycharm的新手学习群里&#xff0c;发现有些小伙伴依然在“手工”进行代码的注释&#xff0c;效率较低。 下面分享pycharm利用快捷键&#xff0c;快速注释多行代码的方法。可以帮助pycharm初学者加倍提升代码的注释效率。 代码注释快捷键 pycharm代码注释的快捷键为 c…

Anaconda 下载安装

文章目录 Anaconda下载Anaconda安装 Anaconda下载 进入官网 https://www.anaconda.com/ &#xff0c;往下滑动&#xff0c;找到下载地址 2. 根据自己的系统&#xff0c;选择相应的安装包 直接从官网下载的话&#xff0c;下载速度较慢&#xff0c;可以使用国内镜像快速下载 百…