Raspberry PI – Ako zaznamenávať online hodnoty z IoT – DHT11 – VI

Raspberry PI – Ako zaznamenávať online hodnoty z IoT – DHT11 – VI
Follow me

Marv Marvelous

http://www.grafovision.sk
Follow me

Ako si tak pokusujem so senzormi, potrebujem do svojho sleníčka teplomer a vlhkomer a údaje chcem získavať jednoducho online.

Ako na to a čo budeme potrebovať.


1.V prvom rade sa zaregistrujeme na Thingspeak.com  a vytvoríme si tak prístup.

Potom vojst do menu – Channels – My channels

Vytvorit channel

Vytvorit channel

V My channels  vytvoríme nový channel a to tlačítkom New Channel

think new channel

think new channel

Treba vypísať kokonky označené šipkou. Ak chceme verejne pristupvať k tomuto grafu. Zaškrtnúť MAKE PUBLIC a dáme Save Channel

think new channel

think new channel

Keď si ho otvoríme a prezreme si ho vytvoril nám 2 tabuľky a v záložke API Keys potrebujeme API Key pre zápis “Write”

think api write key

think api write key

Týmto sme uzavreli thingSpeak a máme tak kompletný a vytvorený čakajúci na dáta :)

 


2.Prejdeme na linux resp. raspberry PI

V prvom rade nemáme nič nainštalované na Raspberry PI aspoň to tak predpokladám. Takže v prvom rade potrebujememe knižnicu, ktorá ovláda DHT11 a to spravíme následovne.

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

Týmto stiahneme a rozbalíme  a pokračujeme naprv príkazmi pre update všetkých nainštalovaných častí a inštaláciou buildu a pythonu

sudo apt-get update
sudo apt-get install build-essential python-dev

Po tomto všetkom ideme dalej a vstupime do adresara Adafruit_Python_DHT príkazmi

cd Adafruit_Python_DHT

Teraz potrebujeme inštalovať knižnicu pre DHT11 a to príkazom

sudo python setup.py install

A máme nainštalovanú knižnicu. Otestujeme si, či senzor funguje a či nám merá.

Pristúpime k zapojeniu DHT11 – má 3 vývody resp. 4 ale jeden je nezapojený. Červený PIN1 na RasPI je 3,3V pripojíme na senzor VCC(+). Čierný PIN 6 na RasPI je GND a pripojíme na senzor GND(-) a posledný PIN 7 je GPIO4 (pri BCM) aj označený ako 4 a ten pripojíme na SIGNál senzora.

RPI-GPIO-pinout

RPI GPIO how to connected

schema-dht11

schema-dht11

A tak možeme pristúpiť k otestovaniu hodnoty. Ideme do adresára examples príkazom

cd examples

A spustíme skript príkazom sudo python AdafruitDHT.py 11 4     SUDO – príkaz ktorý spúšta príkazy ako supervisor (root) python je programovací jazyk a spúšta subor AdafruitDHT.py  číslo 11 je je senzor DHT11 a číslo 4 je pin GPIO4 na ktorom je signálový vodič senzora.

terminal-adafruit

terminal-adafruit

Ako vyššie na obrazku by malo zobraziť údaj Temp=23.0* Humidity=35.0%

Keď všetko funguje ako má pokračujeme ďalej. Ak nastal problém s ktorým si neviete rady napíšte do komentáru.

Spravíme si subor a to príkazom

sudo nano /home/pi/thinkdht11.py

A tam vložíme zdrojový kód nižšie:

Zdrojový kód

 

import sys
import RPi.GPIO as GPIO
from time import sleep
import Adafruit_DHT
import urllib2
def getSensorData():
RH, T = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 4)
# return dict
return (str(RH), str(T))
# main() function
def main():
# use sys.argv if needed
if len(sys.argv) < 2:
print(‘Usage: python tstest.py PRIVATE_KEY’)
exit(0)
print ‘starting…’
baseURL = ‘https://api.thingspeak.com/update?api_key=%s’ % sys.argv[1]
while True:
try:
RH, T = getSensorData()
f = urllib2.urlopen(baseURL +
“&field1=%s&field2=%s” % (RH, T))
print f.read()
f.close()
sleep(60)
except:
print ‘exiting.’
break
# call main
if __name__ == ‘__main__’:
main()

všetko uložíme CTRL+X a potrvdíme Y pre save a enter.

Spustíme všetko príkazom nižšie ale je potrebné tam prilepiť aj API key pre zápis je to to 16- miestne HALABALA a vyzerá to nejako takto

sudo python thinkdht11.py SHPOLOI1R4IY5AGY

a po 60 sekundách si dáme refresh svojho kanálu ako napr.:

https://thingspeak.com/channels/108712

thingspeak-channel

thingspeak my channel

 

Alebo program pre DHT22 a v mieste myAPI =” za x dosadit kluč thingspeak.com”

import time
import sys
import Adafruit_DHT
import RPi.GPIO as GPIO
import urllib2

sensor = Adafruit_DHT.DHT22
pin = 4
myAPI = “XXXXXXXXXXXXXXXX”
baseURL = ‘https://api.thingspeak.com/update?api_key=%s’ % myAPI

GPIO.setmode(GPIO.BCM)

while 1:
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
desturl = baseURL + “&field1={0}&field2={1}”.format(temperature,humidity)
f = urllib2.urlopen(desturl)
f.close()

 

 

Do automatického spúštania skriptu sa robí často pomocou crontab, je to jednoduché a pochopitelné aj pre tých čo linux nie je ta pravá parketa.

Crontab je súbor časov kedy čo sa má spustiť. Napr. tento skript chcem pustit každú minútu, aby mi zaznamenal tieto hodnoty a poslal do internetu, konkrétne na teamspeak.com.

Zadáme príkaz pre exitáciu cron-u

crontab -e

vidíme niečo takéto

linux crontab

linux crontab

prvé su minúty, druhé sú hodiny, tretie sú dni v mesiaci, stvrté mesiac, den v týždni. Vždy sú oddelené medzerou a ostatné je príkaz.

ostatne len CTRL+X a Yes SAVE.

Ostatné už funguje ako hodinky.

A v skripte je potrebne upraviť jednu vec, nech sa nespúšta každu minutu , kedže skript je napísany pre kontinuálne použitie za sleep(60) pridáme riadok

BREAK

 

Pozri napríklad:

Može ta zaujiímať:

Marv Marvelous

Zanechať odpoveď