查看: 2616|回复: 4

[评测分享] 【Silicon Labs EFR32xG22】I2C接口读取温湿度传感器

[复制链接]
  • TA的每日心情
    开心
    2022-11-7 10:36
  • 签到天数: 898 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2020-7-21 08:57:08 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 story_xjj 于 2020-7-21 08:48 编辑

    I2C接口读取温湿度传感器
        主板集成有一个I2C接口的温湿度传感器SI7021,BRD4182A模块可以通过I2C接口读取SI7021的温湿度传感器数据。
        再前一个LCD演示实例的基础上,增加I2C接口读取SI7021的功能,并将读取的结果展示再LCD上。
    1、硬件接口说明
    EFR32MG22集成了I2C接口,通过主板连接器和主板连接,并且和主板共享SI7021。
    1.png
    根据手册的描述,模块的I2C0可以完成操作功能,其SCL通过PB02,SDA通过PB03和主板的传感器连接;传感器使能引脚PC07用来完成连接功能切换,高电平使能数据获取,低电平禁止数据获取。

    2、硬件配置
      打开硬件配置器Configurator,在Defaultmode Peripherals页面选择“I2C Sensor”,如下图所示,并配置“Sensor enable pin”为PC07,“I2C peripheral”为 I2C0 。
    2.png
    系统自动为我们添加了I2C0的选择,我们同样需要配置I2C0,如下图所示。
    3.png
    选择mode为Master,Enable I2C after init 为 True,I2C SCL为PB02,I2C SDA为PB03 。
    这样我们的硬件接口配置就算完成了。保存配置生成硬件接口配置文件。
    3、软件说明
    如前面所述,我们通过属性配置projectmodules,选择I2C SENSOR和I2CSPM两个模块,点击“OK”按钮保存选择。
    4.png
    这时候工程中自动为我们总结了I2CSPM的相关驱动,似乎没有SI7021的相关驱动软件出来。没办法我们手动添加。
    在SDK目录\hardware\kit\common\drivers这个地方我们可以发现si7013的相关驱动,打开看到,这个驱动时支持SI7021的相关操作的,于是把驱动的c和h文件复制到工程目录下,并创建一个si7021的目录。
        I2C接口的初始化:

    1. static I2CSPM_Init_TypeDef i2c0_init = I2CSPM_INIT_SENSOR;
    2.              I2CSPM_Init(&i2c0_init);
    复制代码

    定义初始化参数变量,并调用I2CSPM_Init函数完成I2C0的初始化工作。
    检查I2C总线上是否存在SI7021传感器。通过Si7013_Detect可以检查是否有si7021传感器,如果deviceId中返回的数据为21,表示总线上有我们需要的si7021传感器。

    1. static uint8_t deviceId;
    2.      Si7013_Detect(I2C0,SI7021_ADDR, &deviceId);
    3.      if(deviceId== 0x15)
    4.         sprintf(msg_ht_tm,"I2C_DEV:%s","si7021");
    5.     else
    6.         strcpy(msg_ht_tm,"I2C_DEV:");
    7.     GLIB_drawString(&context, msg_ht_tm, strlen(msg_ht_tm), 10, 60, true);
    8.     读取温湿度数据和数据处理。
    9.     static uint32_trhData;
    10.     static int32_t tData;
    11.     //读取si7021的温度和湿度
    12.       if(Si7013_MeasureRHAndTemp(I2C0,SI7021_ADDR, &rhData,&tData) == 0)
    13.       {
    14.          sprintf(msg_ht_tm,"Temp:%03ld.%03ld",tData/1000,tData%1000);
    15.          GLIB_drawString(&context,msg_ht_tm, strlen(msg_ht_tm), 10, 70, true);
    16.          sprintf(msg_ht_tm,"Humi:%03ld.%03ld",rhData/1000,rhData%1000);
    17.          GLIB_drawString(&context,msg_ht_tm, strlen(msg_ht_tm), 10, 80, true);
    18.                  }
    复制代码

        驱动程序中帮我们完成了AD数据采集到实际温湿度的转换,传递给我们的数据为一个32位的整数,其中包括3位小数,所以我们显示的时候特殊的处理一下,将整数和小数挑出来,转换位适合我们观察的形式。

    4、效果展示
    实际执行效果,我们检测到了传感器SI7021,并且获取了其中的温湿度数据,显示在LCD显示器上。
    5.jpg

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-8-18 21:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-8-5 09:02:26 | 显示全部楼层
    代码部分直接放在si7031.c文件下吗,用iar编译是否也可以呢,这边一直报错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-7 10:36
  • 签到天数: 898 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2020-8-6 08:49:05 | 显示全部楼层
    yanyan0620 发表于 2020-8-5 09:02
    代码部分直接放在si7031.c文件下吗,用iar编译是否也可以呢,这边一直报错

    没有测试过iar编译器,我用的官方的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-8-18 21:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-8-6 11:06:29 | 显示全部楼层
    story_xjj 发表于 2020-8-6 08:49
    没有测试过iar编译器,我用的官方的

    感谢回复,我使用GNU重新尝试了一下,但是还是没成功 错误.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-7 10:36
  • 签到天数: 898 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2020-8-7 08:55:40 | 显示全部楼层
    yanyan0620 发表于 2020-8-6 11:06
    感谢回复,我使用GNU重新尝试了一下,但是还是没成功

    是不是你的文件里面有中文字符啊,那种隐藏式的,你清理一下试试
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 07:45 , Processed in 0.161023 second(s), 25 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.