ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《正点原子BEE BLOCK模块资料》ATK-MB016 模块使用说明

《正点原子BEE BLOCK模块资料》ATK-MB016 模块使用说明

原创 嵌入式/内核开发 作者:正点原子 时间:2025-03-28 16:26:10 0 删除 编辑

ATK-MB016 模块使用说明


        1,硬件连接

       这里以正点原子M48Z-M3最小系统板STM32F103版为例,给大家介绍一下模块和板卡的连接方法。其它板卡与模块的硬件连接方法,请大家在“ATK-MB016 温湿度传感器模块\3,程序源码\相应板卡例程文件夹\readme.txt”路径下查看。

       ATK-MB016温湿度传感器模块可通过杜邦线与正点原子M48Z-M3最小系统板STM32F103版进行连接,具体的连接关系,如下表所示:


表1.1温湿度传感器模块与M48Z-M3最小系统板STM32F103版连接关系


        2,实验功能


       2.1温湿度传感器模块测试实验


       2.1.1 功能说明

       在本实验中,串口会打印ATK-MB016温湿度传感器模块检测到的环境温度值和湿度值。需要查看这部分实验信息的用户,可用杜邦线将最小系统板STM32F103的PA9引脚和GND连接至外部的USB转串口设备,这样就可以通过XCOM上位机查看串口打印的信息了。

       开发板的LED0闪烁,提示程序运行。


       2.1.2 源码解读

       打开本实验的工程文件夹,能够在./Drivers/BSP目录下看到ATK_AHT20文件夹和IIC文件夹,其中ATK_AHT20文件夹中包含了ATK-MB016温湿度传感器模块的驱动文件,IIC文件夹中包含了IIC的驱动文件,如下图所示:


图2.1.2.1 ATK-MB016温湿度传感器模块驱动代码


图2.1.2.2 IIC驱动代码


       2.1.2.1 ATK-MB016温湿度传感器模块驱动

       下面简要介绍atk_aht20.c中两个重要的API函数。


       1. 函数atk_aht20_init()

       该函数用于初始化ATK-MB016温湿度传感器模块,具体代码如下所示:

/**
 * @brief       初始化AHT20传感器
 * @param       无
 * @retval      初始化结果,0:成功,1:失败
 */
uint8_t atk_aht20_init(void)
{
    uint8_t command[2] = {0x08, 0x00};
 
    iic_init();                                   /* 初始化IIC接口 */
    delay_ms(40);                                    /* 延时40ms,等硬件稳定 */
    atk_aht20_write_nbytes(INIT, command, 2);   /* 发送初始化指令 */
    delay_ms(500);                                   /* 延时500ms,等硬件稳定 */
    return atk_aht20_check();                     /* 检测AHT20的状态 */
}

       atk_aht20_init()函数并不复杂,在该函数中,先初始化IIC接口,然后延时40ms,等待硬件稳定,接着发送初始化AHT20的指令并延时500ms,最后检测AHT20的状态,如果状态正常则返回0,异常则返回1。


       2. 函数atk_aht20_read_data()

       该函数用于获取温度值和湿度值,具体代码如下所示:

/**
 * @brief       读取AHT20的温度和湿度数据
 * @param       *temp: 温度值指针
 * @param       *humi: 湿度值指针
 * @retval      无
 */
void atk_aht20_read_data(float *temp, float *humi) 
{
    uint32_t humi_data = 0, temp_data = 0;
    uint8_t raw_data[10];
    uint8_t command[2] = {0x33, 0x00};
 
    atk_aht20_write_nbytes(START_TEST, command, 2);  /* 发送测量指令 */
    delay_ms(80);                                            /* 等待80ms */
 
    atk_aht20_read_nbytes(raw_data, 7);                   /* 获取原始数据 */
 
    if((raw_data[0] & 0x80) == 0x00)
    {
        humi_data = 0;                                       /* 变量清零 */
/* 取出第一个字节湿度数据,即[19:12]位 */
        humi_data = (humi_data | raw_data[1]) << 8;  
        /* 取出第二个字节湿度数据,即[11:4]位 */
        humi_data = (humi_data | raw_data[2]) << 8;    
        /* 取出第三个字节湿度数据,即[3:0]位 */     
        humi_data = (humi_data | raw_data[3]);   
     
        /* 湿度有效数据共有20位,第三个字节数据只有高4位有效,
因此需要右移4位,才能得到有效数据 */      
        humi_data = humi_data >> 4;                         
        *humi = (float)humi_data * 100 /1024 /1024;   /* 计算湿度值 */
 
        temp_data = 0;                                       /* 变量清零 */
        /* 取出第一个字节温度数据,即[19:16]位 */
        temp_data = (temp_data | raw_data[3]) << 8;      
        /* 取出第二个字节温度数据,即[15:8]位 */   
        temp_data = (temp_data | raw_data[4]) << 8;   
        /* 取出第三个字节温度数据,即[7:0]位 */      
        temp_data = (temp_data | raw_data[5]);  
    
        /* 温度有效数据共有20位,第一个字节数据只有低4位有效,
因此需要右移4位,才能得到有效数据 */        
        temp_data = temp_data & 0xfffff;                    
        *temp = (float)temp_data * 200 / 1024 /1024 - 50;  /* 计算温度值 */
    }
}

       上述函数用于获取AHT20检测到的环境温度值和湿度值,在该函数中,先向AHT20发送测试指令,然后延时80ms,开始读取原始数据,存放到raw_data数组中,最后根据AHT20的通信协议时序与命令格式解析出温度值和湿度值,并存入对应的变量地址中。

       注意:AHT20的通信协议时序与命令格式详见“ATK-MB016 温湿度传感器模块\ 4,参考资料\ AHT20说明书.pdf”第5.1章节。


       2.1.2.2 IIC驱动

       在图2.1.2.2中,myiic.c和myiic.h为IIC驱动文件,里面实现了IIC引脚的初始化、IIC协议相关的系列函数。关于IIC的驱动介绍,请查看正点原子各个开发板对应的开发指南中IIC章节。


       2.1.2.3 实验测试代码

       实验的测试代码在demo.c文件中,该文件在工程根目录下的 User文件夹。测试代码的入口函数为demo_run(),具体的代码,如下所示:

/**
 * @brief       例程演示入口函数
 * @param       无
 * @retval      无
 */
void demo_run(void)
{
    float temperature;
    float humidity;
    
    while(atk_aht20_init())
    {
        printf("ATH20传感器初始化失败\r\n");
        delay_ms(1000);
    }
    
    while (1)
    {
        atk_aht20_read_data(&temperature, &humidity); /* 读取ATH20传感器数据 */
 
        printf("温度: %.2f℃\r\n", temperature);         /* 计算得到湿度值 */
        printf("湿度: %.2f%%\r\n", humidity);            /* 计算得到温度值 */
        printf("\r\n");
        
        delay_ms(1000);
    }
}

       从上面代码可以看出,整个测试代码的逻辑相对简单。初始化温湿度传感器模块后,在while循环中调用相关函数获取温湿度值,并通过串口打印,LED0闪烁表示程序正常运行。


       2.1.3 实验现象

       将ATK-MB016温湿度传感器模块按照第一节“硬件连接”中介绍的连接方式与开发板连接,并将实验代码编译烧录至开发板中。本实验使用串口输出调试信息,因此需将开发板的PA9连接至DAP虚拟串口(或USB转TTL模块)的RX引脚。完成连接后,可通过串口调试助手XCOM查看实验信息输出,如下图所示:


图2.1.3.1串口调试助手显示内容


       注:其它现象请看2.1.1功能说明。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3079379/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    764980