请选择 进入手机版 | 继续访问电脑版
搜索
热搜:
查看: 4288|回复: 3

[环境传感器] 【AS6212评估套件】编程实现

[复制链接]

8

主题

46

帖子

1614

积分

金牌会员

Rank: 6Rank: 6

积分
1614
发表于 2020-7-31 09:57:37 | 显示全部楼层 |阅读模式
本帖最后由 tobot 于 2020-7-31 10:01 编辑

一、概述
在上一个实验中已经通过iic接口对评估套件进行读取,分别读取第一、二字节数据,并通过求补,计算摄氏度。本次评测希望通过编程实现温度的读取。考虑到测试条件,没有考虑负数温度的计算。
二、C语言
在树莓派上用c语言读取iic接口一般可以用几种方式:直接以文件方式读取,再通过字符处理得到结果,这种方式最“Linux”,但是考虑到在上个实验中,我们已经手工操作过了,故直接舍弃。采用
读取bcm2835和通过wiringpi两种方式读取。闲话不说,直接上代码:
  1. #include <bcm2835.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>


  4. int main(int argc, char **argv){
  5.     if (!bcm2835_init())
  6.     return 1;
  7.     bcm2835_i2c_begin();
  8.     bcm2835_i2c_setSlaveAddress(0x44);
  9.     bcm2835_i2c_set_baudrate(10000);
  10.     unsigned char buf[2];
  11.     unsigned char reg = 0x0;
  12.     bcm2835_i2c_read_register_rs(®,&buf[0],2);
  13.     float value=buf[0]*2+buf[1]/128.0;
  14.     printf("The temperature is %.1f degrees Celsius.\r\n", value);  
  15.     bcm2835_i2c_end();
  16.     bcm2835_close();
  17.     return 0;
  18. }
复制代码
以上是通过bcm2835读取的方法,注意引用<bcm2835.h>之前需要先安装bcm2835库,可以在网站http://www.airspayce.com/mikem/bcm2835下载到最新版本,我使用的是1.68版本(链接http://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.gz),具体安装因为和AS6212关系不大,就不细述。
注意编译时,使用gcc -o as6212 as6212-bcm2835.c -lbcm2835。

  1. #include <stdio.h>
  2. #include <wiringPi.h>
  3. #include <wiringPiI2C.h>
  4. #include <stdlib.h>
  5. int main()
  6. {
  7.      wiringPiSetup();

  8.      int fd = wiringPiI2CSetup(0x44);
  9.      int read1 = 0x00;
  10.      int read2 = 0x00;

  11.      if(-1 == fd)
  12.      {
  13.          printf("wrong!\n");
  14.          exit(0);
  15.      }
  16.      
  17.      read1 = wiringPiI2CReadReg8(fd, 0x00);
  18.      read2 = wiringPiI2CReadReg8(fd, 0x01);
  19.      float value=read1*2+read2/128.0;
  20.      printf("The temperature is %.1f degrees Celsius.\r\n", value);                                                                                                      

  21.      return 0;
  22. }
复制代码
以上是用wiringPi读取的方法,同样是需要先安装对应库,执行编译用gcc -o as6212 as6212-wiringpi.c  -lwiringPi。

三、python语言
python语言也很热门,特别是在linux平台上,python已经取代c成为最常用的语言了,这里我们同样用smbus和wiringPi两种方式读取温度。代码如下:
  1. import smbus
  2. import time
  3. bus = smbus.SMBus(1)
  4. data1=bus.read_byte_data(0x44,0x0)
  5. data2=bus.read_byte_data(0x44,0x1)
  6. print('The temperature is '+str(data1*2+data2/128)+' degrees Celsius.')
复制代码
  1. import wiringpi as wpi
  2. ds=wpi.wiringPiI2CSetup(0x44)
  3. data1=wpi.wiringPiI2CReadReg8(ds,0)
  4. data2=wpi.wiringPiI2CReadReg8(ds,1)
  5. print('The temperature is '+str(data1*2+data2/128)+' degrees Celsius.')
复制代码


四、读取精度
发现一个较为有趣事实,每次实验发现读取0x01位始终是0x40,不由发生一个猜想,这个模块的是否可以显示温度的连续变化(1/128摄氏度)?直接加上一个循环,并用水杯注满热水加热(主要是考虑如果用热风机等加热太快)如下图:
微信图片_20200731093947.jpg

实验结果:
  1. pi@raspberrypi:~$ python3 as6212.py
  2. The temperature is 26.5 degrees Celsius.
  3. The temperature is 26.5 degrees Celsius.
  4. The temperature is 26.5 degrees Celsius.
  5. The temperature is 26.5 degrees Celsius.
  6. The temperature is 26.5 degrees Celsius.
  7. The temperature is 28.5 degrees Celsius.
  8. The temperature is 28.5 degrees Celsius.
  9. The temperature is 28.5 degrees Celsius.
  10. The temperature is 28.5 degrees Celsius.
  11. The temperature is 28.5 degrees Celsius.
  12. The temperature is 28.5 degrees Celsius.
复制代码
显然不太如人意,经过5分钟加热,温度上升8摄氏度,但现实结果只有26.5℃、28.5℃、30.5℃、32.5℃、34.5℃五个,反推一下,可以知道0x00字节是连续变化,但0x01字节似乎不会发生改变,我不确定是我文档还没读通或是实验方法有误。有条件的朋友可以帮忙尝试一下,附代码:
as6212.rar (255 Bytes, 下载次数: 0)
回复

使用道具 举报

11

主题

615

帖子

9496

积分

论坛元老

Rank: 8Rank: 8

积分
9496
发表于 2020-8-3 20:49:02 | 显示全部楼层
好历害的样子
回复 支持 反对

使用道具 举报

8

主题

46

帖子

1614

积分

金牌会员

Rank: 6Rank: 6

积分
1614
 楼主| 发表于 2020-8-6 16:17:45 | 显示全部楼层

其实是错的,改正的帖子发在了https://ams.eefocus.com/module/forum/thread-9417-1-1.html
回复 支持 反对

使用道具 举报

3

主题

287

帖子

6896

积分

论坛元老

Rank: 8Rank: 8

积分
6896
发表于 2021-1-10 20:43:07 | 显示全部楼层
学习了 现在正在找一个温湿度芯片
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

Archiver|手机版|小黑屋|ams传感器技术社区

GMT+8, 2022-8-14 01:55 , Processed in 0.060519 second(s), 16 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表