解析def函数中的值和def函数中的值

2024-10-02 22:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解析这些def函数之间的值时遇到了一些困难。基本代码getSensorData()和main()工作正常,从传感器读取值并发送到thingspeak。但是,我想在原始代码中添加一个名为calcDewPoint()的计算函数,以根据传感器值(RH,T)计算露点,但代码似乎卡住了:/

当我按原样运行代码时,终端的输出:

starting...
sense1
sense2
dewpoint1
gamma1
exiting.

使用树莓Pi和DHT22进行温度/湿度监测。数据显示在thingspeak.com上 更改列表2020年6月2日 添加露点计算

import sys 
import RPi.GPIO as GPIO 
from time import sleep 
import Adafruit_DHT 
import urllib2 
import math #(using numPy instead of math lib)
#import numPy as np
#import constant (Create a *.py file to be able to use constant accross multiple projects) 

#Constant Variables - Magnus Parameters
m = 17.62 #Mass Constant (Water Vapour)
Tn = 243.12 #Tempreture Constant
Ah = 6.112 #hPa Pressure Constant
Ak = 0.611 #kPa Pressure Constant
K = 273.15 #Kelvin constant
Ta = 216.7 #Tempreture Constant

myAPI = 'FZZHL7N2R2AXXXXX'

def getSensorData():
   print 'sense1'
   RH, T = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 17)
   print 'sense2'
   return (str(RH), str(T))

def calcDewPoint(RH, T):
   print 'dewpoint1'
   Td = (K * gamma(RH, T)) / (m - gamma(RH, T))
   print 'dewpoint2' 
   return str(Td)

def gamma(RH, T):
   print 'gamma1'
   g = math.log(RH/100.0) + ((m * T) / (c + T))
   print 'gamma2'
   return str(g)

def main(): 
   print 'starting...'
   baseURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI 
   while True: 
       try: 
           RH, T = getSensorData() #Call function to Read DHT22 sensor conencted to RaspberryPi
           Td = calcDewPoint(RH, T) #Call function to calculate dewpoint
           f = urllib2.urlopen(baseURL + "&field1=%s&field2=%s&field3=%s" % (RH, T, Td)) 
           print f.read() 
           f.close() 
           sleep(60) #uploads DHT22 sensor values every 1 minutes 
       except: 
           print 'exiting.' 
           break 
# call main 
if __name__ == '__main__': 
   main()  

Tags: to代码importadafruitmaindeftdrh
2条回答

一切都运行顺利,代码在调试器中处理异常

  File "/usr/lib/python3/dist-packages/thonny/backend.py", line 305, in _custom_import
    module = self._original_import(*args, **kw)
ImportError: No module named 'urllib2'

但总体而言,它运行良好。我们可以把线合上

"""
dht22.py 
Temperature/Humidity monitor using Raspberry Pi and DHT22. 
Data is displayed at thingspeak.com
Original author: Mahesh Venkitachalam at electronut.in 
Modified by Jacques Kleynhans  06062020 
Return rounded string values
Created Temporary variables Hum and Tair
"""

#import sys
import math
#import RPi.GPIO as GPIO 
from time import sleep 
import Adafruit_DHT 
import urllib2

#Constant Variables - Magnus Parameters Max 0.083 Tair Range -20C + 50C
m = 17.62 # g/mol Mass Constant (Water Vapour)
Tn = 240.7263 #Tempreture Constant
Ah = 6.116441 #hPa Pressure Constant
Ak = 0.611 #kPa Pressure Constant
K = 273.15 #Kelvin constant
Ta = 216.7 #Tempreture Constant

#constant for leaf Temperature
Tc = 2.0

myAPI = 'FZZHL7N2R2AXXXXX' 

def getSensorData(): 
   RH, T = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 17) 
   return (round(RH,3), round(T,3)) 

# Define functions to calculate dewpoint, return a rounded string)

def calcDewPoint(Hum,Tair):
   #print('dewpoint1')
   Td = (Tn * gamma(Hum,Tair)) / (m - gamma(Hum,Tair))
   #print('dewpoint2') 
   return round(Td,3)

def gamma(Hum,Tair):
   #print ('gamma1')
   g = math.log(Hum/100.0) + ((m * Tair) / (Tn + Tair))
   #print('gamma2')
   return round(g,3) 

# Define functions to calculate VPD, return a rounded integer)  
#Vapor pressure deficit control strategies for plant production
#IFAC Control applications and Ergonomics in Agriculture, Athens, Greece, 1998

def satVaporPres(Tair):
    es = 6.1078*math.exp((Tair*17.2694)/(Tair+237.3)) #mPa
    return round(es,3)

def actVaporPres(Hum, es):
    ea = (Hum/100)*es
    return round(ea,3)

def leafEs(Tair):
    leafTemp = Tair - Tc
    les = 6.1078*math.exp((leafTemp*17.2694)/(leafTemp+237.3))
    return round(les, 3)

#Partial pressure of water vapour Pw in the air surrounding the plant
def parPressureW(Hum, es, Tair):
    Pw = Hum*es*Tair
    return(Pw)

def VPD(les, ea): #VPD air / crop
    VPD = (les - ea)/10
    return round(VPD,3)

def main(): 
   print('starting...')
   baseURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI 
   while True: 
       try: 
           RH, T = getSensorData()
           Hum = RH
           Tair = T
           Td = calcDewPoint(Hum,Tair)

           es = satVaporPres(Tair)
           ea = actVaporPres(Hum, es)
           les = leafEs(Tair)
           TempVPD = VPD(les,ea)           

           print(Hum, Tair, Td, TempVPD)
           f = urllib2.urlopen(baseURL + "&field1=%s&field2=%s&field3=%s&field4=%s" % (RH, T, Td, TempVPD)) 
           print f.read() 
           f.close() 
           sleep(60) #uploads DHT22 sensor values every 1 minutes 
       except: 
           print('exiting.') 
           break 
# call main 
if __name__ == '__main__': 
   main()  

您的变量c未定义。当您调用calcDewPoint时,它会调用gamma,它会尝试运行您的数学表达式。但是,c在该点不存在

相关问题 更多 >