GY |
您所在的位置:网站首页 › 传感器代号举例说明 › GY |
文章目录
一、什么是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. 技术
当 GY-39 模块硬件 PinA(S0)=1 时候使用
当 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 |