树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度
参考:http://shumeipai.nxez.com/2013/10/03/raspberry-pi-temperature-sensor-monitors.html
第一步,允许单总线接口
sudo raspi-config进入interfacingoptions

enable 1-wire interface

第二步,接线

接BCM编码为4即图上物理引脚7
第三步,升级内核
sudo apt-get update
sudo apt-get upgrade
pi@raspberrypi:~$ cd /sys/bus/w1/devices/
pi@raspberrypi:/sys/bus/w1/devices$ ls
-00000xxxxxx w1_bus_master1
第四步,查看当前温度
cd -00000xxxxxx cat w1_slave
显示:
4b 7f ff 0c 2f : crc=2f YES
4b 7f ff 0c 2f t=
第二行的t=20375就是当前的温度值,要换算成摄氏度,除以1000,即当前温度为20
python
#!/usr/bin/python3
import os,time device_file ='/sys/bus/w1/devices/28-031681e171ff/w1_slave' def read_temp_raw():
f = open(device_file,'r')
lines = f.readlines()
f.close()
return lines def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string)/1000.0
return temp_c while True:
print('temp C = %f'%read_temp())
time.sleep(1)
打印结果:
pi@raspberrypi:~/myPython $ ./temp_ds18b20.py
temp C = 20.687000
temp C = 20.687000
temp C = 20.687000
temp C = 20.750000
temp C = 20.750000
temp C = 20.750000
C语言代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <hiredis/hiredis.h> int Open_send(char *base){ //打开发送数据
int fd, size;
char buffer[];
fd = open(base,O_RDONLY);
lseek(fd,,SEEK_SET);
size = read(fd,buffer,sizeof(buffer));
close(fd);
printf("temp C = %f\n",(float)atoi(buffer)/1000.0);
return ;
} int readFileList(char *basePath) //文件查找
{
DIR *dir;
struct dirent *ptr;
char base[]; if ((dir=opendir(basePath)) == NULL){
perror("Open dir error...");
exit();
}
while ((ptr=readdir(dir)) != NULL)
{
if(strcmp(ptr->d_name,".")== || strcmp(ptr->d_name,"..")==) ///current dir OR parrent dir
continue;
else if(ptr->d_type == ){
memset(base,'\0',sizeof(base));
sprintf(base,"%s",ptr->d_name);
if((strcmp("",base)<)&&(strcmp("",base)>)){
sprintf(base,"%s/%s/w1_slave",basePath,ptr->d_name);
//printf("%s\n",base);
while()
Open_send(base);
}
}
}
closedir(dir);
return ;
} int main(void)
{
DIR *dir;
char basePath[];
memset(basePath,'\0',sizeof(basePath));
strcpy(basePath,"/sys/bus/w1/devices");
readFileList(basePath);
return ;
}
=======================================华丽的分割线=======================================
由于根据官方的说法,在2015-02-16之后的Raspbain版本,为了防止GPIO的冲突,使用了新的dt策略,更改了原来单总线gpio的配置方法,需要在配置文件中添加gpiopin=8,配置单总线的gpio引脚。
修改配置:
sudo vim /boot/config.txt
在最后一行手动添加这个,保存并重启树莓派。
dtoverlay=w1-gpio-pullup,gpiopin=
在通过配置sudo raspi-config进入interfacingoptions配置单总线时,系统会在/boot/config.txt文件添加dtoverlay=w1-gpio-pullupz,只需要在后面通过gpiopin指定引脚。
树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度的更多相关文章
- 树莓派进阶之路 (012) - 树莓派配置文档 config.txt 说明
原文连接:http://elinux.org/RPi_config.txt 由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在”config.txt”这个文本文件中. 树莓派的 ...
- 树莓派进阶之路 (028) - 树莓派SQLite3的安装
MySQL占用内存太大,而SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景 ...
- 树莓派进阶之路 (019) - 树莓派通过filezilla,samba与PC文件共享(转)
虽然我们可以很方便的通过ssh譬如putty或者vnc连接操控树莓派,但是毕竟树莓派资源没那么高,在上面编程,调试要吃力的多.所以还是想在pc上编程上传到树莓派或者最好,文件共享,可以直接读写共同的文 ...
- 树莓派进阶之路 (013) - 树莓派2/3 C语言使用PWM
我手里面的是树莓派3,系统是Raspbian官方操作系统,已经安装好了wiringPi. PWM简介:脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平 ...
- 树莓派进阶之路 (010) - 树莓派raspi-config配置(转)
经过前面两步我们的树莓派已经正常的工作起来了,但是在真正用它开发之前还需要进行一些列的配置以及软件的安装,这样开发起来才会得心应手,下面我们介绍一下常用的软件和服务 1.配置选项: 树莓派第一次使用的 ...
- 树莓派进阶之路 (008) - 树莓派安装ftp服务器(转)
vsftpd是开源的轻量级的常用ftp服务器. 1,安装vsftpd服务器 (约400KB) sudo apt-get install vsftpd 2,启动ftp服务 sudo serv ...
- 树莓派进阶之路 (006) - 树莓派安装wiringPi
安装git-core sudo apt-get install git-core 下载winringPi库 git clone git://git.drogon.net/wiringPi 编译和安装库 ...
- 树莓派进阶之路 (009) - 树莓派ftp脚本(原创)
FTP.sh #!/bin/sh cd echo "彻底卸载原有的ftp" sudo apt-get remove --purge vsftpd #(--purge 选项表示彻底删 ...
- 树莓派进阶之路 (005) - 树莓派Zsh安装脚本(原创)
zsh.sh #!/bin/bash cd #安装zsh sudo apt-get install zsh #查看zsh cat /etc/shells #更改zsh chsh -s /bin/zsh ...
随机推荐
- rqnoj-329-刘翔!加油!-二维背包
注意排除干扰项. 因为价值不会相等,所以价值的多少与本题没有任何关系,. 所以价值为干扰项,所以不用考虑. 二维背包,简单求解. #include<stdio.h> #include< ...
- Delphi获取默认打印机名称及端口
Delphi获取默认打印机名称及端口 在前段时间写的收银系统中由于目前市场上很多电脑主板上已经没有并口,而POS机却又需要并口,所以目前需要用PCI转接卡,这个就导致不同门店使用的端口就有可能不同,这 ...
- VS2010自带的性能分析工具分析.NET程序的性能
这篇博文给大家分享的是,如何使用VS自带的性能分析工具来分析我们编写的.NET程序,一边找出程序性能的瓶颈,改善代码的质量.在实际开发中,性能真的很重要,往往决定一个产品的生死~良好的用户体验的基础之 ...
- HTTP协议中源端口和目标端口的问题
[提问] How is source port for HTTP determined? Is there ever collision in NAT? I know that when a HT ...
- OpenWRT下实现Portal认证(WEB认证)
首先简单介绍一下什么是Portal认证,Portal认证,通常也会叫Web认证,未认证用户上网时,设备强制用户登录到特定站点,用户可以免费访问其中的服务.当用户需要使用互联网中的其它信息时,必须在门户 ...
- 【转】Spring MVC处理静态资源
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- docker toolbox在win7下的安装
1.下载安装docker toolbox docker toolbox的下载地址: http://mirrors.aliyun.com/docker-toolbox/windows/docker-to ...
- 对IIC总线时序的一点理解以及ACK和NACK(NAK)
参考自:http://blog.chinaunix.net/uid-16100003-id-3059814.html 关于IIC的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都 ...
- JAVA设计模式——第 7 章 门面模式【Facade Pattern】(转)
好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较 ...
- 理解CPU steal time
http://melody-dc.com/2015/11/21/%E7%90%86%E8%A7%A3CPU-steal-time/ http://www.cnblogs.com/yjf512/p/33 ...