树老大 发表于 2013-6-17 09:52:34

树莓派_通过dht11得到温度,发微博

一.连接好 DHT11 温湿度传感器...

接线如图:


3v3 power连接 vcc || GPIO 1(编程用7)连data || GND随便哪个都成.....

二.利用库wiringPi,写c语言读出数据
wiringPi库的安装:wget http://project-downloads.drogon.net/files/wiringPi.tgz tar xf wiringPi.tgz cd wiringPi/wiringPi/ make make installsensor.c:(源脚本是读湿度和温度的,但由于我们只要温度,所以就把输出改成只需要温度)
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAX_TIME 85
#define DHT11PIN 7
int dht11_val={0,0,0,0,0};
int errors=0;

void dht11_read_val()
{
uint8_t lststate=HIGH;
uint8_t counter=0;
uint8_t j=0,i;
float farenheit;
for(i=0;i<5;i++)
   dht11_val=0;
pinMode(DHT11PIN,OUTPUT);
digitalWrite(DHT11PIN,LOW);
delay(18);
digitalWrite(DHT11PIN,HIGH);
delayMicroseconds(40);
pinMode(DHT11PIN,INPUT);
for(i=0;i<MAX_TIME;i++)
{
    counter=0;
    while(digitalRead(DHT11PIN)==lststate){
      counter++;
      delayMicroseconds(1);
      if(counter==255)
      break;
    }
    lststate=digitalRead(DHT11PIN);
    if(counter==255)
       break;
    // top 3 transistions are ignored
    if((i>=4)&&(i%2==0)){
      dht11_val<<=1;
      if(counter>16)
      dht11_val|=1;
      j++;
    }
}
// verify cheksum and print the verified data
if((j>=40)&&(dht11_val==((dht11_val+dht11_val+dht11_val+dht11_val)& 0xFF)))
{
    //farenheit=dht11_val*9./5.+32;
   // printf("RH:%d.%d\tTMP:%d.%d\n", dht11_val,dht11_val,dht11_val,dht11_val);   
    printf("%d.%d\n",dht11_val,dht11_val);
      exit(1);
}
else {
    errors = errors + 1;
    if (errors > 5) {
      printf("0.0\t0.0");
      exit(2);
    }
}
}

int main(void)
{
if(wiringPiSetup()==-1)
    exit(1);
while(1)
{
   dht11_read_val();
   delay(3000);
}
return 0;
}
然后编译gcc -o sensor sensor.c -L/usr/local/lib -lwiringPi运行下看看结果:

三.写python脚本利用微博发消息:
1.
首先需要申请到一个应用 才有 app key 和 app scret...
网址是:open.weibo.com
然后点击 应用开发—》移动应用 然后根据个人信息填写,之后会收到邮件 里边有app key等.

2.填写授权回调页(重要的一步)
进入应用 点击 左侧的应用信息 然后 在右侧找到完善应用信息

然后点击进入 找到“实际应用地址”,然后改写成为自己想要的...作为之后的授权回调页

3.安装 新浪微博sdk
sudo apt-get install python-pip
sudo pip install sinaweibopy

4.写python脚本:
testblog.py:#!/usr/bin/python
import webbrowser
import os
import string
import time

from weibo import *

def press_sina_weibo():
      APP_KEY = '- - - - - - - - - -' #your app key
      APP_SECRET = '- - - - - - - - ' # your app secret

      CALLBACK_URL = '- - - - - - - -' #your CALLBACK_URL

      client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
      print client.get_authorize_url()
      r = client.request_access_token(raw_input("input code:").strip())
      client.set_access_token(r.access_token, r.expires_in)   
      tboard = raw_input('Enter the tempreture limited>')
      tlimit = string.atof(tboard)
      text2 = 'warning!!the tem is '
      a = 1
      while True:
                p = os.popen('sudo ./sensor','r')
                line = p.readline();
                tnow = string.atof(line)         
                iftnow > tlimit:               
                        line = text2+line
                        if a%2==0:
                              line += '!!'
                        line += '\n'
                        utext = unicode(line,"UTF-8")
                        client.post.statuses__update(status=utext)
                a = a+1
                time.sleep(2)   
if __name__ == '__main__':
      press_sina_weibo()
运行说明:
将编译好的sensor和py脚本放在一个文件夹下
python testblog.py
然后会出现让你输入code
如下图:

只需要把上面https......一串复制到浏览器,然后打开就会跳转到另一个网页

然后把code=后面那一串复制进input code然后确定就可运行脚本
之后会输入温度阀值:
然后输入阀值就可以了,只要温度超过这一个阀值,脚本会发送信息到微博上.

实验结果:

为了显示效果比较好,我把阀值调低成10

然后微博上:


转载自:http://blog.sina.com.cn/s/blog_786555f6010180ji.html





wyjail 发表于 2013-6-17 10:11:24

mark一下

gatalon 发表于 2013-6-17 13:45:26

有意思啊。

cszhaoqm 发表于 2013-6-17 22:29:22

如果采集点多的话成本稍高,考虑arduino+树莓

无华0871 发表于 2013-6-17 22:57:11

标记备用

whtech1 发表于 2013-6-18 21:53:11

有没有试过数据线能有多长?一般长了的话,信号失真得厉害
页: [1]
查看完整版本: 树莓派_通过dht11得到温度,发微博