DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,它的通信接口采用的是1-Wire(单总线)。1-Wire是一种半双工异步的通讯协议(通信双方可以各自约定通信速率互相传输数据,但必须分时复用一根数据线)。

单片机需要控制DQ口,而且使用时要接一个上拉电阻将18B20配置成开漏输出模式。
当在树莓派上面,树莓派是一台电脑主机,只需要将树莓派配置成使能1-Wire就可以通过通信进行访问18B20的内容了。使用命令即可配置

sudo raspi-config



确认,然后重启树莓派。

sudo reboot

通过lsmod | grep w1命令可以查看当前系统支持的单总线协议模块。

然后就是树莓派与DS18B20的接线了。

接线方式


单总线的接口默认是GPIO 4(BCM),所以将温度传感器数据口接入此,然后分别接正负就行了。

然后打开路径 /sys/bus/w1/devices/ /w1_bus_master1/可以看到有个28-xxxxx的文件夹,里面有个w1_slave文件存放了温度信息,可以用cat命令查看。

实例代码

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>int Get_DS18B20_Temp(double *temp);/***@brief main*@param*@retval the main function*/
int main(int argc, char **argv)
{double  temp;if (Get_DS18B20_Temp(&temp) < 0){printf("ERROR: DS18B20 Get Temperature Failure\n");return -1;}printf("Temperature is: %.3f C\n", temp);return 0;
}/***@brief main*@param *temp*@retval 获取DS18B20测量的温度信息*/
int Get_DS18B20_Temp(double *temp)
{int  fd = -1;int  rv = -1;char path[50] = "/sys/bus/w1/devices/";//路径名char dir_name[20];int found = -1;DIR  *dirp;struct dirent *direntp;char  buf[128];char *ptr;//清空dir_name和buf内存空间的值,避免随机值产生乱码memset(dir_name, 0, sizeof(dir_name));memset(buf, 0, sizeof(buf));//打开文件夹"/sys/bus/w1/devices/"if ((dirp = opendir(path)) == NULL){//strerror(errno)会提示错误内容printf("ERROR: Open Directory '%s' Failure: %s\n", path, strerror(errno));return -1;}printf("Open Directory '%s' Successfully\n", path);//在文件夹中找DS18B20的文件夹28-xxwhile ((direntp = readdir(dirp)) != NULL){if (strstr(direntp->d_name, "28-") == NULL)continue;//提取文件名称strncpy(dir_name, direntp->d_name, strlen(direntp->d_name));printf("Find file: %s\n", dir_name);found = 1;break;}closedir(dirp);//找不到该文件夹if (found == -1){printf("ERROR: Can not find DS18B20 in %s\n", path);return -2;}//将文件夹名和文件名分别拼接到path上 strncat(path, dir_name, strlen(dir_name));strncat(path, "/w1_slave", sizeof(path)-strlen(path));//打开w1_slave文件if ((fd = open(path, O_RDONLY)) < 0){printf("ERROR: Open file '%s' Failure: %s\n", path, strerror(errno));return -3;}printf("Open file '%s' fd[%d] Successfully\n", path, fd);//从w1_slave中读取内容if ((rv = read(fd, buf, sizeof(buf))) < 0){printf("ERROR: Read data from file '%s' Failure: %s\n", path, strerror(errno));rv = -4;goto cleanup;}printf("Read %dB data from file '%s'\n", rv, path);//从buf里匹配"t=",并将ptr移到数据的首地址上if ((ptr = strstr(buf, "t=") + 2) == NULL){printf("ERROR: Find data Failure: %s", strerror(errno));rv = -5;goto cleanup;}//将数据转为double型,除1000得到正常的十进制温度*temp = atof(ptr)/1000;cleanup:if (fd > 0)close(fd);return rv;
}

实际效果图

