Temperatursensor.

DHT11/DHT22/AM2302/AM2320



 

Innehåll.

Tillbaka till Raspbery Pi
Inledning.
Installation.
C-program DHT11.
C-program DHT22.
Python-program AM2320.
Python-program BMP280.
BME280 alternativ.
Lagra i databas.
Lagra i databas med Python.
Crontab.
Support/Hjälp.
Problem.
Referens.




 
 

Inledning.

DHT11 är en fukt- och temperatursensor som använder i2c för kommunikation med omvärlden.
DHT11s mätområde är 0 - 50 grader C. Är fuktkänslig, klarar inte regn.
DHT22s mätområde är -40 - 80 grader C.
AM2320 är likvärdig DHT22. Dock inte vad gäller mekaniskt utförande.
BME, BMP280 är en temperatur- och trycksensor. Mätområde -40 - 85 grader C. Tryck 300 - 1100 hPa.



 


Till början.



 

Installation.

Koppla in DHT11 enligt vad nedanstående bild visar.


Raspberry Pi _____________ DHT11 Module
3.3v P1 ————————— VCC (V)
GND P6 ————————-- GND (G)
GPIO4 P7 ———————–--DATA (S)

Koppla in DHT22/AM2302 enligt vad nedanstående bild visar.


Raspberry Pi _____________ DHT22 Module
3.3v P1 ————————— VCC (1)
GND P6 ————————-- GND (4)
GPIO4 P7 ———————–--DATA (2)
Används ej _______________NC (3)

Koppla in AM2320 enligt vad nedanstående bild visar.


Raspberry Pi _____________ AM2320 Module
3.3v P1 ————————— VDD (1)
GND P6 ————————-- GND (3)
GPIO4 P7 ———————–- DATA (2)
GPIO3 P5 _______________SCL (4)

Montera ett motstånd på 4.7 kOhm mellan pinne 2 och pinne 1 samt mellan pinne 4 och pinne 1.


 


Till början.



 

C-program DHT11.

Kompilera programmet: gcc -o dht11 dht11.c -lwiringPi -lwiringPiDev
Exekvera programmet: sudo ./dht11
Avbryt programmet med: ctrl-c

dht11.c


Resultat.


Modifierat program.

dht11_3v4.c
Programmet läser av värdena en gång per timme. Ifall data icke är OK läser programmet av data flera gånger tills data är OK. Programmet startas via crontab en gång per timme.



Resultat.



 


Till början.



 

C-program DHT22.

Kompilera programmet: gcc -o dht22 dht22.c -lwiringPi -lwiringPiDev
Exekvera programmet: sudo ./dht22
Avbryt programmet med: ctrl-c

dht22.c


OBS! Data skickas till /home/pi/Documents/Data/temp_dht22.txt. Ändra så det passar dig.



 

Python-program AM2320.

Exekvera programmet: ./code.py
Avbryt programmet med: ctrl-c

code.py



Till början.



 

Python-program BMP280.

Först behöver man installera nödvändiga python-bibliotek.

pip3 install adafruit-blinka
pip3 install pureio
pip3 install spidev
pip3 install adafruit-GPIO
pip3 install adafruit-circuitpython-bme280

bme280sensor.py



Programmet exekveras med:
python3 bme280sensor.py



 

BME280 alternativ.

Installation:
git clone https://github.com/pimoroni/bme280-python
cd bme280-python
sudo ./install.sh
Aktivera I2C:
i2c: sudo raspi-config nonint do_i2c 0

Ett test kan göras genom att exekvera programmet /home/pi/bme280-python/examples/all-values.py
Programmet avbryts med Ctrl-C



Till början.



 

Lagra data i en databas.

Avlästa data kan lagras i en MySQL-databas. Här beskrivs hur man skapar en MySQL-databas. Exemplet nedan använder databasen temperatur. Databasen har en tabell, temp med kolummerna datum, tid, fukt och temp.

Program för att läsa in data i databasen.

insert_v4.c


 


 

Crontab.

Exempel på hur crontab kan se ut. Här körs programmet en gång per timme, 5 minuter över heltimme.



Lagra i databas med Python.

Program: DHT-temp-sql.py



Programmet exekveras med kommandot: sudo DHT22-temp-sql.py 22 4
22 = DHT22, 4 = GPIO 4(Rpi nr 7)



Support/Hjälp.

Vi har noterat att exemplet dht11.c ibland förlorar data. Detta beror på att Raspberry Pi inte är ett realtidssystem, tidshanteringen i programmet är inte tillräckligt noggrant, och detta leder i bland till ett fel i i överföringen. På grund av att C är ett lågnivåspråk, kontrollerar det GPIO pinnarna på ett mer direkt sätt, så examplet i C har en mindre chans att falera.
Som ett sätt att gå runt problemet kan vi köra programmet flera gånger för att fånga upp det rätta resultatet. Detta kan även lösas programmässigt.
I programmet dht11_3v4 har vi ordnat så att ogiltiga data spolas.

 


Till början.



 

Problem.

20190205, strax efter klockan 1, avbröts inhämtningen av aktuell temperatur i en av mina Raspberry Pi Zero. Först trodde jag att databasen blivit full. Efter att jag kontrollerat att så icke var fallet försökte jag att manuell köra programmet som avläser DHT22. Resultatet uteblev. Varpå jag tog in sensorn och fann att två av anslutningspinnarna "rostat" av.
Jag införskaffade då nya sensorer men erhöll AM2320 som skulle vara eqvivalent med DHT22 men det visade sig att så icke var fallet.
Nu har jag beställt DHT22 och hoppas att jag verkigen får rätt den här gången.
Jag fick AM2302 som vad jag förstår är ekvivalent med DHT22. Mitt C-program fungerade inte men jag har hittat ett Python-program som fungerar som jag vill. Jag ska bara göra en mindre justering så kommer det att fungera utmärkt.



 

Referens.

Kjell & Co.
UUGear.
Datablad AM2320.
AM2302 Temp/Humidity Sensor.



Till början.