回答

收藏

[评测分享] 【Silicon Labs EFR32xG24 开发套件】利用IIC读温湿度并用串口打印

#板卡评测 #板卡评测 2334 人阅读 | 0 人回复 | 2022-12-16

【Silicon Labs EFR32xG24 开发套件】板小,但是兼容了好几款传感器,麻雀虽小五脏俱全。
我继续探索板卡自带的温湿度传感器S。从原理图中可以看到传感器的型号是:Si7021。采用了Silicon Labs的第二代RH感测解决方案,温度测量范围从-40~+125℃,精度高达±0.4℃;相对湿度可以从0~80%RH进行准确测量。
下图为温湿度传感器参数:

再来一个附件:
Si7021.pdf (1.57 MB, 下载次数: 0)

传感器我就不多介绍,详细的参数请看规格书,下面我们看一下原理图:

SI7021是用IIC通信的,IIC上面挂了好几个传感器。
通过TS3A4751连接在PC04 PC05 IO口上。
下图简单的说明,和Si7021如何连接到EFR32MG24。

下在看代码:
IIC的初始化:
  I2C_TransferReturn_TypeDef ret;
  uint8_t cmdReadId2[2] = SI7021_CMD_READ_ID_BYTE2;
  uint8_t deviceId[8];
  // Wait for sensor to become ready
  sl_sleeptimer_delay_millisecond(80);
  // Check for device presence  and compare device ID
  ret = SI7021_transaction(I2C_FLAG_WRITE_READ, cmdReadId2, 2, deviceId, 8);
  // Make sure transfer was successful
  EFM_ASSERT(ret == i2cTransferDone);
  // Check the Received Device ID
  EFM_ASSERT(deviceId[0] == SI7021_DEVICE_ID);
  // Initialize LED PWM module
  initialise_temp_limits();
  // Initialize Periodic timer
  initialise_timer();
  // stdout is redirected to VCOM in project configuration
  printf("Welcome to the I2CSPM example application\r\n");

读取传感器的值:
  sl_atomic_load(local_read_sensor_data, read_sensor_data);

  if (local_read_sensor_data) {
    // Measure the current humidity and temperature
    SI7021_measure(&relative_humidity, &temperature);
    // Print the current humidity and temperature to vcom
    printf("\r\n");
    printf("Relative Humidity = %ld%%\r\n", relative_humidity);
    printf("Temperature = %ld C\r\n", temperature);
    // Set appropriate LEDs (led0 or 1) based on temperature
    set_leds(temperature);
    // Reset the flag
    local_read_sensor_data = false;
    sl_atomic_store(read_sensor_data, local_read_sensor_data);

通过串口打印出传感器的值:一个是温度,一个是温度。

视频:
https://www.bilibili.com/video/BV1CV4y1A7yV/?vd_source=0e4686609dd9c60a63b3f7fe54080c03

分享到:
回复

使用道具 举报

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

本版积分规则

关闭

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