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

相关推荐
阡之尘埃2 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
hairenjing11232 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
模拟IC攻城狮4 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
孙同学要努力4 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20214 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
IT B业生4 小时前
51单片机教程(六)- LED流水灯
单片机·嵌入式硬件·51单片机
一枝小雨4 小时前
51单片机学习心得2(基于STC89C52):串口通信(UART)
单片机·嵌入式硬件·51单片机
其实吧35 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
丕羽5 小时前
【Pytorch】基本语法
人工智能·pytorch·python
ctrey_5 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习