Toto je starší verze dokumentu!
Obsah
Raspberry PI
Mini počítač Raspberry PI lze jednoduše využít k logování naměřených hodnot na cloud Tmep.cz. Následující příklady počítají s nainstalovaným systémem RASPBIAN JESSIE (Release date: 2017-01-11).
Raspberry PI + DS18B20
Čidlo má celkem tři vývody (GND, DQ, VDD). Mezi napájení (VDD) a DQ je nutné připojit pull-up odpor o hodnotě 4k7. Komunikace s čidlem probíhá datově, délka vodičů tedy neovlivňuje naměřenou hodnotu. Reálně lze dosáhnout vzdálenosti 50m až 100m s použitím vhodné kabeláže. Na jedné sběrnici může být připojeno více čidel.
Nejprve je nutné zprovoznit podporu 1-Wire sběrnice. V souboru /boot/config.txt
zrušíme poznámku či doplníme následující nastavení:
dtoverlay=w1-gpio,gpiopin=4
Po restartu zařízení již bude funkční 1-wire sběrnice na GPIO 4. Pokud máme připojeno čidlo můžeme provést kontrolu:
ls /sys/bus/w1/devices/
V našem příkladu máme připojeno čidlo s unikátní výrobní adresou 0000070aeea3, 28 značí čidlo 18B20.
pi@raspberrypi:~ $ ls /sys/bus/w1/devices/ 28-0000070aeea3 w1_bus_master1
Pro periodické ukládání hodnot na cloud Tmep.cz můžeme využít skript.
Nezapomeňte upravit proměnné GUID a SERVER dle aktuálního nastavení Tmep.cz
#! /bin/bash # This script reads the temperature from all connected 1-wire temperature # sensors of the DS1820 family. # The script will answer nothing if it can't find any sensors. # # Author: San Bergmans # www.sbprojects.com # # Modified for Tmep.cz Petr Domorazek # GUID="1234567890" SERVER="tst.tmep.cz" W1DIR="/sys/bus/w1/devices" # Exit if 1-wire directory does not exist if [ ! -d $W1DIR ] then echo "Can't find 1-wire device directory" exit 1 fi # Get a list of all devices DEVICES=$(ls $W1DIR) # Loop through all devices for DEVICE in $DEVICES do # Ignore the bus master device if [ $DEVICE != "w1_bus_master1" ] then # Get an answer from this device ANSWER=$(cat $W1DIR/$DEVICE/w1_slave) # See if device really answered # When a previously existing device is removed it will # read 00 00 00 00 00 00 00 00 00, which results in a # valid CRC. That's why we need this extra test. echo -e "$ANSWER" | grep -q "00 00 00 00 00 00 00 00 00" if [ $? -ne 0 ] then # The temperature is only valid if the CRC matches echo -e "$ANSWER" | grep -q "YES" if [ $? -eq 0 ] then # Isolate the temprature from the second line TEMPERATURE=$(echo -e "$ANSWER" | grep "t=" | cut -f 2 -d "=") let TEMPE=$TEMPERATURE/100 TEMPERATURE=$TEMPE # Isolate integer and fraction parts so we know where # the decimal point should go INTEGER=${TEMPERATURE:0:(-1)} FRACTION=${TEMPERATURE:(-1)} # Restore the leading 0 for positive and negative numbers if [ -z $INTEGER ] then INTEGER="0" fi if [ "$INTEGER" == "-" ] then INTEGER="-0" fi # Write result of this sensor echo "$DEVICE=$INTEGER.$FRACTION" curl -s -H "Cache-Control: no-cache" $SERVER/?$GUID=$INTEGER.$FRACTION > /dev/null else # A CRC was found, show error message instead echo "$DEVICE=CRC error" fi fi fi done
Pravidelným spouštěním každou minutu prostřednictvím plánovače zajistíte automatické ukládání hodnot.
crontab –e
# m h dom mon dow command * * * * * /home/pi/tmep.sh > /dev/null 2>&1
Raspberry PI s více DS18B20 na jedné sběrnici
Nezapomeňte upravit proměnou SERVER dle aktuálního nastavení Tmep.cz. GUID odpovídá unikátní adrese každého čidla.
#! /bin/bash # This script reads the temperature from all connected 1-wire temperature # sensors of the DS1820 family. # The script will answer nothing if it can't find any sensors. # # Author: San Bergmans # www.sbprojects.com # # Modified for Tmep.cz Petr Domorazek # SERVER="tst.tmep.cz" W1DIR="/sys/bus/w1/devices" # Exit if 1-wire directory does not exist if [ ! -d $W1DIR ] then echo "Can't find 1-wire device directory" exit 1 fi # Get a list of all devices DEVICES=$(ls $W1DIR) # Loop through all devices for DEVICE in $DEVICES do # Ignore the bus master device if [ $DEVICE != "w1_bus_master1" ] then # Get an answer from this device ANSWER=$(cat $W1DIR/$DEVICE/w1_slave) # See if device really answered # When a previously existing device is removed it will # read 00 00 00 00 00 00 00 00 00, which results in a # valid CRC. That's why we need this extra test. echo -e "$ANSWER" | grep -q "00 00 00 00 00 00 00 00 00" if [ $? -ne 0 ] then # The temperature is only valid if the CRC matches echo -e "$ANSWER" | grep -q "YES" if [ $? -eq 0 ] then # Isolate the temprature from the second line TEMPERATURE=$(echo -e "$ANSWER" | grep "t=" | cut -f 2 -d "=") let TEMPE=$TEMPERATURE/100 TEMPERATURE=$TEMPE # Isolate integer and fraction parts so we know where # the decimal point should go INTEGER=${TEMPERATURE:0:(-1)} FRACTION=${TEMPERATURE:(-1)} # Restore the leading 0 for positive and negative numbers if [ -z $INTEGER ] then INTEGER="0" fi if [ "$INTEGER" == "-" ] then INTEGER="-0" fi # Write result of this sensor echo "$DEVICE=$INTEGER.$FRACTION" curl -s -H "Cache-Control: no-cache" $SERVER/?$DEVICE=$INTEGER.$FRACTION > /dev/null else # A CRC was found, show error message instead echo "$DEVICE=CRC error" fi fi fi done
Raspberry PI + DHT22
Čidlo DHT22 se též koupíte pod označením AM2302, či jiném provedení pouzdra jako AM2301, AM2305 nebo AM2306. Z hlediska komunikace jsou tato čidla kompatibilní. Pouze DHT11 používá jiný formát dat a není s následujícím příkladem kompatibilní. DHT22 má celkem čtyři vývody (Vcc, DATA, NC, GND). Mezi napájení (Vcc) a DATA je nutné připojit pull-up odpor o hodnotě 4k7 až 10k. Komunikace s čidlem probíhá datově, délka vodičů tedy neovlivňuje naměřenou hodnotu. Reálně lze dosáhnout vzdálenosti až 30m s použitím vhodné kabeláže. Na rozdíl od teplotních čidel DS18B20 návrh komunikačního protokolu DHT22 nepočítá s více čidly na jedné datové sběrnici. Při potřebě připojení více čidel, připojte každé čidlo na samostatný GPIO. Následující návod počítá s čidlem DHT22 připojeným na GPIO22. Prostřednictvím následujících příkazů stáhněte a nainstalujte knihovnu Adafruit Python DHT Sensor Library:
sudo apt-get install git cd ~ git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo apt-get update sudo apt-get install build-essential python-dev sudo python setup.py install
Komunikaci s čidlem vyzkoušíme pomocí následujících příkazů:
cd examples sudo ./AdafruitDHT.py 22 22
Prostřednictvím editoru vytvořte skript v jazyku Python:
cd ~ nano ./tmep_DHT.py
Nezapomeňte upravit proměnné GUID a SERVER dle aktuálního nastavení Tmep.cz
#!/usr/bin/python import Adafruit_DHT, socket, urllib2, sys GUID = '1234567890' SERVER = 'tst.tmep.cz' # sensor 22 = DHT22, pin 22 = GPIO 22 humidity, temperature = Adafruit_DHT.read_retry(22, 22) if humidity is not None and temperature is not None: temperature = round(temperature, 1) humidity = round(humidity, 1) url = 'http://' + SERVER + '?' + GUID + '=' + str(temperature) + '&humV=' + print url urllib2.urlopen(url) else: print('Failed to get reading. Try again!') sys.exit(1)
Změňte souboru práva pro čtení a můžete ho spustit:
chmod +x ./tmep_DHT.py ./tmep_DHT.py
Pravidelným spouštěním každou minutu prostřednictvím plánovače zajistíte automatické ukládání hodnot.
crontab -e
* * * * * ./tmep_DHT.py > /dev/null 2>&1