基于LORA的一主多从监测系统_AHT20温湿度传感器

1)AHT20温湿度传感器

这个传感器,网上能找到的资料还是比较多的,我们使用的是HAL硬件i2c,相比于模拟i2c,我们不需要过于关注时序问题,我们只需要关心如何获取数据以及数据如何处理,下面以数据手册为主:

上图来源与数据手册

通过上述截图我们可以看出需要获取温湿度值,我们需要先给传感器发送0x70 0xAC 0x33 0x00四个字节的测量命令字段,然后读取总线数据,返回的数据格式为Status+20位相对湿度+20位温度数据以及CRC校验值一共就是7个字节,不过实际使用的时候可以不用管这个CRC

这个是传感器的状态字说明表格通过这个,我们可以判断当前传感器的状态,也就是我们读到的七个字节的第一个字节

通过手册,我们可以知道当传感器上电后需要等到五ms才能读取,这个一般可以不用管,但是再发送完测量命令后需要等待80ms测量完成,我们需要做一些延时操作

当然,最重要的是我们如何将获取的数据转换为实际的温度和湿度,通过查看手册,我们可以得到转换的具体公式

//为了能将数据传递到AHT20——Read函数的调用方,需要将数据定义为指针类型
void AHT20_Read(float *Temperature, float *Humidity)
{
    uint8_t sendBuffer[3] = { 0xAC, 0x33, 0x00};
    //要触发测量,需要直接发送0xAC命令,此命令参数有两个字节:0x33,0x00
    uint8_t readBUffer[6];

    HAL_I2C_Master_Transmit(&hi2c2,AHT20_ADDRESS,sendBuffer,3,HAL_MAX_DELAY);
    HAL_Delay(75);
    //等待75ms待测量完成
    HAL_I2C_Master_Receive(&hi2c2,AHT20_ADDRESS,readBUffer,6,HAL_MAX_DELAY);
    //读取六个字节(发送0x71可以读取)

    if((readBUffer[0] & 0x80) == 0x00)
        //如果第0字节的第7位位0,就说明获取的数据确实是刚刚测量完成的数据,就可以开始温湿度的计算
    {
        //AHT20的数据手册指出温度数据和湿度数据各占两个半字节,定义data用于数据拼接
        uint32_t data = 0;
        //第3字节的高4位是湿度数据,低4位是温度数据;第2字节和第1字节为湿度数据

        // 0000 xxxx + xxxx xxxx 0000+ xxxx xxxx 0000 0000 0000
        data = ((uint32_t)readBUffer[3] >> 4) + ((uint32_t)readBUffer[2] << 4) + ((uint32_t)readBUffer[1] << 12);
        //要将uint8_t的数据改为uint32_t,否则会出现溢出而导致数据丢失
        *Humidity = data * 100.0f / (1 << 20);
        //相对湿度(%)=(SDA输出的相对湿度信号/2的20次方)*100%,转换为浮点数计算,避免丢失掉小数部分

        //xxxx 0000 0000 0000 0000 + xxxx xxxx 0000 0000 + xxxx xxxx
        data = (((uint32_t)readBUffer[3] & 0x0F) << 16) + ((uint32_t)readBUffer[4] << 8) + (uint32_t)readBUffer[5];
        *Temperature = data * 200.0f / (1 << 20) - 50;
        // 温度 = (温度输出信号 / 2的20次方)* 200 - 50
    }
}

通过简单的代码测试后,我们在debug下可以看到已经能正常读到数据了,其中0x1C为状态字节 00011100,通过第4个bit为1表示OTP 存储器数据完整性测试(CRC)通过,说明我们温湿度数据获取成功

这个实际数据值看着也差不多,说明获取无误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值