406|2

334

帖子

0

资源

一粒金砂(中级)

【测评SGP40】快速部署实现的人工智能环境空气质量跟踪模型 #2 上电测试的arduino篇 [复制链接]

1、在开箱之后,现在获得的资料之后,用arduino代码开始测试。

具体连接参见上贴子,可以连接UART,如下图,其中UART选择SEL为悬空。

1993797936.jpg

 

2、 不过从代码分析看,只是支持I2C读取。

#include "sgp40_voc_index.h"

void setup() {
  int16_t err;
  Serial.begin(115200);  // start serial for output

  // wait for serial connection from PC
  // comment the following line if you'd like the output
  // without waiting for the interface being ready
  while(!Serial);

  /* Initialize I2C bus, SHT, SGP and VOC Engine */
  while ((err = sensirion_init_sensors())) {
    Serial.print("initialization failed: ");
    Serial.println(err);
    sensirion_sleep_usec(1000000); /* wait one second */
  }
  Serial.println("initialization successful");
}


/* Run one measurement per second */
void loop() {
  int16_t err;
  int32_t voc_index;
  int32_t temperature_celsius;
  int32_t relative_humidity_percent;
  err = sensirion_measure_voc_index_with_rh_t(
          &voc_index, &relative_humidity_percent, &temperature_celsius );
  if (err == STATUS_OK) {
    Serial.print("VOCindex:");
    Serial.print(voc_index);
    Serial.print("\t");
    Serial.print("Humidity[%RH]:");
    Serial.print(relative_humidity_percent * 0.001f);
    Serial.print("\t");
    Serial.print("Temperature[degC]:");
    Serial.println(temperature_celsius * 0.001f);
  } else {
    Serial.print("error reading signal: ");
    Serial.println(err);
  }

  sensirion_sleep_usec(1000000); /* wait one second */
}

头文件如下,


#include "sgp40_voc_index.h"
#include "sensirion_arch_config.h"
#include "sensirion_voc_algorithm.h"
#include "sgp40.h"
#include "shtc1.h"

#ifdef __cplusplus
extern "C" {
#endif

static VocAlgorithmParams voc_algorithm_params;

int16_t sensirion_init_sensors() {
    int16_t ret;

    sensirion_i2c_init();

    ret = shtc1_probe();
    if (ret)
        return SENSIRION_SHT_PROBE_FAILED;

    ret = sgp40_probe();
    if (ret)
        return SENSIRION_SGP_PROBE_FAILED;

    VocAlgorithm_init(&voc_algorithm_params);
    return 0;
}

int16_t sensirion_measure_voc_index(int32_t* voc_index) {
    return sensirion_measure_voc_index_with_rh_t(voc_index, NULL, NULL);
}

int16_t sensirion_measure_voc_index_with_rh_t(int32_t* voc_index,
                                              int32_t* relative_humidity,
                                              int32_t* temperature) {
    int32_t int_temperature, int_humidity;
    int16_t ret;
    uint16_t sraw;

    ret = shtc1_measure_blocking_read(&int_temperature, &int_humidity);
    if (ret)
        return SENSIRION_GET_RHT_SIGNAL_FAILED;

    if (temperature) {
        *temperature = int_temperature;
    }
    if (relative_humidity) {
        *relative_humidity = int_humidity;
    }

    ret = sgp40_measure_raw_with_rht_blocking_read(int_humidity,
                                                   int_temperature, &sraw);
    if (ret) {
        return SENSIRION_GET_SGP_SIGNAL_FAILED;
    }

    VocAlgorithm_process(&voc_algorithm_params, sraw, voc_index);
    return 0;
}

#ifdef __cplusplus
}
#endif

不过下载代码后没有正确启动数据,读取失败。就是如下指令返回的是读取错误。

err = sensirion_init_sensors()

0.PNG

这下进度就受阻了,需要分析看为什么这样的情况出现。

 

此帖出自传感器论坛

回复

646

帖子

4

资源

一粒金砂(中级)

这个有点坑爹,i2c需要外接上拉电阻,板子上没有。。。我测试也是这种情况。。。不能开箱即用,串口呢,没有Arduino驱动,也没有其它微控制器的串口驱动,坑爹。好在协议简单,我自己写了,啥时候空了发出来。

点评

nmg
是板子设计的问题吗?  详情 回复 发表于 昨天 11:33

赞赏

1

查看全部赞赏


回复

4311

帖子

233

资源

管理员

dql2016 发表于 2021-2-1 13:25 这个有点坑爹,i2c需要外接上拉电阻,板子上没有。。。我测试也是这种情况。。。不能开箱即用,串口呢,没 ...

是板子设计的问题吗?


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表