Uživatelské nástroje

Nástroje pro tento web


zarizeni:raspberry_pi

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
zarizeni:raspberry_pi [2017/01/13 21:06] monkeytechzarizeni:raspberry_pi [2022/12/16 10:35] (aktuální) – [Raspberry PI s více DS18B20 na jedné sběrnici] multitricker
Řádek 19: Řádek 19:
  
 <code bash> <code bash>
-#! /bin/bash+#!/bin/bash
  
 # This script reads the temperature from all connected 1-wire temperature # This script reads the temperature from all connected 1-wire temperature
Řádek 113: Řádek 113:
 </WRAP> </WRAP>
 <code bash> <code bash>
-#! /bin/bash+#!/bin/bash
  
 # This script reads the temperature from all connected 1-wire temperature # This script reads the temperature from all connected 1-wire temperature
Řádek 126: Řádek 126:
  
 SERVER="tst.tmep.cz" SERVER="tst.tmep.cz"
 +NAZEVCIDLA="cidlo"
 +NAZEVMERENI="&mojemereni"
  
 W1DIR="/sys/bus/w1/devices" W1DIR="/sys/bus/w1/devices"
Řádek 181: Řádek 183:
                 # Write result of this sensor                 # Write result of this sensor
                 echo "$DEVICE=$INTEGER.$FRACTION"                 echo "$DEVICE=$INTEGER.$FRACTION"
-                curl -s -H "Cache-Control: no-cache" $SERVER/?$DEVICE=$INTEGER.$FRACTION > /dev/null+                curl -s -H "Cache-Control: no-cache" $SERVER/?$NAZEVCIDLA=$DEVICE$NAZEVMERENI=$INTEGER.$FRACTION > /dev/null
             else             else
                 # A CRC was found, show error message instead                 # A CRC was found, show error message instead
Řádek 192: Řádek 194:
 \\ \\
 ===== Raspberry PI + DHT22 ===== ===== 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. +Čidlo DHT22 též zakoupí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 nelze ho s následujícím příkladem použít. 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: +Následující návod počítá s čidlem DHT22 připojeným na GPIO22.  
 +{{ :zarizeni:arduino:rpi_dht21.png?300 |}} 
 +Prostřednictvím následujících příkazů stáhněte a nainstalujte knihovnu Adafruit Python DHT Sensor Library:
 <code> <code>
 sudo apt-get install git sudo apt-get install git
Řádek 230: Řádek 233:
     temperature = round(temperature, 1)     temperature = round(temperature, 1)
     humidity = round(humidity, 1)     humidity = round(humidity, 1)
-    url = 'http://' + SERVER + '?' + GUID + '=' + str(temperature) + '&humV='+    url = 'http://' + SERVER + '?' + GUID + '=' + str(temperature) + '&humV='str(humidity) 
-    print url+    print(url)
     urllib2.urlopen(url)     urllib2.urlopen(url)
 else: else:
Řádek 237: Řádek 240:
     sys.exit(1)     sys.exit(1)
 </code> </code>
-Změňte souboru práva pro čtení a můžete ho spustit:+Přidejte souboru právo spuštění a můžete ho vyzkoušet:
 <code> <code>
 chmod +x ./tmep_DHT.py chmod +x ./tmep_DHT.py
 ./tmep_DHT.py ./tmep_DHT.py
 </code> </code>
-Pravidelným spouštěním každou minutu prostřednictvím plánovače zajistíte automatické ukládání hodnot.+Pravidelným spouštěním každou minutu prostřednictvím plánovače zajistíte automatické ukládání hodnot:
 <code> <code>
 crontab -e crontab -e
