Ich habe einen 10K Widerstand verbaut; das Kabel zum DHT22 ist ca. 20cm lang. Bei der Reichweite habe ich ganz massive Unterschiede bemerkt, je nachdem welches Material ich für die Antennen verwendet habe. Wirklich schlechte Erfahrungen habe ich mit einem Conrad Klingeldraht gemacht - die beste Reichweite bringt bei mir dieser Draht.
Entwicklung: Temperatur Funk Sensor
-
meigrafd -
23. August 2013 um 13:46 -
Erledigt
L
I
V
E
Stammtisch ab 20:30 Uhr im Chat
-
-
Entwicklung: Temperatur Funk Sensor? Schau mal ob du hier fündig wirst!
-
So habe ich das auch gebaut. Hat jemand von euch ggf. einen BMP180 UND einen DHT22 auf dem TinyTX3 verbaut? Hätte das gerne für meinen Outdoorsensor. Indoor brauche ich den Luftdruck nicht wirklich
Gruß,
toberkel -
Ist der Luftdruck aussen wirklich anders als innen?
-
Ich wurde es halt gerne aussen messen, bin nur nicht sicher wie und ob sich beide Sensoren auf dem TinyTX3 unterbringen lassen
-
Läuft der BMP180 mit dem Send_BMP085_Watchdog Sketch und dem TinyTX3 bei dir?
Bei mir will der irgendwie nicht... Wie hast Du den angeschlossen bzw. hast Du Veränderungen am Sketch vorgenommen?
-
Hallo,
mal ein Frage.
die Aktuelle Index-php zum Darstellen der Messwerte ist ja leider nicht mit MySQL kompatibel.Was ist den aus dem Webinterface für die Darstellung der Daten der TinySensor.py geworden ?
"Zitat von Damals"
So, noch ein paar kleinere Änderungen- Unterstützung für MySQL eingebaut, für den Fall das jemand zB. mehrere RaspberryPI's hat aber alle in eine Datenbank schreiben sollen, oder einfach nur um die Daten auszulagern.
Dafür verwende ich CyMySQL da das einfacher einzubauen ist (für MySQLdb mit python3 ist der Installationsaufwand größer).Aber ich muss euch dennoch warnen, MySQL ist (zumindest auf dem Pi-1) langsamer und verursacht auch mehr CPU+RAM Auslastung! Außerdem verballert es permanent CPU+RAM auch wenn es gar nicht genutzt wird.
Es wird wie mit SQLite pro NodeID eine Datenbank angelegt die aber mit dem Prefix TinyTX_ benannt ist (also zB. TinyTX_22) und in dieser Datenbank auch pro SensorType eine Tabelle.
- Serial ist etwas umfangreicher implementiert um genauere Einstellungen vornehmen zu können.
- Konsolen Ausgaben sind jetzt in Farbe Also insbesondere der Hinweis das die Battery leer sein könnte, aber auch Fehlermeldungen. Später könnte man auch die SensorTypen Ausgaben einfärben aber ich will's ja nicht gleich übertreiben...
Zur Verwaltung der SQLite Datenbanken empfehle ich phpLiteAdmin, das ist nur ein PHP File was man irgendwo in /var/www/ ablegen brauch und ist so ähnlich wie phpMyAdmin.
"TinySensor.py"
[code=php]
#!/usr/bin/python3
# coding: utf-8
#
# Receive Data from TinyRX over UART and save directly to Datanbase.
# - SQLite and MySQL Support.
# - Creating for each Node an own Database and for each SensorType an own Table.
#
# v0.31 by meigrafd @ 08.02.2015
#
### Setup:
# You must install following packages:
# apt-get install python3 python3-serial
#
# Do following steps if you want to use MySQL instead of SQLite:
# apt-get install python3-pip
# pip3 install cymysql
#
#------------------------------------------------------------------------
# Specify your serial port path (/dev/ttyAMA0 is default for RaspberryPi)
SerialPort = '/dev/ttyAMA0'
# And its Speed
SerialBaudrate = 9600# Use SQLite or MySQL? [mysql / sqlite]
dbServ = 'sqlite'# Specify the directory for SQLite Database files
DBdir = '/var/Sensors'# If using MySQL specify Host, Port, Login and Password
mysqlHost = '127.0.0.1'
mysqlPort = '3306'
mysqlLogin = 'root'
mysqlPass = 'raspberry'# Specify the known types from sensors
# e.g.: ["v=Voltage=1000", "t=Temperature=100", "h=Humidity=100", "r=ReedSwitch", "p=Pressure", "us=Distance"]
# -> v must be in Datastring and volt is the name of Database-Table
# Not known types goes to Database Table -> unknown
# The second setting after Voltage (=1000) is the optional divide value eg. Voltage needs to get divide by 1000.
SensorTypes = ["v=Voltage=1000", "t=Temperature=100", "h=Humidity=100", "r=ReedSwitch", "p=Pressure", "us=Distance"]# Specify the battery limit in milliVolt for notice
batteryLimit = 3100# Enable TEST-MODE?
# If set to True the Script process's static lines and quits without adding or receiving anything.. (debugging)
testMode = False#------------------------------------------------------------------------
import time, os
try:
import serial
except ImportError:
print("ERROR: You must install serial Module: apt-get install python3-serial")
exit()
if dbServ == 'sqlite':
import sqlite3 as sqlite
elif dbServ == 'mysql':
try:
import cymysql
except ImportError:
print("ERROR: You must install cymysql Module: apt-get install python3-pip && pip3 install cymysql")
exit()
else:
print("ERROR: invalid 'dbServ' setting!")
exit()# serial docu: http://pyserial.sourceforge.net/pyserial.html
# initialization and open the port.
# possible timeout values:
# 1. None: wait forever, block call
# 2. 0: non-blocking mode, return immediately
# 3. x, x is bigger than 0, float allowed, timeout block call
ser = serial.Serial()
ser.port = SerialPort
ser.baudrate = SerialBaudrate
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
#ser.timeout = None #block read
ser.timeout = 1 #non-block read
#ser.timeout = 2 #timeout block read
ser.xonxoff = False #disable software flow control
ser.rtscts = False #disable hardware (RTS/CTS) flow control
ser.dsrdtr = False #disable hardware (DSR/DTR) flow control
ser.writeTimeout = 2 #timeout for write
#------------------------------------------------------------------------# This handles console colors used for print's
#http://misc.flogisoft.com/bash/tip_colors_and_formatting
class c:
ENDC='\33[0m'
DEFAULT='\33[39m'; BOLD='\33[1m'; DIM='\33[2m'
RESBOLD='\33[21m'; RESDIM='\33[22m'
RED='\33[31m'; GREEN='\33[32m'; YELLOW='\33[33m'; CYAN='\33[36m'# This function process data from serial port and prints received values in human readable format
def processData(rx):
# rx: 22 v=3100&t=3400&h=6700&r=0
data = rx.strip().split(' ')
nodeID = data[0]
output = "NID:%s" % nodeID
#analyse data: v=3100&t=3400&h=6700&r=0
sensorData = data[1].split('&')
for senD in sensorData: #sensorData eg: v=3100 t=3400 h=6700 r=0
dbTable = "unknown"
divide = False
value = senD.split('=') #value eg: v 3100
for sType in SensorTypes: #sType eg: v=Voltage=1000
ssType = sType.split('=') #eg: v Voltage 1000
if value[0] == ssType[0]:
dbTable = ssType[1]
if len(ssType) > 2:
divide = ssType[2]
break
if divide:
VALUE = round(float(value[1]) / float(divide), 2)
if value[0] == "v":
if int(value[1]) < batteryLimit:
print(c.BOLD+c.RED+"Battery in your TinyTX id "+c.CYAN+nodeID+c.RED+" is running low!"+c.ENDC, end='')
print(" Actual reading shows: "+c.BOLD+c.YELLOW+str(value[1])+"mV"+c.ENDC)
output += " VCC:%sv" % VALUE
continue
else:
VALUE = value[1]
output += " "+dbTable+":%s" % VALUE
#insert into Database
if not testMode:
insertData(int(nodeID), dbTable, VALUE)
# Ausgabe
print(output)# This function inserts received data into sqlite database
def insertData(nodeID, table, data):
try:
con = None
if dbServ == 'mysql':
try:
con = cymysql.connect(host=mysqlHost, port=int(mysqlPort), user=mysqlLogin, passwd=mysqlPass)
cur = con.cursor()
cur.execute("CREATE DATABASE IF NOT EXISTS TinyTX_%s;", (nodeID))
cur.execute("USE TinyTX_%s;", (nodeID))
con.commit()
cur.execute("CREATE TABLE IF NOT EXISTS "+table+" (id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,time INT(11),value VARCHAR(20));")
cur.execute("INSERT INTO "+table+" (time, value) VALUES (%s,%s);", (timestamp, data))
except Exception as err:
print(c.BOLD+c.RED+"MySQL Error: "+str(err)+c.ENDC)
except (KeyboardInterrupt, SystemExit):
exit()
else:
database = DBdir +"/"+ nodeID +".db"
if not os.path.isfile(database):
open(database, 'a').close()
os.chown(database, 33, 33)
con = sqlite.connect(database)
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS "+table+" (id INTEGER PRIMARY KEY,time INT,value TEXT);")
cur.execute("INSERT INTO "+table+" (time, value) VALUES (?,?);", (timestamp, data))con.commit()
except sqlite.Error as err:
print(c.BOLD+c.RED+"SQLite Error "+err.args[0]+c.ENDC)
except Exception as err:
print(c.BOLD+c.RED+"DB Error: "+str(err)+c.ENDC)
finally:
if con:
con.close()if __name__ == '__main__':
try:
if not os.path.exists(DBdir):
os.makedirs(DBdir)
os.chown(DBdir, 33, 33)
except OSError as ose:
print("Error creating directory '{}': {}".format(DBdir, str(ose)))
running = True
try:
ser.open()
except Exception as e:
print("Error open serial port: %s" % str(e))
if ser.isOpen():
try:
ser.flushInput() #flush input buffer, discarding all its contents
ser.flushOutput() #flush output buffer, aborting current output and discard all that is in buffer
print("Tiny Sensors with RFM12B. Waiting for Data...\r\n")
if testMode:
timestamp = int(time.time())
processData("22 v=4100&t=3421&h=6712&r=0")
processData("21 v=3099&us=321")
processData("23 v=3100&t=3487&h=6798&r=0&p=926")
processData("19 v=3000&t=4512&h=9911&r=0&p=321")
processData("10 v=4321&t2=5612")
exit()
while running:
data = ser.read(1) # read one, blocking
n = ser.inWaiting() # look if there is more
if n:
data = data + ser.read(n) # and get as much as possible
if len(data) > 0:
timestamp = int(time.time())
print("Got data: " + data)
processData(data)
except serial.SerialException as e:
print("Could not open serial port: {}".format(e))
except Exception as e1:
print("Error: " + str(e1))
except (KeyboardInterrupt, SystemExit):
print("\nSchliesse Programm..")
running = False
else:
print("Cannot open serial port")ser.close()
[/php]
Das sollte es aber auch erst mal zur TinySensor.py sein. Werde mich jetzt nur noch ums WebIf kümmern -
Läuft der BMP180 mit dem Send_BMP085_Watchdog Sketch und dem TinyTX3 bei dir?
Bei mir will der irgendwie nicht... Wie hast Du den angeschlossen bzw. hast Du Veränderungen am Sketch vorgenommen?
Ich habe den heute erst bekommen und wollte am WE mal bisschen damit testen... Wenn er läuft wäre ja die nächste Herausforderung den BMP180 und den DHT22 gleichzeitig auf dem TinyTX3 zu betreiben
-
Hallo, muss ich beim TinyTX aus der letzten Sammelbestellung beim Anschluss eines DHT22 noch einen Widerstand einbauen? Und wenn ja, von welchem Pin zu welchem Pin ?
-
Der Widerstand sollte 10K haben, bei besonders langem Kabel geht wohl auch weniger, aber das ist bestimmt die Ausnahme. Der 10K Widerstand muss zwischen Pin 9 und 10, also VCC und DATA müssen verbunden werden. Wenn man von vorn auf den DHT22 schaut, dann sind das die Pins 1+2, Pin3 ist nicht beschaltet, Pin 4 ist GND.
-
Hi,
bisher kam ich sehr gut klar mit den hier versammelten Anleitungen und Tips - an dieser Stelle ein herzliches Dankeschön von mir, auch an die Initiatoren der Sammelbestellungen :thumbs1:
Doch nun hab ich ein Problem mit den Sendern TinyTX4 - bei den Receivern klappt alles - aus der zweiten Sammelbestellung: sie lassen sich nicht flashen! Da muß es einen mir unbekannten Trick geben.
Folgendes hab ich bisher gemacht:
1. Arduino-IDE auf dem Mac nach hiesiger Anleitung eingerichtet
2. Receiver-Platine mittels des USP-Sticks von eHajo (http://www.ehajo.de/baus%C3%A4tze/…/usp-stick.html) angeschlossen
3. In der IDE 'ATtiny84 (internal 8 MHz clock)' und 'usbtiny' ausgewählt
4. Bootloader flashen
5. Passenden Sketch Receiver_PI.ino übersetzt und geflasht
- Klappt!Nun die Sender-Platine: bei Punkt 4 kommt der Fehler:
Code
Alles anzeigen... Programmer Type : USBtiny Description : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/ avrdude: programmer operation not supported avrdude: Using SCK period of 10 usec CMD: [ac 53 00 00] [ff ff ff ff] CMD: [ac 53 00 00] [00 00 00 00] avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
Das kam mir bekannt vor, wenn bspw. der ISP-Stecker falsch rum steckt. Also mal testweise gedreht, doch die Fehlermeldung blieb dieselbe.
Dann hab ich unter Linux (Ubuntu 14.04) den avrdude installiert und das beliebte Kommando
angewendet:
Coderoot@t20:~# avrdude -p t84 -c usbtiny -F avrdude: initialization failed, rc=-1 avrdude: AVR device initialized and ready to accept instructions avrdude: Device signature = 0xc837fa avrdude: Expected signature for ATtiny84 is 1E 93 0C
Die 'Device signature' ändert sich bei jedem Aufruf, kann auch schon mal 0xc8e79e, 0xc8b758 oder ähnlich sein.Während bei der Receiver-Platine wie zu erwarten (das Flashen hat ja geklappt)
Codeavrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e930c avrdude: safemode: Fuses OK (H:FF, E:D7, L:E2)
kommt.Woran liegt es also? Kann ich noch was testen, was nähere Auskünfte gibt? Stimmt womöglich was mit diesen mysteriösen Fuses nicht? Bspw. könnte der interne Oszillator mit zu geringem Takt laufen, doch ab Werk soll er auf 1MHz eingestellt sein.
Grüße,
JürgenEdit: 30.05.2015, 15:23
-
Stimmt womöglich was mit diesen mysteriösen Fuses nicht? Bspw. könnte der interne Oszillator mit zu geringem Takt laufen, doch ab Werk soll er auf 1MHz eingestellt sein.Die mysteriösen Fuses muss man mit dem Menüpunkt "Bootloader brennen" in der Arduino-IDE setzen (vorher natürlich ATtiny84 @ 8 MHz auswählen). Das dauert ziemlich lang, ohne dass irgendetwas angezeigt wird, also Geduld.
Da man das nur einmal bei einem neuen Tiny machen muss, vergisst man das schnell - ich hab's jedenfalls auch vergessen, als ich die TinyTX4 zum ersten Mal ausprobiert habe.
Viele Grüsse...
Michael -
Die mysteriösen Fuses muss man mit dem Menüpunkt "Bootloader brennen" in der Arduino-IDE setzen (vorher natürlich ATtiny84 @ 8 MHz auswählen). Das dauert ziemlich lang, ohne dass irgendetwas angezeigt wird, also Geduld.Da man das nur einmal bei einem neuen Tiny machen muss, vergisst man das schnell - ich hab's jedenfalls auch vergessen, als ich die TinyTX4 zum ersten Mal ausprobiert habe.
Ja, das vergeß ich auch schon mal gerne, doch leider in diesem Fall nicht. Aber vergessen hab ich es in meiner Aufzählung. Danke für den Hinweis, ich hab's ergänzt.
Ich hab grad trotzdem nochmal probiert den Bootloader zu flashen, es kommen diesselben Fehlermeldungen wie vorher auch:
Code
Alles anzeigenProgrammer Type : USBtiny Description : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/ avrdude: programmer operation not supported avrdude: Using SCK period of 10 usec CMD: [ac 53 00 00] [00 03 ff ff] CMD: [ac 53 00 00] [00 00 00 00] avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
-
Hi,
ich kann ja mehere DS18xx an einem TinyTX anschliessen, indem ich die Zeile "//temp2" im Code aktiviere. Ist die Reihenfolge der Sensoren immer gleich? Auch nach einem wechsel der Batterien?
Codeint temp = sensors.getTempCByIndex(0)*100; // read sensor 1 // int temp2=(sensors.getTempCByIndex(1)*100); // read second sensor.. you may have multiple and count them upon startup but I only need one
Gruß
Harpi -
Hier mal ein Foto für den optischen Vergleich der Größe, damit du weißt worauf du dich einläßt
Spoiler anzeigen
ist etwas unscharf aber hierfür eigentlich auch unwichtig..
Von links nach rechts: Sender(TinyTX4) ; Empfänger(TinyRX4) ; Booster-only ; DHT22
liegen btw auf einem blatt klopapierund hier noch mal nur der booster-only, leicht von der seite mit blitz:
PS: Der Booster wird zwischen die SpannungsVersorgung und dem Rest (pcb) angebracht
Auch hier sind keine Bilder mehr zu finden. So ist es nun in allen Beiträgen von Dir. Mit Bilder ist es für alle Verständlicher
-
@ meigrafd
Ich frage einfach nochmal, was ich Dich in Beitrag #1.337 schonmal gefragt habe > Hast du einen Sketch für den BMP085 ohne JeeLib, also mit RFM12B Lib und Watchdog vorliegen? Du schreibst ja, dass du deine Sensoren ohne die JeeLib am laufen hast, der Sketch für den BMP085 ist aber der einzige auf GitHub, der nur mit der JeeLib vorliegt.
Ich versuche leider noch immer meinen BMP180 aus der Sammelbestellung mit dem TinyTX3/TX4 zum laufen zu bekommen und ich vermute es liegt an der JeeLib...
Danke für eine Antwort!
-
Hi,ich kann ja mehere DS18xx an einem TinyTX anschliessen, indem ich die Zeile "//temp2" im Code aktiviere. Ist die Reihenfolge der Sensoren immer gleich? Auch nach einem wechsel der Batterien?
Codeint temp = sensors.getTempCByIndex(0)*100; // read sensor 1 // int temp2=(sensors.getTempCByIndex(1)*100); // read second sensor.. you may have multiple and count them upon startup but I only need one
Gruß
HarpiReihenfolge ist immer gleich, auch nach einem Batteriewechsel. Hierzu mal das OneWire Protokoll bzw die Beschreibung zu lesen.
-
Ich frage einfach nochmal in die Runde, da ich mit meinem BMP180 am TinyTX3/TinyTX4 leider nicht weiterkomme...
Hat einer von Euch einen BMP180 aus der Sammelbestellung mit dem Send_BMP085_Watchdog Sketch von meigrafd zum laufen bekommen? -
Ich frage einfach nochmal in die Runde, da ich mit meinem BMP180 am TinyTX3/TinyTX4 leider nicht weiterkomme...
Hat einer von Euch einen BMP180 aus der Sammelbestellung mit dem Send_BMP085_Watchdog Sketch von meigrafd zum laufen bekommen?Ich glaube es bringt nichts öfter zu fragen ob jmd damit Erfahrung hat oder nicht. Wenn keiner eine Lösung hat, wird auch keine Antwort auf deine Frage kommen.
-
So Hallo in die Runde,
ich werde diese Woche mal mit meinen BMP180 experimentieren und hoffe dass ich die mit den TinyTX3 zum Laufen bekomme ..
werde mich melden sobald es etwas neues gibt!Viele Grüße aus Ulm!
-
So Hallo in die Runde,ich werde diese Woche mal mit meinen BMP180 experimentieren und hoffe dass ich die mit den TinyTX3 zum Laufen bekomme ..
werde mich melden sobald es etwas neues gibt!Viele Grüße aus Ulm!
Moin, ich habe ihn zum laufen gebracht, habe allerdings das Problem das er relativ schnell die beiden AA-Batterien leer saugt... Ich nutze eine Mischung aus Nathans DHT22 und dem BMP085 Sketch... Evtl liegt da auch mein Fehler... Will ich nicht ausschliessen. Aktuell halten die Batterien aber nur ca. 9 Tage...
Angeschlossen habe ich noch ein Step Up Modul was konstant 3.3 Volt liefert...
Gruß,
toberkel -
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!