【基于物联网的智能草莓种植系统的设计与实现系列教程】2-温湿度传感器代码与接线验证 (课程设计、毕设项目、树莓派、yolov5、DHT11温湿度传感器)

【基于物联网的智能草莓种植系统】项目连接温湿度传感器并验证相关代码

项目各章节跳转

可点击跳转到对应章节 ==》 努力更新中。。。

0.基于物联网的智能草莓种植系统项目简介
1.项目相关硬件购买清单与资料下载
2.温湿度传感器代码与接线验证
3.土壤湿度传感器代码与接线验证
4.光照度传感器代码与接线验证
5.PWM控制代码与接线验证
6.摄像头连接验证
7.触控屏连接验证
8.项目整体验证
9.项目快速搭建教程

树莓派环境说明

开始此章节教程之前,请确保你已经安装了相应的环境并且拥有相应的工具。
如果你还没有准备好可点此跳转
本章节将会带你使用树莓派连接dht11温湿度传感器,并获取相应的温湿度数据。

硬件连接

1、传输测试代码到树莓派,双击打开,可以看到,代码中使用的是BCM编码的16引脚。
在这里插入图片描述

2、查询编码表,树莓派的引脚常用的有三种编码格式,不同格式对应的引脚编号不一样,本项目使用的是BCM编码。16引脚对应GPIO_27。
在这里插入图片描述
3、电路图与实物图如下所示,数据引脚可以通过代码按需修改,电源线和接地线可以通过树莓派的供电引脚取电,也可以使用单独的电源,需要注意的是,如果是单独供电,需要与树莓派共地,也就是还需要把独立电源的接地与树莓派的接地进行连接,此处我直接从树莓派引脚取电。
在这里插入图片描述
在这里插入图片描述

代码测试

4、点击 run 执行代码。需要连接传感器再点击运行,否则是读取不到数据的。
在这里插入图片描述
5、读取的结果如下,程序里面有简单的延时函数与数据判断,数据正确才会打印,代码很简单且都有注释。
在这里插入图片描述

完整源码

可以直接复制,也可以到本项目的第一篇文章统一下载,点击跳转

import RPi.GPIO as GPIO
import time

def delayMicrosecond(t):    # 微秒级延时函数
    start,end=0,0           # 声明变量
    start=time.time()       # 记录开始时间
    t=(t-3)/1000000     # 将输入t的单位转换为秒,-3是时间补偿
    while end-start<t:  # 循环至时间差值大于或等于设定值时
        end=time.time()     # 记录结束时间

tmp=[]      # 用来存放读取到的数据

data = 16   # DHT11的data引脚连接到的树莓派的GPIO引脚,使用BCM编号
# https://blog.zeruns.tech  
a,b=0,0

def DHT11():
    GPIO.setup(data, GPIO.OUT)  # 设置GPIO口为输出模式
    GPIO.output(data,GPIO.HIGH) # 设置GPIO输出高电平
    delayMicrosecond(10*1000)   # 延时10毫秒
    GPIO.output(data,GPIO.LOW)  # 设置GPIO输出低电平
    delayMicrosecond(25*1000)   # 延时25毫秒      
    GPIO.output(data,GPIO.HIGH) # 设置GPIO输出高电平
    GPIO.setup(data, GPIO.IN)   # 设置GPIO口为输入模式
# https://blog.zeruns.tech    
    a=time.time()           # 记录循环开始时间
    while GPIO.input(data): # 一直循环至输入为低电平
        b=time.time()       # 记录结束时间
        if (b-a)>0.1:       # 判断循环时间是否超过0.1秒,避免程序进入死循环卡死
            break           # 跳出循环
        
    a=time.time()
    while GPIO.input(data)==0:  # 一直循环至输入为高电平
        b=time.time()
        if (b-a)>0.1:
            break
                
    a=time.time()
    while GPIO.input(data): # 一直循环至输入为低电平
        b=time.time()
        if (b-a)>=0.1:
            break   
            
    for i in range(40):         # 循环40次,接收温湿度数据
        a=time.time()
        while GPIO.input(data)==0:  #一直循环至输入为高电平
            b=time.time()
            if (b-a)>0.1:
                break
# https://blog.zeruns.tech                        
        delayMicrosecond(28)    # 延时28微秒
            
        if GPIO.input(data):    # 超过28微秒后判断是否还处于高电平
            tmp.append(1)       # 记录接收到的bit为1
                
            a=time.time()
            while GPIO.input(data): # 一直循环至输入为低电平
                b=time.time()
                if (b-a)>0.1:
                    break
        else:
            tmp.append(0)       # 记录接收到的bit为0
            
while True:
    GPIO.setmode(GPIO.BCM)      # 设置为BCM编号模式
    GPIO.setwarnings(False)
    del tmp[0:]                 # 删除列表
    time.sleep(1)               # 延时1# https://blog.zeruns.tech    
    DHT11()
  
    humidity_bit=tmp[0:8]       # 分隔列表,第07位是湿度整数数据
    humidity_point_bit=tmp[8:16]# 湿度小数
    temperature_bit=tmp[16:24]  # 温度整数
    temperature_point_bit=tmp[24:32]    # 温度小数
    check_bit=tmp[32:40]        # 校验数据
 
    humidity_int=0
    humidity_point=0
    temperature_int=0
    temperature_point=0
    check=0
# https://blog.zeruns.tech  
    for i in range(8):          # 二进制转换为十进制
        humidity_int+=humidity_bit[i]*2**(7-i)
        humidity_point+=humidity_point_bit[i]*2**(7-i)
        temperature_int+=temperature_bit[i]*2**(7-i)
        temperature_point+=temperature_point_bit[i]*2**(7-i)
        check+=check_bit[i]*2**(7-i)
  
    humidity=humidity_int+humidity_point/10
    temperature=temperature_int+temperature_point/10
  
    check_tmp=humidity_int+humidity_point+temperature_int+temperature_point
  
    if check==check_tmp and temperature!=0 and temperature!=0:  # 判断数据是否正常
        print("Temperature is ", temperature,"C\nHumidity is ",humidity,"%")# 打印温湿度数据
        #print("https://blog.zeruns.tech")
    else:
        print("error")
  
    time.sleep(1)
    GPIO.cleanup()

好的,恭喜你,已经成功连接并测试了温湿度传感器,继续加油!

猜你需要

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❀周周~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值