模块2 STM32程序开发-项目2 STM32 基础应用-任务3 采集光照强度

📅 2026/8/27 19:15:38
模块2 STM32程序开发-项目2 STM32 基础应用-任务3 采集光照强度
基于STM32的物联网环境监测与远程控制系统实训套件-淘宝网任务3 采集光照强度一、任务描述本任务基于STM32F103C8T6 最小系统板使用GY302BH1750数字光照强度传感器采集环境光照数据。通过I2C 通信读取传感器数值在 Keil 中编写、编译、下载程序将光照强度单位 lx通过串口 printf 打印输出掌握 STM32 的 I2C 外设配置、传感器驱动、数据解析的基本方法。二、任务目标1. 知识目标1理解GY302BH1750光照传感器工作原理与 I2C 通信机制。2掌握 STM32I2C 外设配置、时钟、地址、数据读写规则。3熟悉 BH1750 指令设置、连续测量模式、数据转换公式。4掌握串口重定向、浮点数 / 整数格式化输出方法。2. 能力目标1能够完成 GY302 硬件接线VCC5V、GND、SCLPB6、SDAPB7、ADDRGND。2能够在STM32CubeMX 中正确配置 I2C1PB6/PB7。3能够编写 GY302 初始化、指令发送、光照数据读取驱动。4能够实现光照强度lx采集、计算、串口打印。3. 素质目标1培养I2C 时序规范、设备地址严格的嵌入式驱动开发习惯。2提升硬件接线检查、软件调试、数据异常排查能力。3养成先配置外设 → 再初始化传感器 → 最后循环采集的工程流程。三、任务重难点1. 任务重点1I2C1 正确配置PB6 (SCL)、PB7 (SDA)上拉 / 速率标准。2GY302 设备地址ADDR 接地 → 从机地址 0x46。3BH1750 指令下发上电、连续高分辨率模式、读取 16 位数据。4光照强度计算公式光照 (Data_H 8 | Data_L) / 1.2。5通过 printf 输出光照强度 xxx lx。2. 任务难点1I2C 通信失败SDA/SCL 接反、速率过快、无上拉电阻。2BH1750 16 位数据拼接、单位转换。3传感器无应答、数据为 0 或异常跳变。4I2C 驱动与 HAL 库函数正确调用。四、知识准备1.GY302BH1750传感器介绍BH1750GY-302是一种数字型光照强度传感器集成电路专为两线式串行总线接口设计具备着高分辨率和精确度、低功耗和稳定性强等特点它的实物图1所示。图1 GY-302光照强度传感器模块类型数字光照强度传感器量程1 ~ 65535 lx通信接口I2C供电3.3V ~ 5V本任务用 5V 更稳定ADDR 引脚ADDR GND → 从机地址0x46ADDR VCC → 从机地址0x47测量模式连续高分辨率模式最常用2.I2C 基础知识I2C 只需两根线SCL时钟、SDA数据半双工同步通信STM32F103C8T6 使用 I2C1SCL → PB6SDA → PB7标准模式100kHz3.BH1750 核心指令0x01上电0x10连续高分辨率模式1lx 精度4.光照计算公式光照强度(lx) (高8位 8 | 低8位) / 1.25.GPIO 与 I2C 时钟使能__HAL_RCC_I2C1_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();五、硬件连接光照传感器GY302模块与主控STM32F103C8T6的引脚连接如表1所示。表1光照传感器GY302模块与主控STM32F103C8T6的引脚连接编号光照传感器GY302模块主控STM32F103C8T61VCC5V2GNDGND3SCLPB64SDAPB75ADDRGND设置从机地址 0x46硬件连接电路图如图2所示。图2硬件连接电路图六、任务实现任务3.1 STM32CubeMX配置I2C1.在工程根目录下打开TEST.ioc文件在“PinoutConfiguration”选项卡中点击左侧“Connectivity”下的“I2C1”在“Mode”下的“I2C”后选“I2C”如图3所示。图3 STM32CubeMX 配置I2C2.点击“GENERATE CODE”按钮生成代码并在keil软件中打开。任务 3.2 添加GY-302驱动1.将GY302.c文件放到hardware/src目录下。2.将GY302.h文件放到hardware/inc 目录下。3.在项目中添加 GY302.c文件。任务 3.3 修改main.c 代码1.添加光照传感器驱动头文件/* USER CODE BEGIN Includes *///光照传感器驱动#include GY302.h/* USER CODE END Includes */2.光照传感器初始化/* USER CODE BEGIN 2 */Init_BH1750(); //光照传感器初始化printf(任务3 采集光照强度\r\n);/* USER CODE END 2 */3.输出光照强度uint32_t dht_timer 0;uint32_t gy30_timer 0;uint16_t light 0;while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */// 1. 温湿度2秒一次if(HAL_GetTick() - dht_timer 2000){dht_timer HAL_GetTick();if(DHT11_Read_Data(temp, humi) 0) // 0成功{printf(读取成功: 湿度%d%%, 温度%d℃\r\n, humi, temp);}else{printf(DHT11 读取失败\r\n);}}// 2. 光照1秒一次if(HAL_GetTick() - gy30_timer 1000){gy30_timer HAL_GetTick();light Value_GY30();printf(光照强度%d lx\r\n,light);}}/* USER CODE END 3 */任务 3.4 编译、下载、查看结果1.点击编译按钮编译程序。2.点击下载按钮下载程序。3.打开串口调试助手按stm32f103c8t6主控板上的复位键在串口调试助手中输出打印信息如图4所示。图4输出打印信息