当前位置: 首页 > news >正文

GY-30光照传感器软件I2C方式驱动代码,基于STM32Cube

GY-30光照传感器的具体资料可以去淘宝搜索然后问卖家要,网上也有,所以这里我就不多嘴了。

VCC连接3到5伏电压,根据文件开头的描述在STM32CubeMX中配置好外设。

STM32Cube开发方式就是4个字“简单直接”,直接上代码。

gy30.h

#ifndef __GY30_H__
#define __GY30_H__#include "main.h"//main函数里需要使用的就这一个输入亮度变量的地址,返回读取状态
uint8_t getGY30_Lux(uint16_t *nowLum);void Z_I2C_Start(void);
void Z_I2C_End(void);
void Z_I2C_SendByte(uint8_t byte);
uint8_t Z_I2C_ReveiceByte();
void Z_I2C_SendACK(uint8_t ack);
uint8_t Z_I2C_ReveiceACK();#endif 

gy30.c 

/********************************************************************************* 作    者:洛宇航(SiriusIoT)* 名    称:* 备    注:* CubeMX配置方法:* 1.软件I2C* 选择两个GPIO引脚作为软件I2C引脚。* 建议命名为softI2C1_SCL,softI2C1_SDA* 默认输出高电平、开漏输出、上拉、速度设置为Hign* 2.毫秒级延时* 选择定时器,配置为每毫秒技术一次,无需开中断(默认为TIM6)********************************************************************************/#include "gy30.h"
#include "tim.h"//外设配置宏定义start
#define DHT_HTIM    htim6//微秒级延时,使用了定时器6//定义I2C总线连接的GPIO端口, 只需要修改下面5段行代码即可任意改变SCL和SDA的引脚
#define GPIO_PORT_GY30    GPIOE                   //GY30       GPIO端口//软件I2C外设配置
#define GY30_SCL_PORT	softI2C1_SCL_GPIO_Port
#define GY30_SCL_PIN	softI2C1_SCL_Pin#define GY30_SDA_PORT	softI2C1_SDA_GPIO_Port
#define GY30_SDA_PIN	softI2C1_SDA_Pin
//外设配置宏定义end//定义读写SCL和SDA的宏
//SCL = 1
#define GY30_SCL_1		HAL_GPIO_WritePin(GY30_SCL_PORT, GY30_SCL_PIN, GPIO_PIN_SET)
//SCL = 0
#define GY30_SCL_0		HAL_GPIO_WritePin(GY30_SCL_PORT, GY30_SCL_PIN, GPIO_PIN_RESET)
//读SCL口线状态
#define GY30_SCL_READ	HAL_GPIO_ReadPin(GY30_SCL_PORT, GY30_SCL_PIN)//SDA = 1
#define GY30_SDA_1		HAL_GPIO_WritePin(GY30_SDA_PORT, GY30_SDA_PIN, GPIO_PIN_SET)
//SDA = 0
#define GY30_SDA_0		HAL_GPIO_WritePin(GY30_SDA_PORT, GY30_SDA_PIN, GPIO_PIN_RESET)
//读SDA口线状态
#define GY30_SDA_READ	HAL_GPIO_ReadPin(GY30_SDA_PORT, GY30_SDA_PIN)#define SCL_Pin GPIO_Pin_0
#define SDA_Pin GPIO_Pin_1//利用定时器微秒级延时
void GY30_Delay_us(uint16_t us)
{uint16_t differ = 0xffff-us-5;__HAL_TIM_SET_COUNTER(&DHT_HTIM,differ);HAL_TIM_Base_Start(&DHT_HTIM);while(differ < 0xffff-5){differ = __HAL_TIM_GET_COUNTER(&DHT_HTIM);}HAL_TIM_Base_Stop(&DHT_HTIM);
}void I2C_SetSCL(uint8_t signal){if(signal==1) GY30_SCL_1;else GY30_SCL_0;GY30_Delay_us(5);                    //防止电平翻转过快,因此加上延时
}void I2C_SetSDA(uint8_t signal){if(signal==1) GY30_SDA_1;else GY30_SDA_0;GY30_Delay_us(5);
}void I2C_Start(void){I2C_SetSDA(1);I2C_SetSCL(1);I2C_SetSDA(0);I2C_SetSCL(0);
}void I2C_End(){I2C_SetSDA(0);I2C_SetSCL(1);I2C_SetSDA(1);
}void I2C_SendByte(uint8_t byte){I2C_SetSCL(0);for(int i=0;i<8;++i){if((byte&0x80)==0)I2C_SetSDA(0);elseI2C_SetSDA(1);byte<<=1;I2C_SetSCL(1);I2C_SetSCL(0);}
}uint8_t I2C_ReveiceByte()
{uint8_t data=0x00;I2C_SetSDA(1);for(int i=0;i<8;++i){I2C_SetSCL(1);if(GY30_SDA_READ==1)data|=(0x80>>i);I2C_SetSCL(0);}return data;
}void I2C_SendACK(uint8_t ack)
{if(ack==0)I2C_SetSDA(0);elseI2C_SetSDA(1);I2C_SetSCL(1);I2C_SetSCL(0);
}uint8_t I2C_ReveiceACK()
{I2C_SetSDA(1);I2C_SetSCL(1);uint8_t ack=GY30_SDA_READ;I2C_SetSCL(0);return ack;
}uint8_t getGY30_Lux(uint16_t* nowLum)
{I2C_Start();I2C_SendByte(0x46);if(I2C_ReveiceACK()!=0) return 0;I2C_SendByte(0x01);if(I2C_ReveiceACK()!=0) return 0;I2C_End();I2C_Start();I2C_SendByte(0x46);if(I2C_ReveiceACK()!=0)return 0;I2C_SendByte(0x10);if(I2C_ReveiceACK()!=0)return 0;I2C_End();HAL_Delay(200);uint16_t Light=0;I2C_Start();I2C_SendByte(0x47);if(I2C_ReveiceACK()!=0) return 0;Light|=I2C_ReveiceByte();Light<<=8;I2C_SendACK(0);Light|=I2C_ReveiceByte();I2C_SendACK(1);I2C_End();*nowLum = Light;return 1;
}

