BearPi Std 板从入门到放弃 - 先天篇(1)(阶段 : 智慧城市 - 智慧路灯)

简介

复制代码
对前面几篇整合, 做个小小汇总试验, 使用BearPi E53_SC1扩展板
	主芯片: STM32L431RCT6
	串口: Usart1
	扩展板与主板连接: 
	I2C : I2C1 (光照强度传感器:BH1750)
	LED: PB9

步骤

  1. 创建项目

    参考 BearPi Std 板从入门到放弃 - 引气入体篇(1)(由零创建工程到点亮LED)

  2. 初始化Usart1

    参考 BearPi Std 板从入门到放弃 - 引气入体篇(4)(Usart 中断接收), 但不需要启用中断, 直接添加fputc函数可以使用printf打印信息到串口即可, 参考 BearPi Std 板从入门到放弃 - 引气入体篇(5)(printf打印到串口)

  3. I2C1 初始化

    参考 BearPi Std 板从入门到放弃 - 后天篇(1)(I2C1 读取 光照强度)

  4. 初始化 LED灯 PB8

    方法如 步骤1, 推挽输出、不上拉下拉、标签名为E53_SC1_LED即可, 其电路原理图如下, LED_SW为输入, D1为LED灯

  5. 最终创建项目

    STM32CubeMX勾选项目生成为按照功能的不同.c/.h, 参考 STM32CubeMX 一些配置

  6. 添加用户代码

    main.c

c 复制代码
typedef enum
{
	OFF,
	ON
}Smart_City_Status;	

#define LUMINOSITY_THRESHOLD 50 // 光照阈值, 小于此亮度则亮灯

void BH1750Init(void)
{
	uint8_t temp = 0x11; // 连续 H分辨率模式2
	HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDRESS, &temp, 1, 0xff); 
	HAL_Delay(180); // 数据手册内部写完最长等待180ms才能读
}

float ReadBH1750(void)
{
	float lux = 0.0;
	uint8_t temp[2];
	
	HAL_I2C_Master_Receive(&hi2c1, BH1750_READ, temp, 2, 0xff); 
	
	lux = (float) ( ((temp[0]<<8) + temp[1]) / 1.2 );
	
	return lux;
}

void Smart_City_Light_Set(Smart_City_Status status)
{
	if (ON == status)
	{
		HAL_GPIO_WritePin(E53_SC1_LED_GPIO_Port, E53_SC1_LED_Pin, GPIO_PIN_SET);
	}
	else
	{
		HAL_GPIO_WritePin(E53_SC1_LED_GPIO_Port, E53_SC1_LED_Pin, GPIO_PIN_RESET);
	}
}

int main(void )
{
	float lux = 0.0;
	...
	
	BH1750Init(); // BH1750 初始化
	while (1)
	{
		HAL_Delay(1000); // 1s 延时
		lux = ReadBH1750(); // 读取光照强度值
		Smart_City_Light_Set(lux <= LUMINOSITY_THRESHOLD ? ON : OFF); // Smart_City_Light_Set(lux >= LUMINOSITY_THRESHOLD); 
		printf("current Lux: %f\r\n", lux);
	}
	...
}

usart.h

c 复制代码
/* USER CODE BEGIN Header */
#include "stdio.h"
/* USER CODE END Header */

/* USER CODE BEGIN 0 */

int fputc(int ch, FILE *f)
{
	uint8_t temp[1] = {ch};
	HAL_UART_Transmit(&huart1, temp, 1, 2);
	return HAL_OK;
}

/* USER CODE END 0 */

前言后讲

BH1750介绍

1.BH1750 测量步骤

如图所示

(1) 在电路连接正常情况下, 可以直接发送测量指令

(2) 一次测量方式后会自动断电

(3) 连续测试则需要下发指令进行断电

2.BH1750 指令

3.BH1750 测量模式说明

4.BH1750 各种测量时序示例

(1)ADDR 为低电平示例(包含计算)

(2)ADDR 为高电平示例(包含计算)

  1. 本次扩展板BH1750电路图

综上:

  1. ADDR 是 低电平

  2. 写完读模式之后最大等待时间是180ms, 写完或读前需要延时180ms

  3. 连续读模式 除非写断电, 否则会进行一次采集...

  4. 亮度计算公式 = (((高8位)<<8) + (低八位))/1.2

Note:

Keil中Download Flash完需要复位才能执行最新的程序, 参考 BearPi Std 板从入门到放弃 - 丹道心得 (问题收集),烧写完直接复位即可

BearPi_Smart_City 完整工程代码

相关推荐
To_OC5 小时前
大模型蒸馏是啥?说白了就是大厨带徒弟的学问
人工智能·llm·agent
新手来了@click5 小时前
JAVA+AI 简化开发操作|文章被 AI Agent 技术社区收录分享
人工智能
GuWenyue6 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue6 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
老云讲算力市场6 小时前
WAIC首日观察:国产算力与机器人加速落地,奇点算力迎来产业新机遇
人工智能·科技
糖果店的幽灵6 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
小林ixn6 小时前
大模型随机说话的秘密:Temperature 和 Top K 深度解析,LangChain 实战调优
人工智能·langchain
ALINX技术博客6 小时前
ALINX 亮相 2026 WAIC 世界人工智能大会,展示 AI 视觉 FPGA+GPU 异构计算与电子后视镜解决方案
人工智能·ai·fpga·世界人工智能大会·电子后视镜
程序员老猫7 小时前
当 AI 能写 80% 的代码时,后端工程师的核心价值还剩什么?
人工智能
想会飞的蒲公英7 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理