linux下DS18b20模块与树莓派连接探测温度

linux下DS18b20模块与树莓派连接探测温度:

一、linux环境下 c 实现温度探测所需要的头文件如下:
#include
#include
#include
#include
#include
#include
#include
#include

二、DS18B20模块详解:
(1)DS18B20是常用的 数字温度传感器,其输出的是数字信号,接线方便,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
(2)DS18B20数字温度传感器,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
其中主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
(3)DS18B20模块基本特点:
中文名称: 数字温度传感器
外文名称: DS18B20
工作电压: 3V~5.5V
超低功耗: 静态功耗<3uA
常见封装: TO-92、SOP8和DIP8
采集模块: LCT2662M,RS485总线
硬件开销: 低
体积: 小
抗干扰能力: 强
(4)DS18B20模块的内部结构:
主要由四部分组成:分别是 64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
(5)DS18B20模块的引脚的定义:
a、DQ 为数字信号输入/输出端;
b、GND 为电源地;
c、VCC 为外接供电电源输入端;
其中两者端口的连接方式如下:
树莓派 的 ground 端(pin 06脚)------------连接DS18B20的 GND的端口;
树莓派的 gpio 04 端(pin 07 脚)--------------连接DS18B20的 DQ的端口;
树莓派的 3.3V 端(pin 01脚)-------------连接DS18B20的 VCC端口;

三、树莓派的详解:
(1)树莓派实质:即为学习计算机编程教育设计的一种微型电脑
Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI) ,只有信用卡大小的微型电脑,其系统基于 Linux
随着Windows 10 IoT的发布,我们也将可以用上运行Windows的树莓派。
自问世以来,受众多计算机发烧友和创客的追捧,曾经一“派”难求。别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全”。
(2)树莓派的功能介绍如下:
就像其他任何一台运行Linux 系统的台式计算机或者便携式计算机那样,利用Raspberry Pi 可以做很多事情。当然,也难免有一点点不同。普通的计算机主板都是依靠硬盘来存储数据,但是Raspberry Pi 来说使用SD 卡作为“硬盘”,你也可以外接USB 硬盘。利用Raspberry Pi 可以编辑Office 文档、浏览网页、玩游戏等,即使玩需要强大的图形加速器支持的游戏也没有问题,如《雷神之锤》(Quake )。
Raspberry Pi 的低价意味着其用途更加广泛,将其打造成卓越的多媒体中心也是一个不错的选择。利用Raspberry Pi 可以播放视频,甚至可以通过电视机的USB 接口供电。

四、linux下 C 编程实现温度探测代码如下:

int ds18b20_get_temperature(float *temp);
int main(int argc, char *argv[])
{
float temp;
if( ds18b20_get_temperature(&temp) < 0 )
{
printf(“ERROR: ds18b20 get temprature failure\n”);
return 1;
}
printf(“DS19B20 get temperature: %f ℃\n”, temp);
return 0;
}
int ds18b20_get_temperature(float *temp)
{
char w1_path[50] = “/sys/bus/w1/devices/”;
char chip[20];
char buf[128];
DIR *dirp;
struct dirent *direntp;
int fd =-1;
char *ptr;
float value;
int found = 0;
if( !temp )
{
return -1;
}
if((dirp = opendir(w1_path)) == NULL)
{
printf(“opendir error: %s\n”, strerror(errno));
return -2;
}
while((direntp = readdir(dirp)) != NULL)
{
if(strstr(direntp->d_name,“28-”))
{
strcpy(chip,direntp->d_name);
found = 1;
}
}
closedir(dirp);
if( !found )
{
printf(“Can not find ds18b20 in %s\n”, w1_path);
return -3;
}
strncat(w1_path, chip, sizeof(w1_path));
strncat(w1_path, “/w1_slave”, sizeof(w1_path));
if( (fd=open(w1_path, O_RDONLY)) < 0 )
{
printf(“open %s error: %s\n”, w1_path, strerror(errno));
return -4;
}
if(read(fd, buf, sizeof(buf)) < 0)
{
printf(“read %s error: %s\n”, w1_path, strerror(errno));
return -5;
}
ptr = strstr(buf, “t=”)+2;
if( !ptr )
{
printf(“ERROR: Can not get temperature\n”);
return -6;
}
*temp = atof(ptr)/1000;
return 0;
}

你可能感兴趣的:(linux,博文)