相关文章:

GY-30光照传感器软件I2C方式驱动代码,基于STM32Cube

GY-30光照传感器的具体资料可以去淘宝搜索然后问卖家要&#xff0c;网上也有&#xff0c;所以这里我就不多嘴了。 VCC连接3到5伏电压&#xff0c;根据文件开头的描述在STM32CubeMX中配置好外设。 STM32Cube开发方式就是4个字“简单直接”&#xff0c;直接上代码。 gy30.h #…...

双相元编程:一种新语言设计方法

本文讨论了编程语言的一种趋势&#xff0c;即允许相同的语法表达 在两个不同阶段或环境&#xff08;上下文&#xff09;中执行的计算同时保持跨阶段&#xff08;上下文&#xff09;的一致行为。这些阶段通常在时间上&#xff08;运行时间&#xff09;或空间上&#xff08;运行…...

基于SpringBoot校园外卖配送系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…...

茗鹤APS高级计划排程系统,在集团多工厂协同生产下的应用

随着业务规模的扩大和市场的全球化&#xff0c;越来越多的企业选择“总部多工厂基地”的模式&#xff0c;此种模式大幅提升企业的产能与产量&#xff0c;有效分散风险。然后&#xff0c;与之而来的是对企业的管理提出更高的管理要求。多个生产基地不仅面临集团下发的周期性计划…...

分享六款免费u盘数据恢复工具,U盘恢复工具集合【工具篇】

U盘里面的数据丢失了怎么找回&#xff1f;随着数字化时代的深入发展&#xff0c;U盘已成为我们日常生活中不可或缺的数据存储工具。然而&#xff0c;由于各种原因&#xff0c;如误删除、格式化、病毒攻击等&#xff0c;U盘中的数据可能会丢失&#xff0c;给用户带来极大的困扰。…...

Linux 的启动流程

第一步、加载内核 操作系统接管硬件以后&#xff0c;首先读入 /boot 目录下的内核文件。 以我的电脑为例&#xff0c;/boot 目录下面大概是这样一些文件&#xff1a; $ ls /bootconfig-3.2.0-3-amd64config-3.2.0-4-amd64grubinitrd.img-3.2.0-3-amd64initrd.img-3.2.0-4-amd6…...

思维导图插件--jsMind的使用

vue引入jsmind&#xff08;右键菜单&#xff09;_jsmind.menu.js-CSDN博客 第一版 vue-JsMind思维导图实现&#xff08;包含鼠标右键自定义菜单&#xff09;_jsmind 右键菜单-CSDN博客 // 新增节点addNode() {console.log(this.get_selected_nodeid());this.get_selected_…...

mac上使用finder时候,显示隐藏的文件或者文件夹

