Linux下树莓派ds18b20温度获取
介绍
在Linux下,通过树莓派DS18B20温度传感器来获取温度;DS18B20是DALLAS公司的1-Wire(单总线)数字温度计芯片,温度测量范围从-55℃至+125℃。DS18B20是常用的数字温度传感器, 其输出的是数字信号, 具有体积小, 硬件开销低, 抗干扰能力强, 单线数字温度传感器.
实例
通过树莓派配置好DS18B20温度后一般它会保存在下面得路径下,
**/sys/bus/w1/devices/28-04xxxxxxxxxx/w1_slave**
// yy@Public_RPi:/sys/bus/w1/devices/28-xxxxxxxxx$ cat get_tmp
2a 01 4b 46 7f ff 0c 10 f1 : crc=f1 YES
2a 01 4b 46 7f ff 0c 10 f1 t=18625
从上面的内容看出当前获取的数据是 t = 18625 ;要实时获取这个温度值需要通过通过opendir(),readdir()等等一些函数将他实现;还有就是怎样将获取得到的数据改为标准格式;
具体实现步骤
1,通过opendir(),readdir() 将/sys/bus/w1/devices/28-xxxxxxxxx$ 这个路径打开,读取get_tmp;
2, 将get_tmp加到/28-xxxxxxxxx固定路径下;
3,调用opendir() ,readdir(), open(),read(),读出数据;
4,用strcat(),strstr()来解析数据;
Linux下文件IO操作文件夹
1,opendir();
#include<dirent.h>
#include<sys/types.h>
DIR *opendir(const char *name);
opendir() 用来打开指定的目录文件,并返回DIR*形态的目录流, 和open()类似, 接下来对目录的读取和搜索都要使用此返回值,该返回值是一个指向DIR结构体的指针
,失败返回NULL;
DIR结构体
struct __dirstream
{
void *__fd;
char *__data;
int __entry_data;
char *__ptr;
int __entry_ptr;
size_t __allocation;
size_t __size;
__libc_lock_define (, __lock)
};
typedef struct __dirstream DIR;
2,readdir();
#include <dirent.h>
struct dirent *readdir(DIR *dirp)