QT上制作串口监视器使用GY-39(esp8266)

GY39部分

标题

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

GY39含有三种工作模式:在这里插入图片描述
我们用ESP8266连接它属于MCU IIC模式,根据产品手册的引脚介绍。在这里插入图片描述
CT DR分别对应 SCL SDA引脚。其他接线VCC 3.3V;GND GND。

QT部分

请参考上篇文章 https://editor.csdn.net/md/?articleId=136130418
arduino 代码部分

#include <Wire.h>
//#include <i2cmaster.h>
/*
GY-39-----mini
VCC----VCC
SCL----A5
SDA----A4
GND--GND
*/


//
#define uint16_t unsigned int
#define iic_add  0x5b
typedef struct
{
    uint32_t P;
    uint16_t Temp;
    uint16_t Hum;
    uint16_t Alt;
} bme;

bme Bme;
  uint32_t Lux;

void i2c_speed(uint16_t scl_speed)
{
  /* initialize TWI clock: 40 kHz clock, TWPS = 0 => prescaler = 1 */
  
  //TWSR = 0;                         /* no prescaler */
  //TWBR = ((F_CPU/scl_speed)-16)/2;  /* must be > 10 for stable operation */

}
void setup() {
       Serial.begin(9600);
       Wire.begin();
       i2c_speed(40000);
       delay(1); 
}
void loop() {

    get_bme();
    Serial.print("温度: ");
    Serial.print( (float)Bme.Temp/100);
    Serial.print(" DegC  压力 : ");
    Serial.print( ((float)Bme.P)/100);
    Serial.print(" Pa  湿度 : ");
    Serial.print( (float)Bme.Hum/100);
    Serial.print(" % 高度:");
    Serial.print( Bme.Alt/1000);
    Serial.println("m");
    get_lux();
    Serial.print( "光强: ");
    Serial.print( ((float)Lux)/100);
    Serial.println(" lux");
    delay(1000); 
}
void get_bme(void)
{
    uint16_t data_16[2]={0};
    uint8_t data[10]={0};
   iic_read(0x04,data,10);
    //iic_read2(0x04,data,10);
   Bme.Temp=(data[0]<<8)|data[1];
   data_16[0]=(data[2]<<8)|data[3];
   data_16[1]=(data[4]<<8)|data[5];
   Bme.P=(((uint32_t)data_16[0])<<16)|data_16[1];
   Bme.Hum=(data[6]<<8)|data[7];
   Bme.Alt=(data[8]<<8)|data[9];
}
void get_lux(void)
{     
    uint16_t data_16[2]={0};
    uint8_t data[10]={0};
    //iic_read2(0x00,data,4);
    iic_read(0x00,data,4);
    data_16[0]=(data[0]<<8)|data[1];
    data_16[1]=(data[2]<<8)|data[3];
    Lux=(((uint32_t)data_16[0])<<16)|data_16[1];

}
void iic_read(unsigned char reg,unsigned char *data,uint8_t len )//#include <Wire.h>
{
   Wire.beginTransmission(iic_add);  
   Wire.write(reg); 
   Wire.endTransmission(false);
   delayMicroseconds(10);
   if(len>4)
     Wire.requestFrom(iic_add,10);     
   else
     Wire.requestFrom(iic_add,4);
   for (uint8_t i = 0; i < len; i++)
    {  
       data[i] = Wire.read(); 
   }
  
}
//void iic_read2(unsigned char add,unsigned char *data,unsigned char len)//#include <i2cmaster.h>
//{
//  i2c_start_wait(0xb6);
//   i2c_write(add);
//   i2c_start_wait(0xb6+1);
//   while(len-1)
//   {
//    *data++=i2c_readAck();
//    len--;
//    }
//    *data=i2c_readNak();
//    i2c_stop();
//}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值