Řádek 249: Řádek 252:
 *              ./tmep_DHT.py > /dev/null 2>&1 *              ./tmep_DHT.py > /dev/null 2>&1
 </code> </code>
 +\\
 +===== Raspberry PI + SHT21 =====
 +SHT21 je teplotní a vlhkostní čidlo o velikosti 3x3mm, které se obvykle prodává na osazené PCB. Komunikační rozhraní je sběrnice I2C. Čidlo vykazuje přesnější měření (především vlhkosti) než DHT22. Datová sběrnice I2C není vhodná pro delší vzdálenosti.
 +{{ :zarizeni:rpi_sht21.png?300 |}}
 +Nejprve je nutné zprovoznit podporu I2C sběrnice. V souboru ''/boot/config.txt'' zrušíme poznámku či doplníme následující nastavení:
 +<code>dtparam=i2c_arm=on</code>
 +Přidáme ''i2c-dev'' do zaváděných modulů a doinstalujeme ''i2c-tools'':
 +<code>
 +sudo echo 'i2c-dev' >> /etc/modules
 +sudo apt-get install i2c-tools
 +</code>
 +Po restartu zařízení již bude funkční I2C sběrnice na pinech 2 a 3. Pokud máme připojeno čidlo, můžeme provést kontrolu:
 +<code>
 +sudo i2cdetect -y 1
 +</code>
 +Při přítomnosti čidla se zobrazí adresa 0x40:
 +<code>
 +      1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 +00:          -- -- -- -- -- -- -- -- -- -- -- -- --
 +10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +70: -- -- -- -- -- -- -- --
 +</code>
 +Prostřednictví těchto příkazů stáhněte knihovnu ''sht21_python'' a vytvořte soubor ''tmep_sht21.py'':
 +<code>
 +sudo apt-get install git
 +cd ~
 +git clone https://github.com/jaques/sht21_python.git
 +cd sht21_python
 +nano ./tmep_sht21.py
 +</code>
 +Skript ''tmep_sht21.py'':
 +<WRAP center round important 60%>
 +Nezapomeňte upravit proměnné GUID a SERVER dle aktuálního nastavení Tmep.cz
 +</WRAP>
 +<code python>
 +#!/usr/bin/python
  
 +import sht21, socket, urllib2, sys
 +
 +GUID = '1234567890'
 +SERVER = 'tst.tmep.cz'
 +
 +try:
 +    with sht21.SHT21(1) as sht21:
 + temperature = sht21.read_temperature()
 + humidity = sht21.read_humidity()
 +
 +    temperature = round(temperature, 1)
 +    humidity = round(humidity, 1)
 +    url = 'http://' + SERVER + '?' + GUID + '=' + str(temperature) + '&humV=' + str(humidity)
 +    print(url)
 +    urllib2.urlopen(url)
 +
 +except IOError, e:
 +    print e
 +    print "Error creating connection to i2c.  This must be run as root"
 +    sys.exit(1)
 +</code>
 +Přidejte práva pro spouštění a můžete skript otestovat:
 +<code>
 +chmod +x ./tmep_sht21.py
 +./tmep_sht21.py
 +</code>
 +Pravidelným spouštěním každou minutu prostřednictvím plánovače zajistíte automatické ukládání hodnot:
 +<code>
 +sudo crontab -e
 +</code>
 +<code>
 +*              /home/pi/sht21_python/tmep_sht21.py > /dev/null 2>&1
 +</code>
 +
 +===== Raspberry s HTU21DF a OLED displejem =====
 +
 +Příklad od ''mikroma''.
 +
 +**Web autora příkladu:** http://mikrom.cz/\\
 +**Kontakt na autora:** [[mikrom@mikrom.cz]]
 +
 +{{ :zarizeni:pasted:20180918-091506.png?400 }}
 +
 +<code python>
 +#!/usr/bin/env python
 +# -*- coding: utf-8 -*-
 +
 +# Author: mikrom, 2018
 +#
 +# Based on:
 +# https://github.com/rm-hull/luma.oled
 +# https://github.com/dalexgray/RaspberryPI_HTU21DF
 +# https://github.com/al45tair/netifaces
 +# https://github.com/httplib2/httplib2
 +#
 +# HTU21DF needs to run $sudo pigpiod
 +# tmep.sh added to $sudo nano /etc/rc.local
 +
 +from oled.serial import i2c
 +from oled.device import sh1106
 +from oled.render import canvas
 +from PIL import ImageFont, ImageDraw
 +import time #from time import sleep <- do not use this
 +import HTU21DF
 +import netifaces as ni
 +import httplib2
 +
 +# Settings
 +sleep = 5                                    # Time between two measuring cycles (seconds)
 +url = "http://tmep.server.url/?"             # Server url (ending with question mark)
 +guid = "guid"                                # Secret guid
 +rotation = 0                                 # Display rotation 0=no, 1=90, 2=180, 3=270
 +fontname = "BRBELRT0.ttf"                    # Font name
 +fontsize = 18                                # Font size
 +serial = i2c(port=1, address=0x3C)           # Do not touch
 +device = sh1106(serial, rotate=rotation)     # Change it to ssd1306 if you have more common display
 +ni.ifaddresses('eth0'                      # Probably no need to change it (maybe to wlan0)
 +font = ImageFont.truetype("/home/pi/fonts/" + fontname, fontsize) # specify where your fonts are stored
 +
 +# Run infinitely
 +while True:
 +  # Get temperature and humidity from HTU21D
 +  HTU21DF.htu_reset                          # Reset sensor first
 +  temp = "%.1f" % HTU21DF.read_temperature() # Round float to 1 decimal and convert to string
 +  time.sleep(1)                              # Sensor is slow, so add some delay
 +  hum = "%.0f" % HTU21DF.read_humidity()     # Round float to 0 decimal and convert to string
 +  print("Temp=" + temp + "C")
 +  print("Hum=" + hum + "%")
 +
 +  # Get IP address from netifaces
 +  ip = ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
 +  print("IP=" + ip)
 +
 +  # Display data on OLED
 +  with canvas(device) as draw:
 +    temperature = "Temp: " + temp + u"\N{DEGREE SIGN}C"        # Prepare string to display. Degree sign is little bit challenging to add :)
 +    w, h = font.getsize(temperature)                           # Get dimensions of the string
 +    draw.text(((128-w)/2,0), temperature, font=font, fill=255) # Just some positioning, it is centered by x and y=0
 +    humidity = "Hum: " + hum + "%"                             # Prepare string to display. 
 +    w, h = font.getsize(humidity)                              # Get dimensions of the string
 +    draw.text(((128-w)/2,20), humidity, font=font, fill=255)   # Just some positioning, it is centered by x and y=20
 +    w, h = font.getsize(ip)                                    # Get dimensions of the string
 +    draw.text(((128-w)/2,40), ip, font=font, fill=255)         # Just some positioning, it is centered by x and y=40
 +
 +  # Send data to tmep server
 +  requesturl = url + guid + "=" + temp + "&humV=" + hum
 +  print("Send to: " + requesturl)
 +  resp, content = httplib2.Http().request(requesturl)
 +  if resp.status == 200:
 +    print("Send OK")
 +  else:
 +    print("Send Error")
 +
 +  # Take a nap
 +  print("Go to sleep for %d s..." % sleep)
 +  time.sleep(sleep)
 +</code>