Uživatelské nástroje

Nástroje pro tento web


zarizeni:raspberry_pi

Toto je starší verze dokumentu!


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