【C语言】树莓派(Raspberry Pi)+DS18B20 获取当前温度


前言

这次使用C语言来实现树莓派读取DS18B20测量的温度,加深一下对文件I/O的理解
DS18B20是一个比较常用的温度传感器,采用单总线控制,以前用单片机编程控制时严格按照单总线的时序控制,今天来看看在linux系统下如何通过DS18B20来获取温度信息。


一、实验准备

1、硬件准备

硬件 数量
Raspberry 4B 1
DS18B20 温度传感器 1
杜邦线 若干

2、软件准备

在开始之前,要使能树莓派内核的单总线协议驱动模块(1-Wire)
具体操作如下

sudo raspi-config

在这里插入图片描述
在这里插入图片描述
单总线的接口默认是GPIO 4(BCM),使用默认接口的话可以忽略下面更换引脚的操作
若想更换自己选择的端口,则需要在 /boot/config.txt 文件的最后那行中加上 “,gpiopin=你想要的端口”。

vim /boot/config.txt

在最后一行添加以下内容,这里的 gpiopin = 4 是采用BCM GPIO的标准。
如果是模块化的DS18B20,则添加以下内容【因为模块中已包含上拉电阻】

dtoverlay=w1-gpio, gpiopin=4

如果是单独的一个DS18B20芯片【也就是普通直插三极管的样子】

dtoverlay=w1-gpio-pullup, gpiopin=4

在这里插入图片描述
最后重启系统

sudo reboot

确认系统有自动加载单总线协议的驱动模块:

lsmod | grep w1

以下为正常加载
在这里插入图片描述

二、实现过程

配置好单总线的驱动协议模块后,将DS18B20接上树莓派

Raspberry Pi DS18B20
3.3V VCC
GND GND
4 (BCM) DQ

接上树莓派后,可以在 /sys/bus/w1/devices/ 目录下找到一个28-xxxxxx的文件夹(xxxxxxx为该DS18B20芯片的序列号)
该文件夹存放 DS18B20 的数据信息
DS18B20测量的温度数据存放在该文件夹的 w1_slave 文件中。
在这里插入图片描述
从图中看出,这时DS18B20测量的温度值为 31.562 ℃

1、找该DS18B20芯片的设备文件夹

  • ①、打开 “/sys/bus/w1/devices/” 这个文件夹,并让dirp指向该文件夹
  • ②、从该文件夹中,逐个找 “ 文件名中包含有 28- 的文件 ”
  • ③、找到则将文件夹名复制给字符数组 dir_name
  • ③、找不到则报错,退出函数
char 			 path[50] = "/sys/bus/w1/devices/";

//打开文件夹"/sys/bus/w1/devices/"
if ((dirp = opendir(path)) == NULL)
{
   
   
	printf("ERROR: Open Directory '%s' Failure: %s\n", path, strerror(errno));
	return -1;
}
printf("Open Directory '%s' Successfully\n", path);

//在文件夹中找DS18B20的文件夹28-xx
while ((direntp = readdir(dirp)) != NULL)
{
   
   
	if (strstr(direntp->d_name, "28-") != NULL)
	{
   
   
		strncpy(dir_name, direntp->d_name, strlen(direntp->d_name));
		printf("Find file: %s\n", dir_name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simply myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值