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

简介

基于 BearPi Std 板从入门到放弃 - 引气入体篇(5)(printf打印到串口), 通过I2C接口,读取光照强度并打印到串口;
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出即可 \ 高电平点亮
串口: Usart1
I2C : I2C1
光照强度传感器:BH1750

步骤

  1. 基于上一篇BearPi Std 板从入门到放弃 - 引气入体篇(5)(printf打印到串口) 所讲工程新增I2C1配置
  2. I2C1配置
    保持默认设置即可在这里插入图片描述
  3. 生成项目工程 BearPi_I2C1
  4. Keil打开项目, 加入用户代码
float ReadBH1750(void);

int main(void)
{
	float lux = 0.0;
	...
	while (1)
	{
		HAL_Delay(1000);
		lux = ReadBH1750();
		printf("current lux : %0.3f\r\n", lux);
	}
}

/* USER CODE BEGIN 4 */
float ReadBH1750(void)
{
	uint8_t temp[1]={0x11};
	float lux=0;
	uint8_t ReadData[2]={0};
	
	HAL_I2C_Master_Transmit(&hi2c1, 0x46, temp, 1, 0xff);
	HAL_Delay(180);
	
	HAL_I2C_Master_Receive(&hi2c1, 0x47,ReadData, 2, 0xff);
	lux = (float)((ReadData[0]<<8)|ReadData[1]);
	lux /= 1.2;
	
	return lux;
}
/* USER CODE END 4 */

小扩展

简单加上一个范围判定, 大于此范围则LED自动亮起, 否则LED熄灭
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
	float lux = 0.0;
	uint32_t threshold = 3500;
	uint32_t luxTemp = 0;
  /* USER CODE END 1 */
	...
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		
    /* USER CODE BEGIN 3 */
		HAL_Delay(1000);
		lux = ReadBH1750();
		luxTemp = (uint32_t)(lux * 100);
		printf ("current lux : %0.3f\r\n", lux);
		
		if (luxTemp <= threshold)
		{
			if (HAL_GPIO_ReadPin(USER_LED_GPIO_Port, USER_LED_Pin) == GPIO_PIN_RESET)
			{
				printf ("led's on!\r\n");
				HAL_GPIO_WritePin(USER_LED_GPIO_Port, USER_LED_Pin, GPIO_PIN_SET);
			}
			
		}
		else
		{
			if (HAL_GPIO_ReadPin(USER_LED_GPIO_Port, USER_LED_Pin) == GPIO_PIN_SET)
			{
				printf ("led's off!\r\n");
				HAL_GPIO_WritePin(USER_LED_GPIO_Port, USER_LED_Pin, GPIO_PIN_RESET);
			}
		}
  }
  /* USER CODE END 3 */
}

前言后说

  1. I2C发送接收函数
    HAL_I2C_Master_Transmit(I2C_HandleTypeDef hi2c, uint16_t DevAddress, uint8_tpData,uint16_t Size, uint32_t Timeout);
    HAL_I2C_Master_Receive(I2C_HandleTypeDef hi2c, uint16_t DevAddress, uint8_tpData,uint16_t Size, uint32_t Timeout);

  2. 光照传感器说明
    a. 读地址为0X47,写地址为0X46;
    b. 连续高分辨率模式 : 精度1lux/指令 0x10 / 测量时间 120ms ~ 180ms
    连续高分辨率模式2 : 精度 0.5lux /指令 0x11 / 测量时间120ms ~ 180ms
    低分辨率模式 : 精度4lux / 指令 0x13/ 测量时间 16ms ~ 24ms
    c. 数据手册记录光照强度计算公式 = (Vhi << 8 | Vlo)/1.2
    d. 本次采用 连续高分辨率模式2

BearPi_I2C1 完整项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听我一言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值