默认在finder中是不显示隐藏的文件和文件夹的&#xff0c;但是想创建.gitignore文件&#xff0c;并向里面写入内容&#xff0c;即便是打开xcode也是不显示这几个隐藏文件的&#xff0c;那有什么办法呢&#xff1f; 使用快捷键&#xff1a; 使用finder打开包含隐藏文件的文件夹…...

泰雷茲具有首个通过FIPS 140-3 三级认证的HSMs

泰雷兹LunaHsm是业界首款通过FIPS140-33级认证的解决方案&#xff0c;安策引进泰雷兹HSM产品可以帮助您满足您的数据安全合规性需求&#xff0c;阻力企业提高竞争力。 安策提供泰雷茲ThalesLunaHSMs成为首个通过FIPS140-3三级认证的硬件安全模块图 我们很高兴地宣布&#xff0c…...

美术馆预约小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;展品信息管理&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;美术馆管理&#xff0c;基础数据管理&#xff0c;论坛管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;美术馆&#xff…...

序列化Serializable

一、传输对象的方式 将对象从内存传输到磁盘进行保存&#xff0c;或者进行网络传输&#xff0c;有两种方式&#xff1a; 实现Serializable接口&#xff0c;直接传输对象转成json字符串后&#xff0c;进行字符串传输 二、直接传输对象 implements Serializable Data Equal…...

编写静态库

一、静态库 1.制作完成整体目录结构 2.首先创建mymath.c和mymath.h 3.编写Makefile 4.创建测试的main函数 test文件夹 先把lib移到test文件夹里面 4.编译链接 gcc main.c -I ./lib/include/ -L ./lib/mymathlib/ -l mymath 5.形成可执行程序a.out 要是不想执行第四步那么麻烦…...

hive的表操作

常用的hive命令 切换数据库use test;查询表的建表信息show create table 数据库名称.表名;查看表的类型信息desc formatted 数据库名称.表名; 删除内部表 drop table 数据库名称.表名; 先启动hdfs &#xff0c;mysql &#xff0c; hiveservice2&#xff0c;beeline CREATE [EX…...

基于多视点编码光场的全景三维重建方法

欢迎关注GZH《光场视觉》 摘要&#xff1a;在基于光场的一系列应用中&#xff0c;目标的三维重建是基础且关键的任务。普通光场只能重建单一视角而无法重建全景&#xff0c;并且在纹理特征匮乏的区域也无法生成准确的三维信息。针对以上问题&#xff0c;提出一种基于多视点编码…...

Spring Boot中的分布式文件系统

Spring Boot中的分布式文件系统 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何在Spring Boot中实现分布式文件系统的搭建和应用…...

three.js地理坐标系有哪些,和屏幕坐标系的转换。

坐标系很好理解&#xff0c;就是点线面体的位置&#xff0c;一个点是一个坐标&#xff0c;一条线段2个坐标&#xff0c;一个矩形四个坐标&#xff0c;一个立方体8个坐标&#xff0c;three.js面对的是三维空间&#xff0c;屏幕则是二维的&#xff0c;这就面临着转换问题&#xf…...

聊聊C++20的三向比较运算符 `<=>`

C20标准引入了许多新特性&#xff0c;其中之一是三向比较运算符 <>&#xff0c;也被称为太空船运算符。这个新运算符为C程序员提供了一种全新的比较对象的方式&#xff0c;它能有效简化比较逻辑&#xff0c;避免编写多个比较运算符重载的情况。 为什么需要三向比较运算符…...

CVE-2024-0603 漏洞复现

CVE-2024-0603 源码&#xff1a;https://gitee.com/dazensun/zhicms 开题&#xff1a; CVE-2024-0603描述&#xff1a;ZhiCms up to 4.0版本的文件app/plug/controller/giftcontroller.php中存在一处未知漏洞。攻击者可以通过篡改参数mylike触发反序列化&#xff0c;从而远程…...

西部智慧健身小程序+华为运动健康服务

1、 应用介绍 西部智慧健身小程序为用户提供一站式全流程科学健身综合服务。用户通过登录微信小程序&#xff0c;可享用健康筛查、运动风险评估、体质检测评估、运动处方推送、个人运动数据监控与评估等公益服务。 2、 体验介绍西部智慧健身小程序华为运动健康服务核心体验如…...

Spring Boot中如何处理异步任务

Spring Boot中如何处理异步任务 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Spring Boot应用中如何处理异步任务&#xff0c;以提升系统的性…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...