树莓派控制DS18B20温度传感器相关推荐

  1. 树莓派与DS18B20温度传感器模块的使用

    好久不见鸭,时隔半年,树莓派菜鸟再次写起博客 树莓派与DS18B20温度传感器模块的使用 其实树莓派内置了驱动文件,可以直接通过一些命令读取温度传感器的温度,所以使用起来很简单,下面来示范一下. 所用 ...

  2. 【树莓派】DS18B20温度传感器

    1.接线按照下图:"-"号接地,中间接VCC电压(3.3v或者5v),S接口接GPIO4(Pin接口的7,BCM的4,wiringPi的7): 必须设置: 在/boot/confi ...

  3. java树莓派温度传感器_树莓派连接DS18B20记录温度

    最近尝试用DS18B20通过连接树莓派来记录温度.DS18B20是一种温度传感器,它很便宜,而且精确度也很高(±0.5°C),即使使用多个传感器时,也只需要占用树莓派的1个针脚来完成数据传输. DS1 ...

  4. 【室内温度+树莓派性能监控】树莓派+DS18B20温度传感器+0.96寸OLED显示屏使用及安装经验分享

    以下内容为本人原创 原文链接:https://blog.csdn.net/Yhen1/article/details/113760948 作者:@Yhen 发布网站:CSDN 未经本人同意禁止转载,如 ...

  5. 【树莓派】关于树莓派2代,更新最新内核后,DS18B20温度传感器无法找到对应文件的问题的解决

    一.问题和解决方法 问题: 在网上关于DS18B20温度传感器的教程有很多,但大部分都是基于老版本内核的例子.在入手树莓派2代后,加上DS18B20,按照他们的方法就是找不到对应的28-****文件, ...

  6. pythonds18b20_树莓派 Zero W+温度传感器DS18B20

    树莓派 Zero W+温度传感器DS18B20 作者:陈拓chentuo@ms.xab.ac.cn 2018.05.28/2018.06.01 0.  概述 用树莓派 Zero W读取DS18B20温 ...

  7. DS18B20温度传感器在树莓派下获取实时温度

    目录 1. DS18B20温度传感器的介绍 2.代码流程分析 2.1获取实时温度值 2.2获取温度值存放路径 2.3用到的库函数 3.完整代码 4.输出结果 1. DS18B20温度传感器的介绍 DS ...

  8. 树莓派+DS18B20温度传感器+yeelink物联网云

    本博文参考了网络上多篇树莓派操作DS18B20的博文,经过博主亲自实践,列出了详细的步骤,通过树莓派的单总线驱动来驱动DS18B20获取温度数据,并通过python读取温度值,上传到yeelink物联 ...

  9. 树莓派DS18B20温度传感器获取温度

    目录 树莓派使能DS18B20 C程序获取DS18B20温度 树莓派使能DS18B20 sudo raspi-config 进行配置树莓派,启动1-Wire完成使能 sudo reboot  重启树莓 ...

最新文章

  1. 理解ABR及其工作原理
  2. 博士期间要注意的几个问题
  3. c语言程序设计的日志,C语言程序设计教学日志.docx
  4. jq之$(“*“)隐藏所有元素
  5. HTML+CSS+JS实现 ❤️制作loading动画效果❤️
  6. mapview Java,Class:android核心类/MapView
  7. 人到不惑,程序员是否该认命?
  8. 一个c语言程序多个源文件,链接多个C源文件
  9. html css 写百度页面,Html+CSS练习(百度注册页面)--div布局实现
  10. MySQL服务器地址为空,win10 mysql没有服务器地址
  11. 基于java+SpringBoot+HTML+Mysql旅游网站设计与实现
  12. 访问Oracle数据库的四款工具软件介绍
  13. 计算机软件和应用审稿可以加急吗,计算机类期刊审稿周期
  14. iview card布局
  15. CTF--Broadcast
  16. 测度论与概率论笔记4:测度空间上的积分(上)
  17. Android Theme 常见主题风格详解
  18. 软件测试全网最全复习总结-别杠,杠就是你对
  19. c#中应用skinEngine给应用程序换皮肤
  20. C语言中fopen函数用法详解

热门文章

  1. html5怎么设置路由器,无线路由器
  2. JSF集成Spring
  3. 上线了新版在线GIF压缩功能,支持指定压缩大小
  4. 记录Springboot+Mybatis_Plus进行CRUD与分页的注意点
  5. python中的随机数种子seed()
  6. 神经网络与深度学习期末考试满分过题库!
  7. bottom sheets_Excel 2013中的SHEET和SHEETS函数
  8. Windows 9x、2K、XP、2003注册表大全
  9. 微信支付v3生成签名
  10. 功放限幅保护_限幅器在音响系统中限幅阈值的计算方法