Kedves Blogolvasó!
Ennek a kis projektnek az elkészítésébe azért kezdtem bele, mert lehet hogy ez csak engem zavar, viszont engem nagyon zavar az, hogy a különböző webes IOT platformok nem eléggé rugalmasan konfigurálhatóak. Illetve azok az adatok amiket mi mérünk, azok léteznek valahol, de az a valahol az valaki más szerverén van. Ki tudja miért, de személy szerint én kicsit kényes vagyok az ilyen jellegű adatokra. Persze azért csinálok majd egy olyan példát is, ahol a DHT11 adatait feltöltöm a thingspeak-re, de nekem a saját megoldások mindig szimpatikusabbak. Arról nem is beszélve, hogy a google charts egy elég sok diagramm típust tartalmazó szolgálatás, ami széles körben skálázhatóvá teszi a megjelenítést. Mi kell a projekthez?: Bananapi – DHT11 – Google Charts.
A modul bekötését és az alkalmazott library-t annak telepítését és beállítását megtaláljuk egy korábbi cikkben. –Itt—
Először ezt a konfigurációt végezzük el, majd a következő lépéseket alkalmazva telepítsük a LAMP-et.
sudo apt-get update sudo apt-get install apache2 sudo apt-get install mysql-server php5-mysql sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt sudo apt-get install php5-cli sudo apt-get install libapache2-mod-python sudo apt-get install python-mysqldb python-xml
Amint a telepítéssel végeztünkt indítsuk újra az apache-ot.
sudo /etc/init.d/apache2 restart
Nyissuk meg a böngészőnket és írjuk be a címsorba a következőt: localhost.
Ha ezt látjuk, akkor sikeres volt a telepítés.
Ezután ellenőrizzük le, a php beállításokat.
sudo nano /var/www/html/phpinf.php
Adjuk hozzá a követkető kódot a file-hoz.
<?php
phpinfo();
?> Mentés után teszteljük le a következő url-el: „localhost/phpinf.php”
Ha ezt látjuk, akkor ez is működik, és már csak a python config van hátra. A következő parancsok használatával engedélyezzük az apache-on az mpm fájlok futtatását és megnyitjuk az apache „site-enabled” konfigurációs fájlját.
sudo a2dismod mpm_event sudo a2enmod mpm_prefork cgi sudo nano /etc/apache2/sites-enabled/000-default.conf
Itt a következő módosításokat kell eszközölni.
<Directory /var/www/html/cgi> Options +ExecCGI </Directory> AddHandler cgi-script .py
Ezzel a módosítással engedélyezzük, hogy az apache a „html/cgi” könyvtárban python fájlokat futasson. Ha mindezzel elkészültünk, akkor hozzuk létre a „cgi” könytárat és a „test.py” python fájlt a könyvtáron belül.
sudo mkdir /var/www/html/cgi sudo nano /var/www/html/cgi/test.py
A következő kódot illesszük be:
#!/usr/bin/python print "Content-type:text/html\r\n\r\n" print '<html>' print '<head>' print '<title>Hello Word - First CGI Program</title>' print '</head>' print '<body>' print '<h2>Hello Word! This is my first CGI program</h2>' print '</body>' print '</html>'
Mentsük el és lássuk a végeredményt a localgost/cgi/test.py url-en.
A konfigurálással most végeztünk, akkor jöhet a program, ami megjeleníti az adatokat. A leírás elején írtam, hogy egy előző példából állítsuk össze a kapcsolást és a DHT11 library-t rakjuk a helyére. Amennyiben ezzel kezdtük akkor nincs más dolgunk, csak hozzunk létre egy python fájlt a következő „dht11_csv.py” néven a library DHT11 mappájában. Ebbe a fájlba másoljuk be a következő forrást:
import csv
import RPi.GPIO as GPIO
import dht11
import time
import datetime
import os
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
# read data using pin 14
instance = dht11.DHT11(pin = 18)
header = 0
while True:
temp = []
humi = []
daytime = []
count=0
while (count < 5):
result = instance.read()
if result.is_valid():
temp.append (result.temperature)
humi.append (result.humidity)
daytime.append (datetime.datetime.now().strftime("%H:%M:%S"))
print("Last valid input: " + datetime.datetime.now().strftime("%Y.%m.%d %H:%M:%S"))
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
time.sleep(20)
count=count+1
else:
print ("Nincs beolvasott ertek")
time.sleep(1)
with open('/var/www/html/dht11.csv', 'a') as csvfile:
fieldnames = ['daytime','temperature','humidity']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
if header==0:
header=header+1
writer.writeheader()
i=0
while (i < 5):
writer.writerow({'daytime':daytime[i],'temperature': temp[i],'humidity': humi[i]})
i=i+1
else:
i=0
while (i < 5):
writer.writerow({'daytime':daytime[i],'temperature': temp[i],'humidity': humi[i]})
i=i+1
Mentsük el a fájlt és indítsuk el. A program a „var/www/html” mappában létrehoz egy „dht11.csv” fájlt és azt folyamatosan írja. Itt hívnám fel mindenkinek a figyelmét arra, hogy ez a program csak egy vázlat. Kiindulási alapnak jó, de nincs benne megoldva minden probléma. Ilyen például az, hogy nem bontja le napokra a logokat, tehát folyamatos logolásra nem alkalmas. Ez egy működő vázlat, és mindenki szabadon írhatja át olyanra amilyenre szeretné.
A próbához és a teszteléshez indítsuk el a python programot és ezután hozzunk létre egy „index.html”-t a következő kóddal:
* Ne felejtsük el a „var/www/html” mappa megfelelő jogosultságainak a kiosztását rekurzív módon.
sudo chown -R pi:pi /var/www/html sudo chmod -R 755 /var/www/html
<html>
<head>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart()
{
var query = new google.visualization.Query('dht11.csv',
{ csvColumns: ['string', 'number', 'number'], csvHasHeader: true });
query.send(handleQueryResponse);
}
function handleQueryResponse(response) {
if (response.isError()) {
alert('Error in query: ' + response.getMessage() + ' ' +
response.getDetailedMessage());
return;
}
var data = response.getDataTable();
var chart = new google.visualization.LineChart(document.getElementById('csv'));
chart.draw(data, { legend: { position: 'none' } });
}
</script>
</head>
<body>
<div id="csv" style="width: 1000px; height: 500px;"></div>
</body>
</html>
Mentsük el és nyissuk meg a „localhostot”
Újfent Voila! Láss csodát működik.
A továbbfejlesztéssel kapcsolatban mindenkinek a lelkére bízom hogy milyen irányba fejleszti tovább, én személy szerint csak a szemléltetés miatt nyúltam ehhez a megoldáshoz. A példa amit ismertettem úgy gondolom, hogy erre kiválóan alkalmas. Remélem hasznos segítséget és útmutatás nyújtottam minden kedves hobbifejlesztő barátomnak, és blogolvasómnak.
A DHT11 Hő és páratartalom mérő szenzor megvásárolható a Webshopban




