zoukankan      html  css  js  c++  java
  • 树莓派DS18B20温度传感器

    一.DS18B20温度传感器模块与树莓派的连接

    二.使能内核一线协议驱动模块

     

     

    三、Python读取DS18B20温度源码
    iot@raspberrypi:~/ds18b20 $ vim ds18b20.py
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
     
    import glob
    import time
     
    base_dir = '/sys/bus/w1/devices/'
    device_folder = glob.glob(base_dir + '28*')[0]
    device_file = device_folder + '/w1_slave'
     
    def read_rom():
    name_file=device_folder+'/name'
    f = open(name_file,'r')
    return f.readline()
     
    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
      print(' DS19B20 get temperature: %3.3f ℃'% read_temp())
    四、C程序读取DS18B20温度源码 
    iot@raspberrypi:~/ds18b20 $ vim ds18b20.c 
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <dirent.h>
    #include <string.h>
    #include <time.h>
    #include <errno.h>
     
    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;
    }

  • 相关阅读:
    python基础学习-无参装饰器
    python基础学习-day16==课后作业练习(函数对象和闭包)
    python基础学习-函数闭包
    python基础学习-函数对象与函数嵌套
    4.15作业
    反射、元类
    Mixins、多态、绑定方法与非绑定方法
    propety装饰器、继承
    封装
    4.8作业
  • 原文地址:https://www.cnblogs.com/LaiY9/p/14475271.html
Copyright © 2011-2022 走看看