BearPi Std 板从入门到放弃 - 筑基(1)(RT-Thread 智慧路灯)

news2024/11/17 0:24:58

简介

使用BearPi IOT Std开发板及其扩展板E53_SC1, SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM  AT24C02, 智慧路灯功能, 实现亮度达到对应阈值则开启点灯
主板: 
	主芯片: STM32L431RCT6
	LED : PC13 \ 推挽输出\ 高电平点亮
	串口: Usart1
	I2C使用 : I2C1

E53_SC1扩展板 : 
	LED : PB9 \ 推挽输出 \ 高电平点亮
	光照强度传感器:BH1750
	EEPROM芯片 : AT24C02
当 读取 BH1750 的值达到设定值, 打开LED灯, 低于设定值, 关闭LED灯	

电路图原理图一览

扩展板 BH1750
在这里插入图片描述
扩展板 LED
在这里插入图片描述

步骤

  1. 创建工程, 初始化I2C, 添加I2C1设备到RT-Thread系统中
    参考 BearPi Std 板从入门到放弃 - 先天神魂篇(3)(RT-Thread I2C设备)

  2. 添加用户代码
    a. LED灯设定代码

#define SMART_SL_LED_PIN GET_PIN(B, 9)

typedef enum
{
	OFF,
	ON
}Smart_Streetlights_Status;


void Smart_Sl_LED_Set(Smart_Streetlights_Status status)
{
	rt_pin_write(SMART_SL_LED_PIN, status == OFF ? PIN_LOW : PIN_HIGH);
}

b. BH1750 功能代码

rt_err_t smart_sl_bh1750_init(void)
{
	uint8_t cmd = 0x11; // 连续读H分辨率模式2
	if (RT_NULL == i2c_bus)
	{
		i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(SMART_SL_I2C_NAME); // 获取注册i2c1设备
	}
	
	if (RT_NULL == i2c_bus)
	{
		rt_kprintf("[smart_sl_led_set] get i2c1 device failed!\n");
		return -RT_ERROR;
	}
	
	if (1 != rt_i2c_master_send(i2c_bus, SMART_SL_BH1750_ADDR, RT_I2C_WR, &cmd, 1)) // 发送指令, 开启连续读模式
	{
		rt_kprintf("[smart_sl_led_set] send command failed!\n");
		return -RT_ERROR;
	}
	rt_thread_mdelay(180); // 写指令后最长读取等待时间180ms
	return RT_EOK;
}

rt_err_t smart_sl_bh1750_read(float *pLux)
{
	uint8_t temp[2];
	rt_uint8_t recvLength = sizeof(temp)/sizeof(uint8_t);
	
	if (recvLength != rt_i2c_master_recv(i2c_bus, 0x23, RT_I2C_RD, temp, recvLength))
	{
		return -RT_ERROR;
	}
	
	/* 计算光照强度数据 */
	*pLux = (float)((temp[0]<<8)|temp[1]);
	*pLux /= (float)(1.2);
	
	return RT_EOK;
}

c. 初始化和线程创建部分

rt_err_t smart_sl_init(void)
{
	rt_pin_mode(SMART_SL_LED_PIN, PIN_MODE_OUTPUT);
	if (RT_EOK == smart_sl_bh1750_init())
	{
		initialized = 1;
		return RT_EOK;
	}
	return -RT_ERROR;
}


static void smart_sl_entry(void *parameter)
{
	float lux = 0.0;
	uint16_t fCnt = 0; // 错误次数, 不可原谅次数
	uint16_t fMaxTime = 10;
	Smart_Streetlights_Status status = OFF;
	if (!initialized)
	{
		if (RT_EOK  != smart_sl_init())
		{
			rt_kprintf("fail to init smart streetlights!\n");
			return;
		}
	}
	
	smart_sl_led_set(OFF); 
	while (1)
	{
		rt_thread_mdelay(500); // 500ms 遍历一次
		if (RT_EOK != smart_sl_bh1750_read(&lux))
		{
			fCnt += 1;
			if (fCnt >= fMaxTime)
			{
				rt_kprintf("The BH1750 has read an error more than %d times!\n", fMaxTime);
				fCnt -= 1;
			}
			continue;
		}
		
		if (lux > luminosity_threshold)
		{
			if (status == OFF)
				continue;
			status = OFF;
		}
		else
		{
			if (status == ON)
				continue;
			status = ON;
		}
		smart_sl_led_set(status); 
		rt_kprintf("The current light intensity is %flx, and the LED light is turned %s.\n", lux, status == ON ? "on" : "off");
	}
}

