From c399737b41e071453426f17ba41c2ff657f3f9d8 Mon Sep 17 00:00:00 2001 From: Suhayl <838119509@qq.com> Date: Wed, 7 Mar 2018 16:52:07 +0800 Subject: [PATCH] update DHT11 program The DHT manufacturer updates the firmware, so we also need to update the program --- Code/C_Code/21.1.1_DHT11/DHT.cpp | 11 ++++---- Code/C_Code/21.1.1_DHT11/DHT.hpp | 4 +-- Code/C_Code/21.1.1_DHT11/DHT.o | Bin 2908 -> 0 bytes Code/C_Code/21.1.1_DHT11/DHT11 | Bin 8836 -> 0 bytes Code/C_Code/21.1.1_DHT11/DHT11.cpp | 4 +-- Code/Python_Code/21.1.1_DHT11/DHT11.py | 6 ++--- Code/Python_Code/21.1.1_DHT11/Freenove_DHT.py | 24 ++++++++++-------- 7 files changed, 27 insertions(+), 22 deletions(-) delete mode 100644 Code/C_Code/21.1.1_DHT11/DHT.o delete mode 100644 Code/C_Code/21.1.1_DHT11/DHT11 diff --git a/Code/C_Code/21.1.1_DHT11/DHT.cpp b/Code/C_Code/21.1.1_DHT11/DHT.cpp index ab5b380..9e39cf5 100644 --- a/Code/C_Code/21.1.1_DHT11/DHT.cpp +++ b/Code/C_Code/21.1.1_DHT11/DHT.cpp @@ -2,7 +2,7 @@ * Filename : DHT.cpp * Description : DHT Temperature & Humidity Sensor library for Raspberry * Author : freenove -* modification: 2016/07/10 +* modification: 2018/03/07 **********************************************************************/ #include "DHT.hpp" //Function: Read DHT sensor, store the original data in bits[] @@ -22,7 +22,7 @@ int DHT::readSensor(int pin,int wakeupDelay){ delayMicroseconds(40); pinMode(pin,INPUT); - int loopCnt = DHTLIB_TIMEOUT; + int32_t loopCnt = DHTLIB_TIMEOUT; t = micros(); while(digitalRead(pin)==LOW){ if((micros() - t) > loopCnt){ @@ -61,13 +61,14 @@ int DHT::readSensor(int pin,int wakeupDelay){ } pinMode(pin,OUTPUT); digitalWrite(pin,HIGH); + //printf("bits:\t%d,\t%d,\t%d,\t%d,\t%d\n",bits[0],bits[1],bits[2],bits[3],bits[4]); return DHTLIB_OK; } //Function:Read DHT sensor, analyze the data of temperature and humidity //return:DHTLIB_OK DHTLIB_ERROR_CHECKSUM DHTLIB_ERROR_TIMEOUT int DHT::readDHT11(int pin){ int rv ; - int8_t sum; + uint8_t sum; rv = readSensor(pin,DHTLIB_DHT11_WAKEUP); if(rv != DHTLIB_OK){ humidity = DHTLIB_INVALID_VALUE; @@ -75,8 +76,8 @@ int DHT::readDHT11(int pin){ return rv; } humidity = bits[0]; - temperature = bits[2]; - sum = bits[0] + bits[2]; + temperature = bits[2] + bits[3] * 0.1; + sum = bits[0] + bits[1] + bits[2] + bits[3]; if(bits[4] != sum) return DHTLIB_ERROR_CHECKSUM; return DHTLIB_OK; diff --git a/Code/C_Code/21.1.1_DHT11/DHT.hpp b/Code/C_Code/21.1.1_DHT11/DHT.hpp index 6d780c7..9547027 100644 --- a/Code/C_Code/21.1.1_DHT11/DHT.hpp +++ b/Code/C_Code/21.1.1_DHT11/DHT.hpp @@ -2,7 +2,7 @@ * Filename : DHT.hpp * Description : DHT Temperature & Humidity Sensor library for Raspberry * Author : freenove -* modification: 2016/07/10 +* modification: 2018/03/07 **********************************************************************/ #ifndef _DHT_H_ #define _DHT_H_ @@ -27,7 +27,7 @@ class DHT{ double humidity,temperature; //use to store temperature and humidity data read int readDHT11(int pin); //read DHT11 private: - int bits[5]; //Buffer to receiver data + uint8_t bits[5]; //Buffer to receiver data int readSensor(int pin,int wakeupDelay); // }; diff --git a/Code/C_Code/21.1.1_DHT11/DHT.o b/Code/C_Code/21.1.1_DHT11/DHT.o deleted file mode 100644 index 3ce1d435ac95cb85c02c408e7c765e75f489d26f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2908 zcmb_ePfQ$T6o0d`{70QqYAFyM&8l0K$xw-DtA`SbkhC-gYBcSE47;mL3cKs>5ZiDN z!2<_PP4LjfL-*jpg9na1Xwt@u#~#&qSimi|YKw`79vau*Z)QH&9cZkHkIeqw|L?u; zd*3i04xfHQ(=<_}Nm6zsk$8)5X&CS!DNjhd$Y|f~`0A(Y$(v*ArnFTOMq4FmwpAAF z(nho0RuN!(hz77p3fhcBCydnz$ARqph2j<0EUX$gKS zMf=_@K^?kC>)F^beigG>t#z1{hb>EMyt3700)Um;R zJP-f9YQU*Ia_>0*R`xs|S$nUZZ=+|mC){JT_J7^$E!pWAvsSm)59_(^EbUbJ^Xl879wu<09P)*jwt_q2s)AwxhHA0(?t* z%&r#BF3*Rv8^3vKU6#N7mDi~g&&y=O`()rg8MsfK2J&OpI*p!6hZ)Q^;_K>SUk2;~ z`xX0YWy`#=rsQSF_aU=~UhE}nHSCqjXUCiFZq8r3OIhZZ{vdWm^s!J+|Dt*Cmh$0@ z>-J)q*kYgZ`!~&%%8&N>HC=FjP>*0{(9NA)y&k=M-AP?AJ$E)^=H@)hCy`p6c|>VN z(vIhtUct#0cZJA_FSL(VR~J6!w$<{KNpIrfV%9}QhK7!t$#JKcpK_h7Iba>Lj`a20 zhXYOqZTL7DXUY}rd9V$yN@HWQ)}pn>I^vz$0qvmPr5)0`V?BDW_Eh7unpnk4vz{{r z^a=q^E3S~4vAoPhPb`)$)>N@5Rv{M%gX3csY>cE|AiC*`Vx@AkvzaWSvNAWDX~5`31;&>d&JuR{H`5Vu0T5ewpyA-+RI+%yq!%b`Aj zJ!Ks>5%qE=V-0wHhIl%}JnbDQ3iKjked@-y3}p;+GZA{eCn!HEJq<^cjEN6u05HI$ zAt|;8GSi+2^$+j?R0jVT9>&v;H9Qx}DA%WHl^~SqOL_?p{r}C6uQbM}mYHu9vLcoK zC=|7Rt1w`@w@LYp1b+F&(DFSDyg#Zgt6tmJ<0n@{Lrso2|(qy54_qtnh#@U=E;Pl{D^ArX!;U< b*P+C>4DNBz2m5EQwfWL$@(Of{RK9-zz`TD9 diff --git a/Code/C_Code/21.1.1_DHT11/DHT11 b/Code/C_Code/21.1.1_DHT11/DHT11 deleted file mode 100644 index a7852a01726cfa8105dbdd58cd384cd9727b4496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8836 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 Wpm3~cD))xh-aZ^cre`AB-hTjs=3S2f diff --git a/Code/C_Code/21.1.1_DHT11/DHT11.cpp b/Code/C_Code/21.1.1_DHT11/DHT11.cpp index 2cefc21..334ade2 100644 --- a/Code/C_Code/21.1.1_DHT11/DHT11.cpp +++ b/Code/C_Code/21.1.1_DHT11/DHT11.cpp @@ -2,7 +2,7 @@ * Filename : DHT11.cpp * Description : read the temperature and humidity data of DHT11 * Author : freenove -* modification: 2016/07/10 +* modification: 2018/03/07 **********************************************************************/ #include #include @@ -37,7 +37,7 @@ int main(){ break; } printf("Humidity is %.2f %%, \t Temperature is %.2f *C\n\n",dht.humidity,dht.temperature); - delay(1000); + delay(2000); } return 1; } diff --git a/Code/Python_Code/21.1.1_DHT11/DHT11.py b/Code/Python_Code/21.1.1_DHT11/DHT11.py index faa9e04..31640eb 100644 --- a/Code/Python_Code/21.1.1_DHT11/DHT11.py +++ b/Code/Python_Code/21.1.1_DHT11/DHT11.py @@ -3,7 +3,7 @@ # Filename : DHT11.py # Description : read the temperature and humidity data of DHT11 # Author : freenove -# modification: 2016/07/11 +# modification: 2018/03/07 ######################################################################## import RPi.GPIO as GPIO import time @@ -15,7 +15,7 @@ def loop(): sumCnt = 0 #number of reading times while(True): sumCnt += 1 #counting number of reading times - chk = dht.readDHT11(DHTPin) #read DHT11 and get a return value. Then determine whether data read is normal according to the return value. + chk = dht.readDHT11() #read DHT11 and get a return value. Then determine whether data read is normal according to the return value. print"The sumCnt is : %d, \t chk : %d"%(sumCnt,chk) if (chk is dht.DHTLIB_OK): #read DHT11 and get a return value. Then determine whether data read is normal according to the return value. print"DHT11,OK!" @@ -27,7 +27,7 @@ def loop(): print"Other error!" print"Humidity : %.2f, \t Temperature : %.2f \n"%(dht.humidity,dht.temperature) - time.sleep(1) + time.sleep(2) if __name__ == '__main__': print 'Program is starting ... ' diff --git a/Code/Python_Code/21.1.1_DHT11/Freenove_DHT.py b/Code/Python_Code/21.1.1_DHT11/Freenove_DHT.py index f3f6d86..472bb93 100644 --- a/Code/Python_Code/21.1.1_DHT11/Freenove_DHT.py +++ b/Code/Python_Code/21.1.1_DHT11/Freenove_DHT.py @@ -2,7 +2,7 @@ # Filename : Freenove_DHT.py # Description : DHT Temperature & Humidity Sensor library for Raspberry # Author : freenove -# modification: 2016/07/11 +# modification: 2018/03/07 ######################################################################## import RPi.GPIO as GPIO import time @@ -13,7 +13,7 @@ class DHT(object): DHTLIB_ERROR_TIMEOUT = -2 DHTLIB_INVALID_VALUE = -999 - DHTLIB_DHT11_WAKEUP = 0.018 #18ms + DHTLIB_DHT11_WAKEUP = 0.020#0.018 #18ms DHTLIB_TIMEOUT = 0.0001 #100us humidity = 0 @@ -32,26 +32,30 @@ class DHT(object): GPIO.output(pin,GPIO.LOW) time.sleep(wakeupDelay) GPIO.output(pin,GPIO.HIGH) - time.sleep(40*0.000001) + #time.sleep(40*0.000001) GPIO.setup(pin,GPIO.IN) loopCnt = self.DHTLIB_TIMEOUT t = time.time() while(GPIO.input(pin) == GPIO.LOW): if((time.time() - t) > loopCnt): + #print "Echo LOW" return self.DHTLIB_ERROR_TIMEOUT t = time.time() while(GPIO.input(pin) == GPIO.HIGH): if((time.time() - t) > loopCnt): + #print "Echo HIGH" return self.DHTLIB_ERROR_TIMEOUT for i in range(0,40,1): t = time.time() while(GPIO.input(pin) == GPIO.LOW): if((time.time() - t) > loopCnt): + #print "Data Low %d"%(i) return self.DHTLIB_ERROR_TIMEOUT t = time.time() while(GPIO.input(pin) == GPIO.HIGH): if((time.time() - t) > loopCnt): + #print "Data HIGH %d"%(i) return self.DHTLIB_ERROR_TIMEOUT if((time.time() - t) > 0.00005): self.bits[idx] |= mask @@ -60,20 +64,20 @@ class DHT(object): if(mask == 0): mask = 0x80 idx += 1 + #print self.bits GPIO.setup(pin,GPIO.OUT) GPIO.output(pin,GPIO.HIGH) return self.DHTLIB_OK #Read DHT sensor, analyze the data of temperature and humidity - def readDHT11(self,pin): - - rv = self.readSensor(pin,self.DHTLIB_DHT11_WAKEUP) + def readDHT11(self): + rv = self.readSensor(self.pin,self.DHTLIB_DHT11_WAKEUP) if (rv is not self.DHTLIB_OK): self.humidity = self.DHTLIB_INVALID_VALUE self.temperature = self.DHTLIB_INVALID_VALUE return rv self.humidity = self.bits[0] - self.temperature = self.bits[2] - sumChk = ((self.bits[0] + self.bits[2]) & 0xff) + self.temperature = self.bits[2] + self.bits[3]*0.1 + sumChk = ((self.bits[0] + self.bits[1] + self.bits[2] + self.bits[3]) & 0xFF) if(self.bits[4] is not sumChk): return self.DHTLIB_ERROR_CHECKSUM return self.DHTLIB_OK @@ -84,13 +88,13 @@ def loop(): okCnt = 0 while(True): sumCnt += 1 - chk = dht.readDHT11(11) + chk = dht.readDHT11() if (chk is 0): okCnt += 1 okRate = 100.0*okCnt/sumCnt; print"sumCnt : %d, \t okRate : %.2f%% "%(sumCnt,okRate) print"chk : %d, \t Humidity : %.2f, \t Temperature : %.2f "%(chk,dht.humidity,dht.temperature) - time.sleep(1) + time.sleep(3) if __name__ == '__main__': print 'Program is starting ... '