Ihr seid der Wahnsinn Leute^^
Danke für deinen Post und das Bild für die Schaltung!!
Wenn die Hardware da ist werde ich einen Thread begleitend zum Projekt erstellen und auch hier verlinken.
Vielen Dank bis dahin!!
Ihr seid der Wahnsinn Leute^^
Danke für deinen Post und das Bild für die Schaltung!!
Wenn die Hardware da ist werde ich einen Thread begleitend zum Projekt erstellen und auch hier verlinken.
Vielen Dank bis dahin!!
Ok, danke für deine Antowort!
Mal noch eine andere Frage:
Ich besitze dieses Breadboard https://www.sparkfun.com/products/9567
Wenn ich jetzt mehrere Sensoren auf dem Board schalte möchte ich nicht ausversehen die eine mit der anderen Schaltung verbinden.
Woran erkenne ich zb in Koordinate auf dem Board i 1 den 3.3V Anschluss reinstecke bis wohin er geht? Verstehst du meine Frage? Fließt der Strom dann nur in der i-Reihe? Ziemlich sporadisch ausgedrückt, aber ich weiß nicht wie ich es anders formulieren soll.
Gruß
Display More
Hallo.
Vorsicht... nicht Äpfel und Birnen verwechseln.:D
Dein obiges Script bezieht sich auf ein 1-wire Protokoll.
Der angebegene Feuchtigkeitssensor hat damit nichts am Hut.
Er liefert am Ausgang ne Spannung zwischen ~0,85-~4 Volt abhängig von der Feuchtigkeit.
Hier brauchst nen AD Wandler.
Der Sensor an den AD Wandler den du liest.
Aufpassen ... 5V sind erwünscht.
Erstmal um den Sensor möglichst linear zu fahren, und der AD braucht sie auch.
Der Raspi kann das nicht... also Levelshifter zwischen GPIO's und AD Wandler einsetzen.
Und den 80kOhm nicht vergessen (Datasheet) den braucht er für minimum load, also zum Bus-sauberhalten.
gruß root
Geht ein beliebiger AD-Wandler oder kannst du einen empfehlen? Kannst du mir auch mehr über diese "Levelshifter" erzählen?
PS: Mit cat /sys/bus/w1/devices/28-0000065fa6c1/w1_slave gebe ich die Temperatur aus oder über die oben geposteten Skripte.
Ich würde das gerne über einen Webbrowser ansehen. Ich versuche die Daten mit Nginx abzurufen, aber es funktioniert nicht obwohl ich exakt nach diesem Tutorial gefahren bin http://msxfaq.de/verschiedenes/bastelbude/raspi-1wire.htm oder ist dies jetzt nicht passend?
Display More
Hi
Ganz einfach mittels Lötkolben.
Aber ich würde niemals direkt an den Pins etwas anlöten, wie ich das heute in einem anderen Beitrag gesehen habe.
Ein passender Stecker drauf und da kannst du dann mit mehreren Adern zu deinen Peripherien verteilen.
Gruß
Franz
Könntest du mir vielleicht einen Link von solcher Hardware schicken?
Das würde mich freuen. Ich verstehe darunter eine Art "T-Kabel".
Eine Lötstation habe ich leider nicht. Bin Neuling auf dem Gebiet.
Habe heute mein erstes Projekt abgeschlossen und den Temperatur-Sensor zum laufen bekommen und kann die Daten auslesen.
Was müsste ich denn zusammenlöten? Kannst du mir das etwas genauer erklären?
Display More
Wieso direkt an den Pin löten? Man kann sich auch selber ein Y-Kabel basteln: Stecker auf den Pin, kabel zerschneiden und 2 Enden ans Kabel löten.
Du solltest aber beachten das die 3V3 Schiene der P1 Leiste nicht allzuviel Ampere liefern kann! Die 3V3 und GPIO Pins teilen sich insg. 50mA
Ich weiß nicht welche Sensoren du verwendest, aber wenn du sowohl 2 Sensoren als auch noch ein LCD Display über 3V3 betreiben willst, kann es schnell passieren das du die 3V3 Schiene überlastest!
Leider schreibst du auch nicht ansatzweise dazu welchen PI du hast , aber normalerweise hat jeder PI mindestens 2x 3V3 über P1, und wenn du einen Pi1-B rev2.0 hast dann haste über P5 sogar noch mal einen 3V3 pin
Siehe dazu auch hier: http://elinux.org/RPi_Low-level_peripherals
PS: Der DHT22 Sensor kann sowohl Feuchtigkeit als auch Temperatur
Ich wollte nur eine Fragen im Vorfeld meines Projektes erklären.
Ich werde die Tage einen Thread eröffnen wo es um dieses Thema geht.
Dann erkläre ich nochmal detailiert welche Hardware ich beistze und welche Hardware ich vorhabe zu kaufen.
Ich werde dann natürlich auch den Link zum Thread hier posten!!!
Das mit dem "Y- oder T-Kabel" klingt schon mal ganz gut. Gibt es solche Kabel auch fertig zu kaufen?
Ich habe das Raspberry Model B Rev1 und möchte daran https://www.sparkfun.com/products/9569 und https://www.sparkfun.com/products/11050 und https://www.sparkfun.com/products/9395 betreiben.
Was sagt ihr dazu?
Ok, eine Frage muss eh noch geklärt werden.
Kann ich jetzt eigentlich auch das selbe Skript für einen Feuchtigkeits-Sensor benutzen?
Grüße Hallo,
ich habe eine Frage.
An meinem Raspberry hängt ein DS18B20 Temperatur-Sensor an dem 3,3V Pin.
Ich möchte gerne noch ein Feuchtigkeits-Sensor und ein LCD Display anbringen.
Dabei treten 2 Probleme auf:
Der Feuchtigkeits-Sensor benötigt auch 3,3V Pin und der jetzige an meinem Raspberry ist belegt durch die Versorgung meines Temperatur-Senors.
Das andere Problem ist, dass selbst wenn ich einen Feuchtigkeits-Sensor nehme der auf 5V läuft würde ich zusätzlich gern noch einen LCD Display anbringen, aber beide Stromversogungs-Pins sind belegt.
Was mache ich in so einem Fall? Ein weiteres Raspberry kaufen oder kann ich auch mit einer Art "T-Stücke" mir die Pins teilen oder ist das zu brachial?^^
Ich würde gerne Temp.-Sensor(3.3V) + Feuchtig.-Sensor(3.3V) + LCD(5V) an ein Raspberry hängen.
Wie würdet ihr das Problem lösen?
Nette grüße
Ähm?^^
Was machen wir nun mit "value_c"?
Jawoll!!
Vielen Dank RasPi-Jo für deine Unterstützung meines Projektes.
Ich musste in deiner neuen Code-Zeile nur noch "while true" auf while True" ändern und jetzt läuft es. Ich danke dir, meine andere Lösung aus dem Buch war zwar auch korrekt, aber durch deinen Code und deine Tipps weiß ich nun wie ich auch die Werte mehrerer Sensoren anzeigen lassen kann.
Hier nochmal die korrekten Lösungen.
MEHRERE SENSOREN: pathes = ( "/sys/bus/w1/devices/28-0000065fa6c1/w1_slave", "", "")
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import re, os, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
def read_sensor(path):
value = "U"
try:
f = open(path, "r")
line = f.readline()
if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
line = f.readline()
m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)
if m:
value_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', path)
return value_c, value_f, path
path = "/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
# Endlosschleife
while True:
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
EIN SENSOR: pathes = ("/sys/bus/w1/devices/28-0000065fa6c1/w1_slave","", "")
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import re, os, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
def read_sensor(path):
value = "U"
try:
f = open(path, "r")
line = f.readline()
if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
line = f.readline()
m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)
if m:
value_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', path)
return value_c, value_f, path
path = "/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
# Endlosschleife
while True:
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
ANDERE LÖSUNG FÜR EINEN (1x) SENSOR:
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import os, glob, time
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print("temp C=%f\ttemp F=%f" % read_temp())
time.sleep(1)
Display More
Ich danke auch allen andere die sich bemüht haben mir zu helfen.
Der Ordner "Heizung" muss natürlich per Hand in "/var/log" erstellt werden.
PS: Der Code von RasPi-Jo läuft schneller und performanter.
Die Anzeige nimmt auch die Temperaturänderung schneller war als die zweite Variante.
Ich erkläre den Thread als
-----CLOSED-----
Traceback (most recent call last):
File "temp_ds18b20.py", line 54, in <module>
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
File "temp_ds18b20.py", line 42, in read_sensor
return value_c, value_f, path
UnboundLocalError: local variable 'value_c' referenced before assignment
Ok ist erledigt
Was sagst du dazu?
Hier nochmal der komplette Code:
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import re, os, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
def read_sensor(path):
value = "U"
try:
f = open(path, "r")
line = f.readline()
if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
line = f.readline()
m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)
if m:
value_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', path)
return value_c, value_f, path
pathes = (
"/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
)
# Endlosschleife
while True:
# read tempatature sensor data
for path in pathes:
#temp_c = read_sensor(path)
#temp_f = temp_c * 9.0 / 5.0 + 32.0
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
Ich korrigiere mich. Deine Posts waren vollkommen korrekt alle gesamt, ich habe sie nur falsch interpretiert.
Jetzt steh ich nur noch vor einem Problem:
######### function: read and parse sensor data file #########
def read_sensor(path):
value = "U"
try:
f = open(path, "r")
line = f.readline()
if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
line = f.readline()
m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)
if m:
value_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, path
Display More
Was muss ich unten in diesem Code für "datei" einsetzen? Er meckert dort, weil "datei" nicht deklariert ist.
freibeuter: auch mit anführungszeichen meckert er ..
def read_sensor(path):
value = "U"
try:
f = open(path, "r")
line = f.readline()
if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
line = f.readline()
m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)
if m:
value_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, path
Display More
Was muss für Path rein? Ich habe den kompletten Pfad angegeben wie oben in dem Code. Doch er sagt falsche Syntax /sys/bus/w1/...
Found it!
sudo nano /boot/config.txt
add :
dtoverlay=w1-gpio
Das musste ich in die Datei schreiben noch jetzt aknn ich ihn auslesen Ich danke für eure Hilfe!!
RaspiJo: Ich habe versucht deine Schleife nachzubauen.
def read_sensor(/sys/bus/w1/devices/28-0000065fa6c1):
value = "U"
try:
f = open(/sys/bus/w1/devices/28-0000065fa6c1, "r")
line = f.readline()
if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
line = f.readline()
m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)
if m:
value_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", /sys/bus/w1/devices/28-0000065fa6c1, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, /sys/bus/w1/devices/28-0000065fa6c1
Ich hoffe mal das klappt jetzt
FUNKTIONIERT
cd /sys/bus/w1/devices
cd 28-0000065fa6c1
cat w1_slave
HABE ICH IN DEN SYSTEMSTART EINGEFÜGT
sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm
Syntax Error bei:
def read_sensor(/sys/bus/w1/devices/28-0000065fa6c1):
^ invalid syntax
Was ist beim Pfad falsch?
PS:
import os, glob, time
os.system(′modprobe w1-gpio′)
os.system(′modprobe w1-therm′)
base_dir = ′/sys/bus/w1/devices/′
device_folder = glob.glob(base_dir + ′28*′)[0]
device_file = device_folder + ′/w1_slave′
def read_temp_raw():
f = open(device_file, ′r′)
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != ′YES′:
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find(′t=′)
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print("temp C=%f\ttemp F=%f" % read_temp())
time.sleep(1)
Funktioniert absolut klasse! Ich bekomme nun jede Sekunde das genau Ergebnis in C und F angezeigt. Sehr schön
RaspiJo doch was ist mit deiner Schleife? Ich würde auch diese gerne mal testen, aber was stimmt bei dem PFad nicht?
Gruß
Hallo Technik Freunde. Ich finde in dem Ordner keine Datei! Ich habe den Sensor angeschlossen aber in /sys/bus/w1/devices/ liegt bei mir nichts. Woran kann das liegen?
Gruß
Falls du das Raspberry Pi zwischendurch von deinem kabel getrennt hast solltest du mal nach der neuen IP scannen. Das Gerät bekommt jedes mal wenn du neu connectest eine hausinterne neue IP.
PS: Du kannst deine IP-Adresse auch "statisch" einstellen.
Display More
Ich sehe da keinen Unterschied zu der von uns vorgeschlagenen Schaltung!
In beiden Fällen werden die Pins 3,3V, GND und GPIO4 genutzt.
Der Pin TXD ist auf dem Bild der, der rechts von GPIO4 liegt.
Dein Script wird deshalb nicht funktionieren, weil du nach def nicht einrückst und damit Python die Subroutine / Funktion nicht erkennen kann:CodeDisplay Moreimport os, glob, time os.system(′modprobe w1-gpio′) os.system(′modprobe w1-therm′) base_dir = ′/sys/bus/w1/devices/′ device_folder = glob.glob(base_dir + ′28*′)[0] device_file = device_folder + ′/w1_slave′ def read_temp_raw(): f = open(device_file, ′r′) lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != ′YES′: time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find(′t=′) if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_f while True: print("temp C=%f\ttemp F=%f" % read_temp()) time.sleep(1)
oder so ähnlich, musst du im Original gucken. Kann aus zeitlichen Gründen da nicht einsteigen, nutze selber ein anders - aber auch umfangreicheres - Script.
Dieses Skript ist aus einem Buch. Es muss funktionieren. Weshalb sollte es nicht? Was muss ich ändern?
Moin Leute
Also es klappt jetzt soweit, nur ist das Problem, dass ich manche Tage über UMTS nun darauf zugreifen kann und manche Tage nicht.
Ich habe auch zwischendurch mal den Router resetet und neu aufgesetzt, aber das Problem bestand weiterhin.
Mag sein das es ein Problem seitens der Telekom bzw. des Routers ist oder vielleicht auch nur der DNS Anbieter. Ich fummel einfach mal noch weiter daran rum und melde mich ab und zu mal..^^
Wenn euch Lösungsvorschläge einfallen, dann bitte sofort posten
Gruß
PS: Habe zurzeit auch mal Apache aufgesetzt und ne Website reingehauen /var/ww.
Ist im Heimnetzwerk unter der internen IP Adresse normal erreichbar, aber nicht von außerhalb wie ich gerade feststelle.
Habe natürlich auch Port 80 auf 8080 zum Pi weitergeleitet, aber heute ist wieder einer dieser Tage wo es einfach nicht geht. Ich versuche immer vom Handy aus auf ozz-pi.zapto.org zuzugreifen.
Moin,
was haltet ihr eigentlich von dieser Schaltung mit diesem Skript: Schaltung
Und dann mit python folgendes Skript laufen lassen:
import os, glob, time
os.system(′modprobe w1-gpio′)
os.system(′modprobe w1-therm′)
base_dir = ′/sys/bus/w1/devices/′
device_folder = glob.glob(base_dir + ′28*′)[0]
device_file = device_folder + ′/w1_slave′
def read_temp_raw():
f = open(device_file, ′r′)
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != ′YES′:
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find(′t=′)
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print("temp C=%f\ttemp F=%f" % read_temp())
time.sleep(1)
---------------------------------------------------------------------------------
$ python temp_DS18B20.py
temp C=25.187000 temp F=77.336600
temp C=25.125000 temp F=77.225000
temp C=25.062000 temp F=77.111600
temp C=26.312000 temp F=79.361600
temp C=27.875000 temp F=82.175000
temp C=28.875000 temp F=83.975000
PS: Meine Rx- und Tx-Pin's also der eigentliche serielle Port sind freigeschalten und fungieren als Ein- und Ausgang, deswegen liegt das Datenkabel am Tx-Pin an in dem Bild
WoW, danke für eure Beiträge.
Ich hatte mich immer gewundert weshalb die Leute in den ganzen Videos und Tutorials einen 4,7K Widerstand nehmen ..
Ich bin mal gespannt ob ich das alles fehlerfrei hinbekomme, wenn die Post das ganze Zeug bringt
(1,15 Volt / 4700 Ohm) * 1000 = ca 0,2 mA
Heißt für mich, dass 0,2 mA durch den Widerstand nun fließen und der Temperatursensor mit 0,2 mA "betrieben" wird, die in die andere Richtung fließen, is korrekt so ne?