GY

您所在的位置:网站首页 传感器代号举例说明 GY

GY

2024-05-30 21:08| 来源: 网络整理| 查看: 265

文章目录 一、什么是GY-39?二、产品参数三、引脚说明四、通信协议1. 串口通信2. IIC通信 五、项目工程

一、什么是GY-39?

在这里插入图片描述

GY-39 是一款低成本,气压,温湿度,光强度 传感器模块。工作电压 3-5v,功耗小,安装方便。 其工作原理是,MCU 收集各种传感器数据,统一处理,直接输出计算后的结果,此模块,有两种方式读取数据,即串口 UART(TTL 电平)或者 IIC(2 线)。串口的波特率有 9600bps 与 115200bps,可配置,有连续,询问输出两种方式,可掉电保存设置。可适应不同的工作环境,与单片机及电脑连接。模块另外可以设置单独传感器芯片工作模式,作为简单传感器模块,MCU 不参与数据处理工作。提供 arduino,51,stm32 单片机通讯程序,不提供原理图及内部单片机源码。此 GY39 模块另外赠送安卓手机软件 app 查看数据,且支持 wifi 局域内网连接,手机及电脑同时显示数据。

二、产品参数

1. 特点

高性价比内置 MCU 计算传感器数据IIC、串口通信格式统一数据输出配相应的上位机软件

2. 技术 在这里插入图片描述 3. 应用

数字照明管理物联网,智能家居应用气象站监测数字光照度计数字气压计,高度计温湿度计大棚气候监测 三、引脚说明

在这里插入图片描述 在这里插入图片描述

四、通信协议 1. 串口通信

当 GY-39 模块硬件 PinA(S0)=1 时候使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2. IIC通信

当 GY-39 模块硬件 PinA(S0)=0 时候使用

在这里插入图片描述

五、项目工程

以下IIC通信工程 1. 定义结构体接收数据

typedef struct { uint32_t P; uint16_t Temp; uint16_t Hum; uint16_t Alt; } bme; bme Bme={0,0,0,0};

2. 引脚初始化

void I2C_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 使能与 I2C有关的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE ); /* PC3-I2C_SCL、PC5-I2C_SDA*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIOB->BSRR = GPIO_Pin_6; GPIOB->BSRR = GPIO_Pin_7; }

3. 向IIC设备写入一个字节数据

u8 Single_WriteI2C_byte(u8 Slave_Address,u8 REG_Address,u8 data) { if(I2C_Start()==0) //起始信号 {I2C_Stop(); return RESET;} I2C_SendByte(Slave_Address); //发送设备地址+写信号 if(!I2C_WaitAck()){I2C_Stop(); return RESET;} I2C_SendByte(REG_Address); //内部寄存器地址, if(!I2C_WaitAck()){I2C_Stop(); return RESET;} I2C_SendByte(data); //内部寄存器数据, if(!I2C_WaitAck()){I2C_Stop(); return RESET;} I2C_Stop(); //发送停止信号 return SET; }

4. 从IIC设备读取一个字节数据

u8 Single_ReadI2C(u8 Slave_Address,u8 REG_Address,u8 *REG_data,u8 length) { if(I2C_Start()==0) //起始信号 {I2C_Stop(); return RESET;} I2C_SendByte(Slave_Address); //发送设备地址+写信号 if(!I2C_WaitAck()){I2C_Stop(); return RESET;} I2C_SendByte(REG_Address); //发送存储单元地址 if(!I2C_WaitAck()){I2C_Stop(); return RESET;} if(I2C_Start()==0) //起始信号 {I2C_Stop(); return RESET;} I2C_SendByte(Slave_Address+1); //发送设备地址+读信号 if(!I2C_WaitAck()){I2C_Stop(); return RESET;} while(length-1) { *REG_data++=I2C_RecvByte(); //读出寄存器数据 I2C_SendACK(0); //应答 length--; } *REG_data=I2C_RecvByte(); I2C_SendACK(1); //发送停止传输信号 I2C_Stop(); //停止信号 return SET; }

5. 数据转换

while(1) { if(Single_ReadI2C(0xb6,0x04,raw_data,10)) { Bme.Temp=(raw_data[0]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3