精华内容
下载资源
问答
  • 基于树莓派温度传感器控制

    千次阅读 2018-11-09 22:17:22
    树莓派3b、温度传感器、继电器、风扇 具体的连接如下图: 代码如下: while GPIO.input(channel) == GPIO.LOW: continue while GPIO.input(channel) == GPIO.HIGH: continue while j < 40: k = ...

    材料准备:
    树莓派3b、温度传感器、继电器、风扇
    具体的连接如下图:
    在这里插入图片描述
    代码如下:

    while GPIO.input(channel) == GPIO.LOW:  
      continue  
       
     while GPIO.input(channel) == GPIO.HIGH:  
      continue  
     while j < 40:  
      k = 0  
      while GPIO.input(channel) == GPIO.LOW:  
       continue  
        
      while GPIO.input(channel) == GPIO.HIGH:  
       k += 1  
       if k > 100:  
        break  
        
      if k < 8:  
       data.append(0)  
      else:  
       data.append(1)  
       
      j += 1  
       
     print "sensor is working."  
     print data              #输出初始数据高低电平  
       
     humidity_bit = data[0:8]        #分组  
     humidity_point_bit = data[8:16]  
     temperature_bit = data[16:24]  
     temperature_point_bit = data[24:32]  
     check_bit = data[32:40]  
       
     humidity = 0  
     humidity_point = 0  
     temperature = 0  
     temperature_point = 0  
     check = 0  
       
     for i in range(8):  
      humidity += humidity_bit[i] * 2 ** (7 - i)              #转换成十进制数据  
      humidity_point += humidity_point_bit[i] * 2 ** (7 - i)  
      temperature += temperature_bit[i] * 2 ** (7 - i)  
      temperature_point += temperature_point_bit[i] * 2 ** (7 - i)  
      check += check_bit[i] * 2 ** (7 - i)  
       
     tmp = humidity + humidity_point + temperature + temperature_point      
       
     if check == tmp:                                #数据校验,相等则输出  
      print "temperature : ", temperature, ", humidity : " , humidity  
      if temperature>=24:
       print("打开风扇")
       GPIO.output(channel1,GPIO.HIGH)
      else:
       print("关闭风扇")
       GPIO.output(channel1,GPIO.LOW)
     else:                                       #错误输出错误信息,和校验数据  
      print "wrong"  
      print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp  
     time.sleep(1)  
    |  |  |
    |--|--|
    |  |  |
    
    

    电路连接比较简单,在这里不详细的叙述。

    展开全文
  • 树莓派+温度传感器DS18B20

    千次阅读 2018-07-15 12:19:54
    树莓派 Zero W+温度传感器DS18B20 作者:陈拓chentuo@ms.xab.ac.cn 2018.05.28/2018.06.01 0. 概述 用树莓派 Zero W读取DS18B20温度,上传到物联网平台。 1. 准备 1.1 硬件 l 树莓派Pi Zero W l DS18B20...

    作者:陈拓chentuo@ms.xab.ac.cn 2018.05.28/2018.06.01

     

    0.  概述

    用树莓派读取DS18B20温度,上传到物联网平台。

    1.  准备

    1.1 硬件

    • 我用树莓派Pi Zero W
    • DS18B20温度传感器
    • 杜邦线3根
    • 电脑(我用Windows 7)
    • 4.7KΩ电阻

    1.2 GPIO接口

    1.3 接线

     

    首先我们把18B20和树莓派连接。树莓派的GPIO4是W1(一线)设备的接口,所以我们需要把18B20的数据脚接到GPIO4上。GPIO4是GPIO的第7个插针。

    为什么用GPIO4作为DS18B20的IO,我们在后面第5小节说明。

    2.  测试

    2.1 连接电脑和Pi Zero W

    用putty连接电脑和Pi Zero W,看本文最后的参考文档Host Nameraspberrypi.local,端口22,用户名pi,密码raspberry

    2.2 更新树莓派软件源

    登录树莓派之后,先升级软件源,在终端下输入以下代码,等待一段时间即可。

    • 更新列表

    pi@raspberrypi:~ $ sudo apt-get update

    这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。我们在新立得软件包管理器里看到的软件列表,都是通过update命令更新的。

    • 更新软件

    pi@raspberrypi:~ $ sudo apt-get upgrade

    这个命令,会把本地已安装的软件,与刚下载的软件列表里对应软件进行对比,如果发现已安装的软件版本太低,就会提示你更新。

    2.3 修改配置

    pi@raspberrypi:~ $ sudo nano /boot/config.txt

    在dtoverlay=dwc2之前添加一行:

    dtoverlay=w1-gpio-pullup,gpiopin=4

    保存並检查修改是否正确:

    pi@raspberrypi:~ $ cat /boot/config.txt

    重启树莓派:

    pi@raspberrypi:~ $ sudo reboot

    注意:reboot容易丢失ssh文件,建议如下操作:

    • pi@raspberrypi:~ $ sudoshutdown -h now
    • 等待电源指示灯熄灭后,关闭电源
    • 重新上电连接ssh

    2.4 加载模块,查看温度传感器DS18B20设备

    • 加载2个模块

    pi@raspberrypi:~ $ sudo modprobe w1-gpio

    pi@raspberrypi:~ $ sudo modprobe w1-therm

    w1-gpio是单总线的IO操作模块,用于模拟单总线时序;w1_therm是DS18B20的内部操作模块(读写寄存器),和IO时序无关;

    我们可以将驱动结构看成是将w1_therm挂接到w1-gpio总线上,由w1-gpio控制w1_therm工作。

    modprobe命令用于向内核中加载模块或者从内核中移除模块。

    查看帮助:

    pi@raspberrypi:~ $ modprobe -h

    列出内核中挂载的单总线操作模块:

    lsmod | grep w1

    • 查看温度传感器DS18B20设备

    pi@raspberrypi:~ $ cd /sys/bus/w1/devices/

    pi@raspberrypi:~ $ ls

    28-000004d618fa就是温度传感器DS18B20设备,这是传感器的序列号,每个传感器都不一样。

    2.5 查看当前温度

    依次在终端输入以下命令:

    pi@raspberrypi:/sys/bus/w1/devices $ cd 28-000004d618fa

    pi@raspberrypi:/sys/bus/w1/devices/28-000004d618fa$ cat w1_slave

    第一行最后为CRC校验“YES”表示校验正确,为“NO”则代表校验出错,或读不到温度值。

    第二行的t=25375就是当前的温度值,要換算成攝氏度,除以1000,即当前温度为23000/1000=25.375攝氏度。

    3.  用python读取温度值

    文件存放:/home/pi/temperature.py

    操作如下:

    • 回到家目录

    pi@raspberrypi:/sys/bus/w1/devices/28-000004d618fa$ cat ~

    pi@raspberrypi:~ $pwd   #看看回家了没有

    /home/pi

    • 创建temperature.py

    pi@raspberrypi:~ $sudo touch temperature.py

    • 编辑temperature.py

    pi@raspberrypi:~ $sudo nano temperature.py

    写进如下內容:

    #/home/pi/temperature.py
    # open the ds18b20file.
    tfile =open("/sys/bus/w1/devices/28-000004d618fa/w1_slave")
    # Read all of thetext in the file.
    text =tfile.read()
    # close the file
    tfile.close()
    # Split the textwith new lines (\n) and select the second line.
    secondline =text.split("\n")[1]
    # Split the lineinto words, referring to the spaces, and select the 10th word (counting from0).
    temperaturedata =secondline.split(" ")[9]
    # The first twocharacters are "t=", so get rid of those and convert the temperaturefrom a string to a number.
    temperature =float(temperaturedata[2:])
    # Put the decimalpoint in the right place and display it.
    temperature =temperature / 1000
    print temperature

    注意修改28-000004d618fa

    • 查看

    pi@raspberrypi:~ $ cat temperature.py

    • 运行temperature.py

    python temperature.py

    4.  上传数据到乐联网

    乐联网是国内比较知名的免费物联网数据平台,下面我们先申请乐联网账号,并添加设备和传感器。

    4.1 申请乐联网账号

    网址:https://www.lewei50.com/,注册一个新账号,登录。

    4.2 添加新设备

    先添加设备,一个设备里可以有多个不同的传感器。

    选择“我的物联” > 在“菜单列表”中选择“我的设备” > 点击“添加新设备”标签,按下图添加设备:

    添加好的设备是这样的:

    免费可以添加2个设备。

    4.3 添加传感器

    接下来在新设备中添加传感器。

    在“菜单列表”中选择“传感器与控制器” > 在“传感器列表”标签页点击“新建”按钮。

    点击“保存”。注意“标识”要唯一

    传感器添加好了。免费可以添加8个传感器。

    4.4 获取Userkey

    选择“我的账户” > 在“菜单列表”中选择“设置个人信息” > 查看“设置个人信息”标签:

    记住这个Userkey:30346d2762e64cb99336443e0ae84e02

    4.5 数据上传测试

    乐联网提供了一个“API在线测试工具”,网址是:

    http://www.lewei50.com/dev/apitest/3

    • 将你的网关号改成设备ID:01
    • 将Post数据改成:
    [
        {
           "Name":"RT001",
           "Value":"15.28"
        }
    ]

    点击“调用接口”:

    数据成功发送"Message":"Successful. "!记住Request详情:

    URLhttp://www.lewei50.com/api/V1/gateway/UpdateSensors/01

    Methodpost

    --Headeruserkey:30346d2762e64cb99336443e0ae84e02

    POST Data

    [

        {

           "Name":"RT001",

           "Value":"15.28"

        }

    ]

    回到乐联网,在“传感器列表”标签页查看数据。

    4.6树莓派Zero W上传数据到乐联网

    • 修改temperature.py,将温度值用JSON格式保存到一个文本文件:

    pi@raspberrypi:~ $ sudo nano temperature.py

    #/home/pi/temperature.py
    tfile =open("/sys/bus/w1/devices/28-000004d618fa/w1_slave")
    text =tfile.read()
    tfile.close()
    secondline =text.split("\n")[1]
    temperaturedata =secondline.split(" ")[9]
    temperature =float(temperaturedata[2:])
    temperature =temperature / 1000
    print temperature
    res = '[{"Name":"RT001","Value":"%f"}]'%temperature
    output = open('/home/pi/datafile.txt', 'w')
    output.write(res)
    output.close

    用python将温度写入文本文件:/home/pi/datafile.txt

    运行pythontemperature.py进行测试。

    • 新增lewei50.sh脚本

    文件位置:/home/pi/lewei50.sh,命令:

    pi@raspberrypi:~ $sudo nano lewei50.sh

    参考Request详情写lewei50.sh脚本:

    sudo python /home/pi/temperature.py

    curl --request POST --data-binary@"/home/pi/datafile.txt" --header"userkey:30346d2762e64cb99336443e0ae84e02"http://www.lewei50.com/api/V1/gateway/UpdateSensors/01
    • 修改lewei50.sh权限

    pi@raspberrypi:~ $sudo chmod 777 lewei50.sh

    • 运行lewei50.sh测试

    pi@raspberrypi:~ $./lewei50.sh

    看看乐联网上的新数据,在“菜单列表”中选择“实时数据”查看:

     

    • 添加到计划任务定时采集数据

    将脚本加入定时任务cronjob,cronjob用于安排那些需要被周期性执行的命令。

    编辑定时任务:pi@raspberrypi:~$ sudo crontab -e

    选择一个编辑器,我选默认的2。

    在cornjob文件中添加下面一行,並保存(表示10分钟执行一次lewei50.sh脚本)

    */10 * * ** /home/pi/lewei50.sh

    Crontab语法

    一个crontab文件用五个段来定义:天,日期和时间,和一个要定期执行的命令代码。

    *     *   *   *    *  command to be executed
    -     -    -    -    -
    |     |     |     |     |
    |     |     |     |     +----- day of week (0 - 6) (Sunday=0)
    |     |     |     +------- month (1 - 12)
    |     |     +--------- day of month (1 - 31)
    |     +----------- hour (0 - 23)
    +------------- min (0 - 59)

    斜线“/”表示周期性,/10表示每10分钟;星号“*代表所有可能的值;逗号“,指定列表值,如: "1,3,4,7,8";中横线“-指定范围值,如"1-6", 代表 "1,2,3,4,5,6"

    编辑完毕后,很重要的一点是一定要执行如下命令:

    pi@raspberrypi:~ $ sudo /etc/init.d/cron restart

    否则,定时任务不会执行。

    4.7 乐联网数据展示

    乐联网提供了很多数据展示的方法,下面是其中的几种。

    • 实时数据

    请看上节相关的图。

    • 查看门户

    • 历史走势分析

    • 历史数据查询

    • 微信互动,乐为物联还支持你的设备与微信互动,关注乐为物联公众号。

    5.  多个DS18B20温度传感器

    5.1 硬件连接

    将所有的DS18B20并联。

    没有焊接工具的同学,可以这样连接,这是2个DS18B20:

    为什么用GPIO4作为DS18B20的IO?

    在2015-02-16之後的Raspbain版本,为了防止GPIO的冲突,使用了新的设备树DT(Device Tree)策略。Raspberry Pi的最新内核和固件(包括Raspbian和NOOBS版本)现在默认使用设备树DT来管理某些资源分配和模块加载。

    在新内核boot分区下多了个overlays文件夹,里面有很多dtb文件,这些其实就是树莓派的设备树,打开README,就可以知道该怎么使用了。查看相关说明:

    pi@raspberrypi:~ $ cat/boot/overlays/README

    • w1-gpio

    名称:w1-gpio

    信息:配置w1-gpio一线接口模块。

    如果不需要GPIO驱动外部上拉使用这个覆盖(overlay)。

    加载:dtoverlay=w1-gpio,<param>=<val>

    参数param: 

    gpiopin   用于IO的GPIO(默认是4)

       pullup     非零,on或y以启用寄生电源(2线,电源在数据线上)

    • w1-gpio-pullup

    名称:w1-gpio-pullup

    信息:配置w1-gpio一线接口模块。

    如果需要GPIO驱动外部上拉使用这个覆盖(overlay)。

    加载:dtoverlay=w1-gpio-pullup,<param>=<val>

    参数Params:

    gpiopin   用于IO的GPIO(默认是4)

    pullup 非零,on或y以启用寄生电源(2线,电源在数据线上)

    extpullup 用于外部上拉的GPIO(默认是5)

    注释:寄生电源就是利用数据传输的高电平供电,用法请看DS18B20数据手册。

    5.2 查看温度传感器DS18B20设备

    pi@raspberrypi:~ $ ls /sys/bus/w1/devices/

    28-000004d6162f和28-000004d627c6就是温度传感器DS18B20设备,这是传感器的序列号,每个DS18B20出厂时都设置了一个序列号,可以通过IO口读出。

    5.3 查看当前温度

    pi@raspberrypi:~ $cat /sys/bus/w1/devices/28-000004d6162f/w1_slave

    pi@raspberrypi:~ $cat /sys/bus/w1/devices/28-000004d627c6/w1_slave

    第一行最后为CRC校验“YES”表示校验正确,为“NO”则代表校验出错,或读不到温度值。

    第二行的t=27375和t=27437就是当前的温度值,要換算成攝氏度就是27.375度和27,437度。放在一起的两个传感器温度值怎么不一样?看看数据手册,DS18B20的测量精度是0.5℃。

    5.4 使用其他的GPIO作为DS18B20的IO引脚

    下面我们将DS18B20的IO引脚从GPIO4改到GPIO17上,看第1节的图,就是引脚11上。

    pi@raspberrypi:~ $ sudo nano/boot/config.txt

    将gpiopin=4修改为gpiopin=17:

    dtoverlay=w1-gpio-pullup,gpiopin=17

    保存,重启树莓派(注意:按我前面说的方法重启):

    pi@raspberrypi:~ $ sudo reboot

    将DS18B20的数据线插到引脚11上,查看温度传感器DS18B20设备:

    5.5 用C语言读取温度值

    WiringPi

    #include <stdio.h> 
    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include <fcntl.h> 
    #include <unistd.h> 
    #include <errno.h> 
    #include <stdlib.h> 
    #include <stdio.h> 
    
    #define BUFSIZE  128  
    int main(void) 
    { 
       float temp; 
       int i, j; 
       int fd; 
       int ret; 
    
       char buf[BUFSIZE]; 
       char tempBuf[5]; 
    
       fd = open("/sys/bus/w1/devices/28-00000495db35/w1_slave",O_RDONLY); //以只读方式打开ds18b20设备文件 
    
       if(-1 == fd){              //打开设备文件出错 
           perror("open device file error");  //打印出错信息(原因) 
           return 1; 
       } 
    
       while(1){ 
           ret = read(fd, buf, BUFSIZE);  //将设备文件中的内容读入buf中 
           if(0 == ret){                  //返回0表示读文件结束 
               break;                     //跳出循环体 
           }  
           if(-1 == ret){                 //读文件出错 
               if(errno == EINTR){        //出错是由中断引起的 
                    continue;              //继续读文件 
               } 
               perror("read()");         //打印出错信息(原因) 
               close(fd);                 //关闭文件 
               return 1; 
           } 
       } 
    
       for(i=0;i<sizeof(buf);i++){ 
           if(buf[i] == 't'){              //如果读到‘t’,说明后面马上出现温度值 
               for(j=0;j<sizeof(tempBuf);j++){ 
                    tempBuf[j] = buf[i+2+j]; //将温度值以字符串的形式写入tempBuf中 
               }
           }    
       } 
    
       temp = (float)atoi(tempBuf) / 1000; //将字符串转换为浮点型温度数据 
       printf("%.3f C\n",temp);             //打印出温度值 
       close(fd);                          //关闭文件 
    
       return 0; 
    } 
    

     

    参考文档

    1. 树莓派介绍 https://blog.csdn.net/chentuo2000/article/details/81051241

    2. 电脑连接树莓派Zero W https://blog.csdn.net/chentuo2000/article/details/81051308

    3. 树莓派GPIO控制 https://blog.csdn.net/chentuo2000/article/details/81051645

    4. 樹莓派+溫度感測器實現室內溫度監控:http://shumeipai.nxez.com/2013/10/03/raspberry-pi-temperature-sensor-monitors.html

    5. Raspberry PiTemperature Sensor
    http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/temperature/

     

     

     

    展开全文
  • 2、DS18B20温度传感器一个(淘宝大概5元左右) 3、4.7kΩ电阻一个 或 DS18B20模块一个(笔者用,淘宝1.5元一个,其实就是店家帮忙把电阻焊好了,接线稍好看些)。 4、杜邦线三根(双头母) 二、接线方式(如图所示...

    一、硬件准备
    1、树莓派(Raspberry Pi)一个
    2、DS18B20温度传感器一个(淘宝大概5元左右)
    3、4.7kΩ电阻一个 或 DS18B20模块一个(笔者用,淘宝1.5元一个,其实就是店家帮忙把电阻焊好了,接线稍好看些)。
    4、杜邦线三根(双头母)

    二、接线方式(如图所示)

    三、确认硬件接线是否正确并生效,并读取温度
    1、首先升级内核(可忽略,但如果版本较老,可能影响设备读取)

    apt-get update
    apt-get upgrade
    

    修改配置:

    sudo nano /boot/config.txt

    在最后一行手动添加这个,保存并重启树莓派。

    dtoverlay=w1-gpio-pullup,gpiopin=4

    根据官方的说法,在2015-02-16之后的Raspbain版本,为了防止GPIO的冲突,使用了新的dt策略,查看 /boot/overlay/readme

    2、确认设备是否生效

    sudo modprobe w1-gpio
    sudo modprobe w1-therm
    cd /sys/bus/w1/devices/
    ls
    

    显示结果:

    pi@raspberrypi:~$ cd /sys/bus/w1/devices/
    pi@raspberrypi:/sys/bus/w1/devices$ ls
    28-00000494cb79 w1_bus_master1
    

    28-00000494cb79就是笔者外接的温度传感器设备,但并不是每个客户端都显示一样的,这个是传感器的序列号。

    3、查看当前温度

    cd 28-00000494cb79
    cat w1_slave
    

    显示结果:

    70 01 4b 46 7f ff 10 10 e1 : crc=e1 YES
    70 01 4b 46 7f ff 10 10 e1 t=23000
    

    第二行的t=23000就是当前的温度值,要换算成摄氏度,除以1000,即当前温度为23000/1000=23摄氏度。

    四、用python读取温度值
    文件存放:/home/pi/temperature.py
    内容如下:

    #/home/pi/temperature.py
    #打开温度传感器文件
    tfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")
    #读取文件所有内容
    text = tfile.read()
    #关闭文件
    tfile.close()
    #用换行符分割字符串成数组,并取第二行
    secondline = text.split("\n")[1]
    #用空格分割字符串成数组,并取最后一个,即t=23000
    temperaturedata = secondline.split(" ")[9]
    #取t=后面的数值,并转换为浮点型
    temperature = float(temperaturedata[2:])
    #转换单位为摄氏度
    temperature = temperature / 1000
    #打印值
    print temperature
    

    在命令行运行,即可得出结果数值:
    python /home/pi/temperature.py

    五、上报到yeelink
    yeelink是国内比较知名的免费物联网数据平台,国外有COSM(https://cosm.com)。
    申请yeelink账号及添加设备和传感器,以及API的学习,本文跳过,请大家自行去学习一下。

    根据yeelink API的规则,我们需要提供一个文本文件,内容为一段JSON,如下:

    {
    “timestamp”:”2012-03-15T16:13:14″,
    “value”:294.34
    }
    

    若未指定timestamp, 服务器会自动加上当前时间,所以本文的操作不添加该字段

    1、修改python,将温度值用JSON格式保存到一个文本文件,全部如下:

    #/home/pi/temperature.py
    tfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")
    text = tfile.read()
    tfile.close()
    secondline = text.split("\n")[1]
    temperaturedata = secondline.split(" ")[9]
    temperature = float(temperaturedata[2:])
    temperature = temperature / 1000
    res = '{"value":%f}' %temperature
    output = open('/home/pi/datafile.txt', 'w')
    output.write(res)
    output.close
    

    python将温度值写入:/home/pi/datafile.txt

    2、新增yeelink.sh脚本
    文件位置:/home/pi/yeelink.sh
    内容如下:

    sudo python /home/pi/temperature.py
    curl --request POST --data-binary @"/home/pi/datafile.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/1969/sensor/2533/datapoints
    

    将U-ApiKey:XXXXXXXXXXXXXXXX替换为自已账户的API Key。
    后面的URL也需要替换为自己申请的传感器URL。

    3、添加到计划任务

    #为脚本增加可执行权限
    sudo chmod +x yeelink.sh
    #将脚本加入cronjob(计划任务)
    sudo crontab -e
    #在cornjob文件中添加下面一行,并保存(表示10分钟执行一下脚本,时间可自行修改)
    */10 * * * * /home/pi/yeelink.sh
    展开全文
  • 基于python通过树莓派获取温度传感器的温湿度  前面做过一个智能风扇,主要功能是通过温度来控制风扇的自动开关以及通过软件来进行控制风扇开关,功能都能实现但是 软件并没有做完,所以就不了了之。  我使用的...

    基于python通过树莓派获取温度传感器的温湿度

         前面做过一个智能风扇,主要功能是通过温度来控制风扇的自动开关以及通过软件来进行控制风扇开关,功能都能实现但是

    软件并没有做完,所以就不了了之。

         我使用的树莓派,如下图附上引脚的注释:

      

    注:树莓派的版本不同,引脚的意思会有一些差别,请注意!

    我的温度传感器是DHT11温度模块,附实物图:

       

     

    •    树莓派连接温度传感器  

            VCC接5V或者3.3V

             DATA接GPIO口(我接的是BCM17号针脚,物理针脚是11号)

            GNDGND

            根据上面引脚分布图,就可以轻松连接成功。

    • 获取温度和湿度(python)

         

    import RPi.GPIO as GPIO
    import time
    channel = 17 //引脚的引号
    data = []
    j = 0
    GPIO.setmode(GPIO.BCM)
    time.sleep(1)
    GPIO.setup(channel, GPIO.OUT)
    GPIO.output(channel, GPIO.LOW)
    time.sleep(0.02)
    GPIO.output(channel, GPIO.HIGH)
    GPIO.setup(channel, GPIO.IN)
    while GPIO.input(channel) == GPIO.LOW:
      continue
    
    while GPIO.input(channel) == GPIO.HIGH:
      continue
    
      while j < 40:
       k = 0
       while GPIO.input(channel) == GPIO.LOW:
          continue
    while GPIO.input(channel) == GPIO.HIGH:
        k += 1
        if k > 100:
        break
    
       if k < 8:
        data.append(0)
       else:
        data.append(1)
    j += 1
    print "sensor is working."
    print data
    humidity_bit = data[0:8]
    humidity_point_bit = data[8:16]
    temperature_bit = data[16:24]
    temperature_point_bit = data[24:32]
    check_bit = data[32:40]
    humidity = 0
    humidity_point = 0
    temperature = 0
    temperature_point = 0
    check = 0
    
        for i in range(8):
        humidity += humidity_bit[i] * 2 ** (7 - i)
        humidity_point += humidity_point_bit[i] * 2** (7 - i)
        temperature += temperature_bit[i] * 2 ** (7 -i)
        temperature_point += temperature_point_bit[i]* 2 ** (7 - i)
        check += check_bit[i] * 2 ** (7 - i)
        tmp = humidity + humidity_point + temperature +temperature_point
        if check == tmp:
         print "temperature : ", temperature, ", humidity : " , humidity//输出获取的温度和湿度
        else:
         print "wrong"
        print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp
    
    GPIO.cleanup()

    注:代码的位置有些错乱,需要自己调一下,但是代码本身是没有问题的。

    展开全文
  • DS18B20是一个比较常用的温度传感器,采用单总线控制,以前用单片机编程控制时严格按照单总线的时序控制,今天来看看在linux系统下如何控制DS18B20,体验一下在linux世界,一切都是文件。 一、修
  • 树莓派温度传感器DHT11读取数据

    万次阅读 2016-12-10 17:18:26
    树莓派作为一个完整的主机,除了能在上面跑系统外,也提供了40个引脚提供电路开发的功能。本来我在工作中常接触linux,但没啥机会接触硬件,正好手头上有一台raspberry 3b,本来是用来学linux相关的包的,闲的没事,...
  • 树莓派 dht11 温度传感器文件 数据保存到本地文件树莓派 dht11 温度传感器文件 数据保存到本地文件
  • 刚开始对于树莓派一无所知,更不要提使用传感器了。但是尽管这样你还是要硬着头皮往下学,你要不停地百度,看别人的东西,慢慢的积累的多了你就会对树莓派有一定的了解。 在开始做这个实验实验之前,我建议你必须...
  • 树莓派 Zero W+温度传感器DS18B20 作者:陈拓chentuo@ms.xab.ac.cn 2018.05.28/2018.06.01 0. 概述 用树莓派 Zero W读取DS18B20温度,上传到物联网平台。 1. 准备 1.1 硬件 树莓派Pi Zero W DS18B20温度...
  • raspberry_pi_temp 这是一个使用redislite和redis-collections模块将温度数据从单线温度传感器记录到Redis服务器的示例。 与使用sql数据库记录数据相比,这提供了两个优点。... 将温度传感器连接到您的树莓派
  • DS18B20温度传感器的介绍
  • 树莓派与DS18B20温度传感器模块的使用 其实树莓派内置了驱动文件,可以直接通过一些命令读取温度传感器的温度,所以使用起来很简单,下面来示范一下。 所用材料 树莓派X1 DS18B20温度传感器模块X1 母对母杜邦线X3 ...
  • 为了熟悉树莓派的GPIO操作,而找的一个小案例,出现了一些问题,最近才解决,故记录之。
  • 树莓派用DS18B20温度传感器测温教程.rar
  • 树莓派基础实验17:温度传感器实验

    千次阅读 2020-07-23 14:26:45
       温度传感器是检测温度并将其转换为输出信号的组件。根据材料和部件的特点,温度传感器可分为热电阻和热电偶两种,热敏电阻是前者的一种,他由半导体材料制成。大多数热敏电阻是负温度系数(NTC),其电阻随温度...
  • 在linux里面通过调用ds18b20可以得到传感器温度,通过这一理论写出获取树莓派温度的多进程代码。 通过这一指令可以调取温度。我们就可以通过多进程c代码来实现温度的文件获得,通过system函数和dup2函数对输入进行...
  •    温度传感器DS18B20是一款常用的数字温度传感器,具有体积小,硬件成本低,抗干扰能力强,精度高的特点。数字温度传感器易于连接,并可以在包装后应用于各种场合,与传统的AD采集温度传感器不同,采用1线总线,...
  • 参考原文地址:...# -*- coding: utf-8 -*- import RPi.GPIO as gpio import time PORT=13 #使用的树莓派的PIN13也就是GPIO27,根据自己连接位置更改此参数 gpio.setwarnings(False) gpio.setmode(g
  • 前言由于我给我弟弟(小学生)买了一个树莓派,So,需要一个例子激发他的兴趣(但是好像没啥用)于是我就写了这个正文开始--------DTH111.h/* 2018-02-13 1.0 */ #ifndef __DTH111_H__ #define __DTH111_H__ #...
  • 树莓派----温度传感器

    千次阅读 2018-09-29 15:08:51
    目的:通过温度传感器获取温度值,打印输出。 /********************************************************************** > File Name: first_weekend.c > Author: Huaqiong Xu > Created Time: ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 348
精华内容 139
关键字:

树莓派温度传感器