saschakp Geschrieben January 10, 2014 at 13:24 Geschrieben January 10, 2014 at 13:24 Hallo, möchte gern das mein LCD Display alle 5 sek. was anderes auf dem Diplay anzeigt (Seiten). Wie bekomme ich das hin? #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys import time import math HOST = "192.168.2.32" PORT = 4223 UID = "9LY" # Change to your UID from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_lcd_20x4 import LCD20x4 if __name__ == "__main__": ipcon = IPConnection() # Create IP connection lcd = LCD20x4(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd # Don't use device before ipcon is connected # Turn backlight on lcd.backlight_on() # "Seite 1" lcd.clear_display() lcd.write_line(0, 0, 'Seite1') lcd.write_line(1, 0, 'Seite1') lcd.write_line(2, 0, 'Seite1') lcd.write_line(3, 0, 'Seite1') time.sleep(5) # "Seite 2" lcd.clear_display() lcd.write_line(0, 0, 'Seite2') lcd.write_line(1, 0, 'Seite2') lcd.write_line(2, 0, 'Seite2') lcd.write_line(3, 0, 'Seite2') time.sleep(5) # "Seite 3" lcd.clear_display() lcd.write_line(0, 0, 'Seite3') lcd.write_line(1, 0, 'Seite3') lcd.write_line(2, 0, 'Seite3') lcd.write_line(3, 0, 'Seite3') time.sleep(5) # "Seite 4" lcd.clear_display() lcd.write_line(0, 0, 'Seite4') lcd.write_line(1, 0, 'Seite4') lcd.write_line(2, 0, 'Seite4') lcd.write_line(3, 0, 'Seite4') time.sleep(5) raw_input('Press key to exit\n') # Use input() in Python 3 ipcon.disconnect() Müsste da ein schleife einbauen oder? lg Sascha Zitieren
Stefan Geschrieben January 10, 2014 at 13:42 Geschrieben January 10, 2014 at 13:42 Du kannst um die Seite 1 bis Seite 4 eine Endlosschleife einbauen. Dabei in Python die Einrückungen nicht vergessen. Dein Programm/Thread wird sich dadurch aber nie selbst beenden und muss von dir manuell beendet werden. while (TRUE): # "Seite 1" lcd.clear_display() lcd.write_line(0, 0, 'Seite1') lcd.write_line(1, 0, 'Seite1') lcd.write_line(2, 0, 'Seite1') lcd.write_line(3, 0, 'Seite1') time.sleep(5) # "Seite 2" lcd.clear_display() lcd.write_line(0, 0, 'Seite2') lcd.write_line(1, 0, 'Seite2') lcd.write_line(2, 0, 'Seite2') lcd.write_line(3, 0, 'Seite2') time.sleep(5) # "Seite 3" lcd.clear_display() lcd.write_line(0, 0, 'Seite3') lcd.write_line(1, 0, 'Seite3') lcd.write_line(2, 0, 'Seite3') lcd.write_line(3, 0, 'Seite3') time.sleep(5) # "Seite 4" lcd.clear_display() lcd.write_line(0, 0, 'Seite4') lcd.write_line(1, 0, 'Seite4') lcd.write_line(2, 0, 'Seite4') lcd.write_line(3, 0, 'Seite4') time.sleep(5) Zitieren
pluto Geschrieben January 10, 2014 at 14:15 Geschrieben January 10, 2014 at 14:15 Ich weiß nicht ob das in Pyhton geht, ich habe sowas mal mit Lazarus gemacht. Die Idee ist einfach: Jede Seite ist ein eigen Ständige Objekt/Klasse. So ist jede Seite unabhängig und eigenständig. Aber sie können auf angeschlossen Bricks zugreifen, in dem sie mit einer Verbindungs Klasse "Verbunden" werden. Diese verwaltet die Bricks und hier müssen die Bricks auch Installisiert werden. Meldet ein Temperatur Sensor jetzt eine Event, kann dieses Event einfach an die Aktuelle Seite weiter gereicht werden. Die Verbindungs Klasse Fungiert auch gleichzeitig als PageList. Ich nehme mal an, so ähnlich könnte man es auch in Pyhton machen. Vielleicht ist es etwas übertrieben, aber es könnte sich Lohnen. Über die Button am LCD könnten die Seiten gewechselt werden. Zitieren
saschakp Geschrieben January 10, 2014 at 15:21 Autor Geschrieben January 10, 2014 at 15:21 Danke für die Antworten, wenn ich "While (TRUE)" einfüge kommen folgende meldungen: Traceback (most recent call last): File "lcd.py", line 26, in <module> while (TRUE): NameError: name 'TRUE' is not defined Exception in thread Brickd-Receiver (most likely raised during interpreter shutdown):Exception in thread Disconnect-Prober (most likely raised during interpreter shutdown): Traceback (most recent call last): Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner File "/usr/lib/python2.7/threading.py", line 505, in run File "/usr/lib/python2.7/threading.py", line 505, in run File "/usr/local/lib/python2.7/dist-packages/tinkerforge.egg/tinkerforge/ip_connection.py", line 617, in receive_loop File "/usr/local/lib/python2.7/dist-packages/tinkerforge.egg/tinkerforge/ip_connection.py", line 752, in disconnect_probe_loop <type 'exceptions.TypeError'>: 'NoneType' object is not callable File "/usr/lib/python2.7/Queue.py", line 174, in get <type 'exceptions.TypeError'>: 'NoneType' object is not callable Das mit den Buttons ist die CallBack funktion? Muss mich da mal reinlesen. lg Sascha Zitieren
Stefan Geschrieben January 10, 2014 at 15:42 Geschrieben January 10, 2014 at 15:42 Mir ist ein Fehler unterlaufen, sorry. Es muss heißen True und nicht TRUE. Außerdem kann man die Klammer weglassen. while True: # "Seite 1" lcd.clear_display() lcd.write_line(0, 0, 'Seite1') lcd.write_line(1, 0, 'Seite1') lcd.write_line(2, 0, 'Seite1') lcd.write_line(3, 0, 'Seite1') time.sleep(5) # "Seite 2" lcd.clear_display() lcd.write_line(0, 0, 'Seite2') lcd.write_line(1, 0, 'Seite2') lcd.write_line(2, 0, 'Seite2') lcd.write_line(3, 0, 'Seite2') time.sleep(5) # "Seite 3" lcd.clear_display() lcd.write_line(0, 0, 'Seite3') lcd.write_line(1, 0, 'Seite3') lcd.write_line(2, 0, 'Seite3') lcd.write_line(3, 0, 'Seite3') time.sleep(5) # "Seite 4" lcd.clear_display() lcd.write_line(0, 0, 'Seite4') lcd.write_line(1, 0, 'Seite4') lcd.write_line(2, 0, 'Seite4') lcd.write_line(3, 0, 'Seite4') time.sleep(5) Zitieren
saschakp Geschrieben January 10, 2014 at 15:53 Autor Geschrieben January 10, 2014 at 15:53 Danke, es klappt. lg Sascha Zitieren
saschakp Geschrieben April 18, 2014 at 16:16 Autor Geschrieben April 18, 2014 at 16:16 Das mit den Seitenwechsel klappt ja ganz gut, habe es auch hinbekommen das er Werte von verschiedenen Bricks anzeigt. Nur er läd die Werte nicht neu, wenn ich das Script starte holt er sich die Werte und dann bleiben die bestehen. Wie muss ich das mit der schleife machen damit er sich die werte jedesmal neu holt bzw aktualisiert? ##!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys import time import math import os HOST1 = "192.168.2.157" # MasterBrick Flur mit Ethernet HOST2 = "192.168.2.156" # MasterBrick Esszimmer mit Wireless LAN PORT = 4223 # Port von den Bricks UID_L = "9LY" # UID_B = "jXQ" #Barometer inkl. Temperatur UID_A = "jxV" UID_M = "68USSm" #MasterBrick 1 UID_T1 = "Temp1" # Temperatur Aussen UID_T2 = "dUj" # Temperatur Flur UID_F = "ka6" # Luftfeuchte from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_lcd_20x4 import LCD20x4 from tinkerforge.bricklet_barometer import Barometer from tinkerforge.bricklet_ambient_light import AmbientLight from tinkerforge.brick_master import Master from tinkerforge.bricklet_temperature import Temperature from tinkerforge.bricklet_humidity import Humidity if __name__ == "__main__": ipcon1 = IPConnection() ipcon2 = IPConnection() lcd = LCD20x4(UID_L, ipcon1) b = Barometer(UID_B, ipcon2) temp1 = Temperature(UID_T1, ipcon2) temp2 = Temperature(UID_T2, ipcon1) al = AmbientLight(UID_A, ipcon1) h = Humidity(UID_F, ipcon2) master = Master(UID_M, ipcon2) ipcon1.connect(HOST1, PORT) ipcon2.connect(HOST2, PORT) lcd.backlight_on() # Don't use device before ipcon is connected air_pressure = b.get_air_pressure()/1000.0 altitude = b.get_altitude()/100.0 illuminance = al.get_illuminance()/10.0 bartemp = b.get_chip_temperature()/100.0 esszimm = temp1.get_temperature()/100.0 flur = temp2.get_temperature()/100.0 voltage = master.get_stack_voltage() current = master.get_stack_current() wifi = master.get_wifi_configuration() wifistatus = master.get_wifi_status() wifipower = master.get_wifi_power_mode() wifihost = master.get_wifi_hostname() usbvoltage = master.get_usb_voltage() masterid = master.get_identity() feuchte = h.get_humidity()/10.0 lcd.backlight_on() os.system('clear') while True: # "Seite 1" lcd.clear_display() lcd.write_line(0, 0, 'Aussen: ' + str(esszimm) + '') lcd.write_line(0, 13, ' \xdfC') lcd.write_line(1, 0, ' Buero: ' + str(21.82) + '') lcd.write_line(1, 13, ' \xdfC') lcd.write_line(2, 0, ' Flur: ' + str(flur) + '') lcd.write_line(2, 13, ' \xdfC') lcd.write_line(3, 0, ' EssZi: ' + str(bartemp) + '') lcd.write_line(3, 13, ' \xdfC') time.sleep(10) # "Seite 2" lcd.clear_display() lcd.write_line(0, 0, 'Luftdr.: ' + str(air_pressure) + '') lcd.write_line(0, 15, ' mbr') lcd.write_line(1, 0, 'Feuchte: ' + str(feuchte) + '') lcd.write_line(1, 15, ' %') lcd.write_line(2, 0, ' Licht: ' + str(illuminance) + '') lcd.write_line(2, 15, ' Lux') lcd.write_line(3, 0, ' ' + str() + '') lcd.write_line(3, 13, ' ') time.sleep(10) lg Sascha Zitieren
saschakp Geschrieben April 19, 2014 at 08:58 Autor Geschrieben April 19, 2014 at 08:58 Habe die Lösung: ... ... from tinkerforge.bricklet_temperature import Temperature from tinkerforge.bricklet_humidity import Humidity def restart_program(): python = sys.executable os.execl(python, python, * sys.argv) if __name__ == "__main__": ipcon1 = IPConnection() # Create IP connection ipcon2 = IPConnection() # Create IP connection ... ... ... ... restart_program() # Skript neustarten lg Sascha Zitieren
Gast Robin Geschrieben April 19, 2014 at 10:47 Geschrieben April 19, 2014 at 10:47 Sehe ich das richtig, dass du das Programm neu startest? Du kannst auch einfach in der while schleife die werte über die API neu Abfragen. Macht das Programm dann schneller und ist außerdem schöner Wozu hast du mehrere ipconnections geöffnet? Hängen die Sensoren alle an einem Master oder hast du mehrere Master an verschiedenen Computern / Master Extensions? Zitieren
saschakp Geschrieben April 19, 2014 at 12:30 Autor Geschrieben April 19, 2014 at 12:30 Hey, habe gerade festgestellt das das Script doch nicht so 100% funktioniert. Es beendet sich mit einem Timeout. Dieser Code hier hat ja auch nicht funktioniert, da er zwar durchläuft, aber die Werte nicht aktualisieren. Hast du eine Idee? Habe einen Mäster per WLAN im Esszimmer (Temp, Baro, Luft) Ein Master hängt im Flur (LCD, Temp, Licht) Wahrscheinlich wäre es mit der CallBack Funktion besser, aber das habe ich noch nicht hinbekommen, das er mehrere Master abfragt und die dann noch in das LCD schreibt und dann noch verschiedene Buttons abfragt. ##!/usr/bin/env python # -*- coding: utf-8 -*- import socket import sys import time import math import os HOST1 = "192.168.2.157" # MasterBrick Flur mit Ethernet HOST2 = "192.168.2.156" # MasterBrick Esszimmer mit Wireless LAN PORT = 4223 # Port von den Bricks UID_L = "9LY" # UID_B = "jXQ" #Barometer inkl. Temperatur UID_A = "jxV" UID_M = "68USSm" #MasterBrick 1 UID_T1 = "Temp1" # Temperatur Aussen UID_T2 = "dUj" # Temperatur Flur UID_F = "ka6" # Luftfeuchte from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_lcd_20x4 import LCD20x4 from tinkerforge.bricklet_barometer import Barometer from tinkerforge.bricklet_ambient_light import AmbientLight from tinkerforge.brick_master import Master from tinkerforge.bricklet_temperature import Temperature from tinkerforge.bricklet_humidity import Humidity if __name__ == "__main__": ipcon1 = IPConnection() ipcon2 = IPConnection() lcd = LCD20x4(UID_L, ipcon1) b = Barometer(UID_B, ipcon2) temp1 = Temperature(UID_T1, ipcon2) temp2 = Temperature(UID_T2, ipcon1) al = AmbientLight(UID_A, ipcon1) h = Humidity(UID_F, ipcon2) master = Master(UID_M, ipcon2) ipcon1.connect(HOST1, PORT) ipcon2.connect(HOST2, PORT) lcd.backlight_on() # Don't use device before ipcon is connected air_pressure = b.get_air_pressure()/1000.0 altitude = b.get_altitude()/100.0 illuminance = al.get_illuminance()/10.0 bartemp = b.get_chip_temperature()/100.0 esszimm = temp1.get_temperature()/100.0 flur = temp2.get_temperature()/100.0 voltage = master.get_stack_voltage() current = master.get_stack_current() wifi = master.get_wifi_configuration() wifistatus = master.get_wifi_status() wifipower = master.get_wifi_power_mode() wifihost = master.get_wifi_hostname() usbvoltage = master.get_usb_voltage() masterid = master.get_identity() feuchte = h.get_humidity()/10.0 lcd.backlight_on() os.system('clear') while True: # "Seite 1" lcd.clear_display() lcd.write_line(0, 0, 'Aussen: ' + str(esszimm) + '') lcd.write_line(0, 13, ' \xdfC') lcd.write_line(1, 0, ' Buero: ' + str(21.82) + '') lcd.write_line(1, 13, ' \xdfC') lcd.write_line(2, 0, ' Flur: ' + str(flur) + '') lcd.write_line(2, 13, ' \xdfC') lcd.write_line(3, 0, ' EssZi: ' + str(bartemp) + '') lcd.write_line(3, 13, ' \xdfC') time.sleep(10) # "Seite 2" lcd.clear_display() lcd.write_line(0, 0, 'Luftdr.: ' + str(air_pressure) + '') lcd.write_line(0, 15, ' mbr') lcd.write_line(1, 0, 'Feuchte: ' + str(feuchte) + '') lcd.write_line(1, 15, ' %') lcd.write_line(2, 0, ' Licht: ' + str(illuminance) + '') lcd.write_line(2, 15, ' Lux') lcd.write_line(3, 0, ' ' + str() + '') lcd.write_line(3, 13, ' ') time.sleep(10) lg Sascha Zitieren
saschakp Geschrieben April 19, 2014 at 13:41 Autor Geschrieben April 19, 2014 at 13:41 Lernen durch schmerz So sollte es jetzt laufen: ... ... if __name__ == "__main__": while True: ipcon1 = IPConnection() # Create IP connection ipcon2 = IPConnection() # Create IP connection lcd = LCD20x4(UID_L, ipcon1) # Create device object b = Barometer(UID_B, ipcon2) # Create device object temp1 = Temperature(UID_T1, ipcon2) temp2 = Temperature(UID_T2, ipcon1) al = AmbientLight(UID_A, ipcon1) # Create device object h = Humidity(UID_F, ipcon2) # Create device object master = Master(UID_M, ipcon2) # Create device object ipcon1.connect(HOST1, PORT) # Connect to brickd ipcon2.connect(HOST2, PORT) ... ... "while True:" muss richtig eingerückt sein und der rest darunter auch. Ohh mann war ich dämlich. lg Sascha p.s. schöne Ostern. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.