树莓3上用DHT11读取温湿度

这是一篇树莓开发入门类的文字记录,换成Arduino来做的话可能会更为简单直接,但有些时候也需要通过树莓的PIN来连接一些常规的传感器。

本示例你需要准备以下的材料:

  • DHT 11/22
  • RaspberryPI
  • 4.7 K电阻

具体连接方式如下图所示:

连接好线路之后进入树莓的命令行安装驱动 DHT11的依赖包 Adafruit_DHT :

$ pip install adafruit-dht

我们使用这个包其实也只是使用其中的一个方法

humidity, temperature = Adafruit_DHT.read_retry( Adafruit_DHT.DHT11, pin )

read_retry方法第一个参数用于指定当前传感器的型号一般为 DHT11DHT22 ,第二个参数则是连接到树莓派的接口号。(GPIO)此方法返回是的一个(湿度,温度)结构的元组(tuple)类型对象。

完整的代码如下所示:

import time
import Adafruit_DHT

## Assuming the DHT11 sensor is connected to GPIO pin number 4
pin = 4 

def run():
  while True:
    humidity, temperature = Adafruit_DHT.read_retry( Adafruit_DHT.DHT11, pin )
    if humidity is not None and temperature is not None:
        print "Temp={0:f}*C  Humidity={1:f}%".format(temperature, humidity)
    else:
        print "Failed to get reading. Try again!"
    #Sleep some time
    time.sleep(10)

run()

运行本示例你需要使用sudo否则会运行失败。

$ sudo python dht_test,.py

用Python来做这么低层的操作虽然有点别扭但习惯就好了,需要注意的是Python的逐行解析的,程序执行完就会自动退出,所以我在这个范例里面才会使用 while True 这个“死循环” 来模拟下位机的main函数以实现“主循环”的效果。

这个程序就会每10秒中自动读取一次DHT上的温湿度数据,并打印出来的。

小结

程序虽小但意义很大,与下位机开发不同。在Arduino上或者STM上写个主循环它就会永不停止地按照CPU的时钟循环永远地执行下去,树莓的嵌入式开发需要带着“系统”的思维来进行设计,换一个说法,我们可以将这个示例做成一个Linux的常规服务,用SystemD将这个程序在系统启动时就运行在后台,然后将读取出来的数据写到pyZMQ的队列或者某个文件里面让其它的程序进行读取,这才是“硬件相合”的实现。

转载于:https://my.oschina.net/Dotnetage/blog/2413693

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值