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 完整工程代码

相关推荐
boonya11 分钟前
从阿里云大模型服务平台百炼看AI应用集成与实践
人工智能·阿里云·云计算
amhjdx14 分钟前
三维技术 + AI 动画,焕活古镇科技人文新表达,天南文化助力 2025 年世界互联网大会乌镇峰会
人工智能·科技
鹿子沐23 分钟前
LLamaFactory模型导出量化
人工智能·语言模型
skywalk816326 分钟前
尝试Auto-coder.chat使用星河社区AIStudio部署的几个大模型:文心4.5-21b、Deepseek r1 70b、llama 3.1 8b
linux·服务器·人工智能·大模型·aistudio
鹿子沐30 分钟前
LlamaFactory微调效果与vllm部署效果不一致
人工智能·llama
Akamai中国1 小时前
AI 边缘计算:决胜未来
人工智能·云计算·边缘计算·云服务
brave and determined1 小时前
可编程逻辑器件学习(day3):FPGA设计方法、开发流程与基于FPGA的SOC设计详解
嵌入式硬件·fpga开发·soc·仿真·电路·时序·可编程逻辑器件
陈增林1 小时前
基于PyQt5的AI文档处理工具
人工智能
axuan126511 小时前
10.【NXP 号令者RT1052】开发——实战-RT 看门狗(RTWDOG)
单片机·嵌入式硬件·mcu
BeingACoder1 小时前
【SAA】SpringAI Alibaba学习笔记(二):提示词Prompt
java·人工智能·spring boot·笔记·prompt·saa·springai