Temperatursensor.
DHT11/DHT22/AM2302/AM2320
|
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.
|
|
|
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.
|
|
|
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
|
|
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
|
|
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.
|
|
|
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.
|
|