树莓派:3. 树莓派采集温度-使用AD7416

1. AD7416简介

1. 概述

AD7416是有8个管脚的温度监测器。该温度监测器可通过多路复用器的0通道进行访问。片上寄存器可编程控制极限温度,当温度超过极限时漏极开路温度过热指示器(OTI)处于工作状态。AD7417和AD7418分别是10位,4通道和单通道的ADC,其片上温度传感器可用2.7V~5.5V电压供电。该装置包含一个约15μs的转换器,5通道多路复用器,温度传感器,时钟振荡器,跟踪-保持器和一个2.5V的参考电压。

2. 特点

●10位ADC,转换时间15μs和30μs     
●单通道和4单通道模拟输入 
●片上跟踪-保持     
●温度过热指示 
●转换结束自动掉电 
●供电电压范围:2.7V~5.5V     
●I2C兼容串口 
●串行总线地址允许八个AD7416/AD7417连接到一条总线上     
●AD7416可代替LM75

3. 封装

这里写图片描述

2. 编写应用软件读取温度

1. 软件代码

这部分代码将编译成为CGI程序,供BOA调用

hello.c
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <errno.h>
#define I2C_ADDR 0x49
typedef unsigned char uint8;

static int read_HWclock(int fd, char buff[], int addr, int count)
{
    unsigned char ZorF; //正还是负
    int res;
    unsigned int tempeture = 0;
    float wendu;

    if(write(fd,&addr,1)!=1)        //写地址失败
    {
        return -1;   
    }

    res=read(fd,buff,count);

    tempeture = buff[0];

    tempeture=tempeture<<8;
    tempeture=tempeture|buff[1];
    tempeture=tempeture>>6;

    if(buff[0]&0x80) //负
    {
        tempeture=tempeture-0x01;
        tempeture=~tempeture; //变回原码
        tempeture=tempeture&0x03FF;
        wendu = (float)((double)tempeture/4);
        ZorF=0;
    }
    else //正
    {
        wendu = (float)((double)tempeture/4);
        ZorF=1;
    }
    printf("%.2f",wendu);
    return res;
}

int main(void)
{
    time_t now;   
    struct tm *timenow;   
    char strtemp[255];   

    int fd;
    char buf[3]; 
    char val,value;
    float flight;

    fd=open("/dev/i2c-1",O_RDWR);
    if(fd<0){
        printf("err open file:%s\r\n",strerror(errno)); return 1;
    }

    if(ioctl( fd,I2C_SLAVE,I2C_ADDR)<0 ){
        printf("ioctl error : %s\r\n",strerror(errno));return 1;
    }
    else{
        printf("ioctl ok \r\n");
    }
    int addr = 0;

    time(&now);   
    timenow = localtime(&now);   

    printf("Content-Type: text/html \n\n");
    printf("<html>\n");
    printf("<head><meta http-equiv=\"refresh\" content=\"3\"><title>CGI Output</title></head>\n");

    printf("<body>\n");
    printf("<h1>");
    read_HWclock(fd,buf,addr,2);
    printf("</h1>\n");
    printf("</body>\n"); 
    printf("</html>\n");

    return 0;    
}

2. 编译CGI

将文件通过FileZilla上传到树莓派的/home/pi目录下 
使用如下命令进行编译,并将hello.cgi拷贝到/var/www/cgi-bin目录下

gcc -o hello.cgi hello.c 
cp hello.cgi /var/www/cgi-bin

3. 远程登录,查看CGI效果

再浏览器的地址栏输入:http://192.168.3.106/cgi-bin/hello.cgi,IP地址根据树莓派的实际地址填写

3. 板子不在手边,等以后补上效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值