一、树莓派是什么

树莓派是一款基于ARM的微型电脑主板,系统基于Linux,以MicroSD卡为磁盘,树莓派主板有4个USB接口,一个以太网接口,一个3.5mm音频口,一个HDMI视频接口,40-pin的GPIO连接端口 9f6168dd4970d875a1943d309e803227

https://www.raspberrypi.org/products/

二、树莓派可以干什么

  1. 可以当做一个微型服务器,作为FTP文件服务器、网站服务器、代码托管等
  2. 游戏机(刷入游戏模拟器系统,可玩大部分复古游戏)https://www.jianshu.com/p/feffa629084a
  3. 遥控车(手机通过socket连接控制小车,且小车装有红外线传感器,可以自动避障),
  4. 可以结合其他传感器搭建智能家居

9a9839f9b765d28f5df2d7a760cb1fac

a52ee48448e97a690a17bdf3c1a55334

三、DHT11温湿度传感器

传感器文档

2dc11330550baa9f61098b5424b6138c

价格便宜,体积小,功耗低,缺点是精度不高

有四个针脚:正极、负极、串行数据总线、空脚

DHT11温湿度传感器数据读取原理

e5b13279dbc6a9bcdc79646b4de445db

f61c334aa069792bf1721a3398ac241c

代码:

__author__ = 'DuShu'
import time
import RPi.GPIO as GPIO

def getIntVal(binayList):
    idx = 0 
    binaryStr = '' 
    while idx < len(binayList):
        binaryStr += str(binayList[idx]) 
        idx += 1 
    return int(binaryStr ,2) 

def getHumidity():
    GPIO_DATA = 18
    GPIO_HIGH = GPIO.HIGH 
    GPIO_LOW = GPIO.LOW 
    GPIO.setmode(GPIO.BCM) 
    
    #一秒后开始工作
    time.sleep(1)

    #设置GPIO接口为输出数据模式
    GPIO.setup(GPIO_DATA,GPIO.OUT) 
    #输出一个低电平信号
    GPIO.output(GPIO_DATA, GPIO.LOW) 
    time.sleep(0.02) #0.018

    #0.02秒后输出一个高电平信号,启动模块测量
    GPIO.output(GPIO_DATA, GPIO.HIGH)

    #设置GPIO接口为读取读取数据模式
    GPIO.setup(GPIO_DATA,GPIO.IN) 

    #等待,获取到高电平信号
    while GPIO.input(GPIO_DATA) == GPIO_HIGH:
        pass 

    #等待,获取到低电平信号
    while GPIO.input(GPIO_DATA) == GPIO_LOW:
        pass 

    #获取到高底电平信号后,开始读取模块获取数据
    data = [] 
    cnt = 40 
    dataArr = []
    while cnt > 0:
        cnt = cnt - 1 

        while GPIO.input(GPIO_DATA) == GPIO_LOW:
            pass 

        k = 0 
        while GPIO.input(GPIO_DATA) == GPIO_HIGH:
            k += 1 
            if k > 100:
                break 

        dataArr.append(k)

        if k < 10:
            data.append(0) 
        else:
            data.append(1) 

    print(dataArr)

    #根据公式定义,解析温湿度数据
    val1 = getIntVal(data[0:8]) 
    val2 = getIntVal(data[8:16]) 
    val3 = getIntVal(data[16:24]) 
    val4 = getIntVal(data[24:32]) 
    val5 = getIntVal(data[32:40]) 

    if (val5 == val1 + val2 + val3 + val4):
        return [val1, val3] 
    else:
        return [-1, -1] 

    GPIO.cleanup() 

if __name__ == '__main__':
    hum = getHumidity() 
    print("hum:", hum[0], " temp:", hum[1]) 

四、参考

https://blog.csdn.net/guyang1995/article/details/54692810 https://zhuanlan.zhihu.com/p/74440206