static int smart_sl(int argc, char *argv[])
{
	 rt_thread_t tid;
	 rt_err_t ret = RT_EOK;
	 tid = rt_thread_create("smart_sl",
												smart_sl_entry,
												RT_NULL,
												512,
												RT_THREAD_PRIORITY_MAX / 3,
												20);
	 if (tid != RT_NULL)
	 {
			rt_thread_startup(tid);
	 }
	 else
	 {
			ret = RT_ERROR;
	 }
	 return ret;
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(smart_sl, led sample);

扩展目标

实现 smart_sl on/off [阈值]指令扩展
可以打开/关闭,及设定阈值

代码

完整代码

参考

BearPi Std 板 创建I2C设备的过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1309635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序

排序算法(二) 前面介绍了排序算法的时间复杂度和空间复杂数据结构与算法—排序算法&#xff08;一&#xff09;时间复杂度和空间复杂度介绍-CSDN博客&#xff0c;这次介绍各种排序算法——冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序。 文章目录 排序算法(二)…

transformer文章翻译【Attention is all you need】

参考博客&#xff1a;https://blog.csdn.net/nocml/article/details/103082600 论文目录 摘要1. Introduction2. Background3. Model Architecture3.1 Encoder and Decoder Stacks3.2 Attention3.2.1 Scaled Dot-Product Attention3.2.2 Multi-Head Attention3.2.3 Application…

实验室移液器配套PFA吸头性能稳定特氟龙吸头特点

PFA吸头是一种高性能移液器配件&#xff0c;由聚全氟丙烯&#xff08;Perfluoroalkoxy&#xff09;材料制成。这种材料具有优异的耐化学品、耐热和电绝缘性能&#xff0c;使得PFA吸头在应用中表现出色。 首先&#xff0c;PFA吸头具有卓越的耐化学腐蚀性能。无论是酸性溶液、碱性…

环境保护:人类生存的最后机会

随着科技的进步和人类文明的不断发展&#xff0c;地球上的自然资源也在以惊人的速度消耗殆尽。人类对于环境的无止境的掠夺&#xff0c;使得我们的地球正面临着前所未有的环境危机。环境污染、全球变暖、大规模灭绝等问题不断困扰着我们&#xff0c;似乎指向了人类生存的最后机…

世微AP5414 锂电池升降压 恒流恒压 LED电源驱动IC

产品简介 AP5414 是一种输入电压范围宽&#xff08;0.8~5.5V&#xff09;&#xff0c;可调恒定电流和限定电流两种模式来 驱动白光 LED 而设计的升压型 DC/DC 变换器。该器件能利用单节或双节干电池驱动单 颗大功率白光 LED&#xff0c;同样可以利用一节锂电池驱动两颗、三颗或…

docker gpu 详细部署 video-retalking(跟着步骤打指令就完事了)

本地操作系统&#xff1a;centos 搞个小塔 1、首先在centos下安装宝塔&#xff08;后面会用到&#xff09; 建个容器 2、根据自己要的python版本修改一下语句&#xff0c;这里拉取的是python3.8.8的镜像 docker run -itd --name video-retalking --gpus all --shm-size&qu…

医院污水处理设备远程监控超标报警解决方案

行业背景 近年来&#xff0c;我国医疗机构建设得到了巨大的发展。根据《2022年我国卫生健康事业发展统计公报》&#xff0c;2022年末&#xff0c;全国医疗卫生机构总数达1032918个。截至2022年10月&#xff0c;根据全国排污许可证管理信息平台&#xff0c;共有 13316家医院核发…

ElasticSearch - networking配置global

版本8.11 单机部署了一个节点 在elasticsearch.yml中 配置了network.host: 8.8.8.8(之前为127.0.0.1) 但启动服务失败 报错信息为: BindTransportException: Failed to bind to 8.8.8.8:[9300-9399] 为啥要配置8.8.8.8 是因为参考的官方说明 Networking | Elasticsearch Gu…

RHEL8_Linux下载ansible

本章内容主要介绍RHEL8中如何安装ansible ansible时如何工作的在RHEL8中安装ansible 1.ansible工作原理 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c;ansible就是这样的一种自动化管理工具。 1&…

AWS Ubuntu设置DNS解析(解决resolve.conf被覆盖问题)

众所周知&#xff1a; Ubuntu在域名解析时&#xff0c;最直接使用的是/etc/resolve.conf文件&#xff0c;它是/run/systemd/resolve/resolve.conf的软链接&#xff0c;而对于刚装完的ubuntu系统&#xff0c;该文件的内容如下 ubuntuip-172-31-36-184:/etc$ cat resolv.conf #…

Mysql workbench

下载地址: https://download.csdn.net/download/a876106354/88616595

EasyExcel实现⭐️本地excel数据解析并保存到数据库的脚本编写,附案例实现

目录 前言 一、 EasyExcel 简介 二、实战分析 1.Controller控制层 2. service方法和方法实现 3.EasyExcel相关类 3.1 excel表实体类 3.2 自定义监听器类 4.测试 4.1 准备工作 4.2 断点调试 5.生成脚本文件 三、分析总结 章末 小伙伴们大家好&#xff0c;最近开发的时…

spring 笔记三 Spring与Web环境集成

文章目录 Spring与Web环境集成ApplicationContext应用上下文获取方式导入Spring集成web的坐标置ContextLoaderListener监听器通过工具获得应用上下文对象SpringMVC概述SpringMVC快速入门 Spring与Web环境集成 ApplicationContext应用上下文获取方式 应用上下文对象是通过new …

QT-CAD-3D显示操作工具

QT-CAD-3D显示操作工具 一、效果展示二、核心程序三、程序链接 一、效果展示 二、核心程序 TDF_LabelSequence DxfReader::transfer(DocumentPtr doc, TaskProgress* progress) {TDF_LabelSequence seqLabel;Handle_XCAFDoc_ShapeTool shapeTool doc->xcaf().shapeTool();…

ProcessOn在线绘制部分项目流程图

目录 一、ProcessOn 1.1 简介 1.2 官方网站 二、Axure自定义元件库 2.1 新建元件库 2.2 自定义元件 2.3 添加元件库 三、HIS系统门诊流程图 四、HIS系统住院流程图 五、HIS系统药品采购入库流程图 六、OA会议流程图 一、ProcessOn 1.1 简介 ProcessOn是一款在线的流…

快递鸟「物流导盲犬」助力鞋服头部企业客户全链路物流数字化升级

数字化时代&#xff0c;企业全域经营已成为数字商业新浪潮&#xff0c;多店铺多平台多仓库同步发货成为经营常态&#xff0c;消费者对物流服务体验的要求越来越高&#xff0c;企业对物流精细化管理的需求也越来越强烈。快递鸟基于对物流数字化领域的深耕和对行业及客户需求的深…

域名备案通过啦

整体来看还算比较顺利&#xff1a;遇到的问题&#xff1a; 1.香港服务器没有免费的备案码&#xff0c;就单独购买一个备案码用于备案。 2.备案的时候小程序审核优先通过&#xff0c;导致阿里云备案域名不能使用初次备案&#xff0c;不能通过初审&#xff0c;就放弃重新申请备…

css画饼图

<template slot-scope"scope"> <div class"pie" :style"{--p: scope.row.rate}" style"--p:10;--b:10px;--c:#FFAB79;"> <!-- --p&#xff1a;这个变量应该包含百分比值作为一个数字&#xff08;不带%符号&#xff09;…

智能防雷监测系统+智能SPD在线监测系统解决方案

雷电是一种自然现象&#xff0c;也是一种灾害。雷电对人类的生命财产安全造成巨大的威胁&#xff0c;尤其是对于电子设备、通信网络、电力系统等敏感设备&#xff0c;雷电浪涌会导致设备损坏、数据丢失、系统故障等严重后果。因此&#xff0c;防雷措施是必不可少的。 传统的防雷…

Narak

靶场下载 https://download.vulnhub.com/ha/narak.ova 信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-09 22:18 CST Nmap scan report for 192.168.1.1 (192.168.1.1) Host is up (0.…