5201|3

6069

帖子

4

TA的资源

版主

楼主
 

【测评SGP40】+用arduino测试传感器 I2C通信 [复制链接]

本帖最后由 damiaa 于 2021-3-2 08:43 编辑

【测评SGP40】+用arduino测试传感器 I2C通信

本来用arduino测试SVM40 I2C通讯是一个容易的事。但折腾了一下。花了些时间。

1,下载arduino-snippets-main包 解压。

2,使用里面的\arduino-snippets-main\arduino-snippets-main\SVM40_I2C_minimal_example例子。

3,准备接好电路,传感器板 VCC GND接stm32F767板子 VCC  地, 3腿 SDA 接 PB8,  4腿SCL PB9,5腿 接地

4,PB8,PB9接4.7K上拉电阻。记得 否则是数据不变哦

5,打开\arduino-snippets-main\arduino-snippets-main\SVM40_I2C_minimal_example

6,用arduino1.8.13 打开SVM40_I2C_minimal_example.ino 

注意这里已经是安装好stm32duino包了得。具体可以看我的帖子 让arduino 把你的无用的stm32板子玩起来 之一

7,修改I2C时钟为100K具体如下

#include <Wire.h>
// SVM40
const int16_t SVM40_ADDRESS = 0x6A;
void setup() {
  Serial.begin(115200);
  // 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);
  // output format
  Serial.println("VOC_Index\tRH\tT");
  // init I2C
  Wire.setClock(100000L);//修改I2C时钟 据说模块最多100K
  Wire.begin();
  // wait until sensors startup, > 1 ms according to datasheet
  delay(1);
  // start up sensor, sensor will go to continous measurement mode
  // each second there will be new measurement values
  Wire.beginTransmission(SVM40_ADDRESS);
  Wire.write(0x00);
  Wire.write(0x10);
  Wire.endTransmission();
  // wait until sensors is ready, fan is initialized
  delay(1000);
}
void loop() {
  uint16_t voc, humidity, temperature;
  uint8_t data[9], counter;
  // read measurement data
  Wire.beginTransmission(SVM40_ADDRESS);
  Wire.write(0x03);
  Wire.write(0xA6);
  Wire.endTransmission();
  // wait 5 ms to allow the sensor to fill the internal buffer
  delay(5);
  // read measurement data svm40, after two bytes a CRC follows
  Wire.requestFrom(SVM40_ADDRESS, 9);
  counter = 0;
  while (Wire.available()) {
    data[counter++] = Wire.read();
  }
  // VOC level is a signed int and scaled by a factor of 10 and needs to be divided by 10
  // humidity is a signed int and scaled by 100 and need to be divided by 100
  // temperature is a signed int and scaled by 200 and need to be divided by 200
  voc = (uint16_t)data[0] << 8 | data[1];
  humidity = (uint16_t)data[3] << 8 | data[4];
  temperature = (uint16_t)data[6] << 8 | data[7];
  Serial.print(String(float(voc) / 10));
  Serial.print("\t");
  Serial.print(String(float(humidity) / 100));
  Serial.print("\t");
  Serial.print(String(float(temperature) / 200));
  Serial.println();
  delay(1000);
}

8,编译下载。 运行。

结果出来了,今晚24.8度 

 

此帖出自传感器论坛

最新回复

这个空中飞电阻的操作哈哈,有那么点意思,以前也用过这样的方式!   详情 回复 发表于 2021-3-3 19:40

赞赏

1

查看全部赞赏

点赞(1) 关注(2)
 
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

 还可以这样玩,用stm32duino安装包

谢谢分享

 

 

 

此帖出自传感器论坛
 
 
 

回复

6069

帖子

4

TA的资源

版主

板凳
 
Jacktang 发表于 2021-3-2 14:04  还可以这样玩,用stm32duino安装包 谢谢分享      

是啊挺方便的。手上的板子可以玩起来。

此帖出自传感器论坛
 
 
 

回复

1942

帖子

3

TA的资源

版主

4
 

这个空中飞电阻的操作哈哈,有那么点意思,以前也用过这样的方式!

此帖出自传感器论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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