
photron
Administrators-
Gesamte Inhalte
3.184 -
Benutzer seit
-
Letzter Besuch
-
Tagessiege
52
Alle erstellten Inhalte von photron
-
Bindings: C/C++ 2.1.3 Fix strnlen redeclaration in some MinGW environments Download: C/C++
-
Bindings: C/C++ 2.1.2 ip_connection
Thema antwortete auf photrons FlyingDoc in: Allgemeine Diskussionen
Sorry, test mal bitte diese Version. tinkerforge_c_bindings_2_1_3_rc1.zip -
Brick Viewer 2.1.1 Use a more recent UI style on Windows Store port, authentiation options and secret per host and double host history length Use a signed Brick bootloader driver on Windows Add support for WS2811 and WS2812 to LED Strip Bricklet plugin Downloads: Windows, Linux, Mac OS X
-
Bindings: C/C++ 2.1.2, C# 2.1.1, Delphi/Lazarus 2.1.1, Java 2.1.1, JavaScript 2.0.1, LabVIEW 2.1.1, Mathematica 2.1.1, MATLAB/Octave 2.0.1, Perl 2.1.1, PHP 2.1.1, Python 2.1.1, Ruby 2.1.1, Shell 2.1.1, VB.NET 2.1.1 Add support for WS2811 and WS2812 to LED Strip Bricklet API [all] Download: C/C++, C#, Delphi/Lazarus, Java, JavaScript, LabVIEW, Mathematica, MATLAB/Octave, Perl, PHP, Python, Ruby, Shell, VB.NET
-
Brick Viewer 2.1.1 Modernen UI Style unter Windows Port, Authentifizierungs-Optionen und Secret werden pro Host-eintrag gespeichert und die Länge der Host-Historie wurde verdoppelt Brick Bootloader Treiber für Windows ist jetzt signiert Support für WS2811 und WS2812 zur LED Strip Bricklet API hinzugefügt Downloads: Windows, Linux, Mac OS X
-
Bindings: C/C++ 2.1.2, C# 2.1.1, Delphi/Lazarus 2.1.1, Java 2.1.1, JavaScript 2.0.1, LabVIEW 2.1.1, Mathematica 2.1.1, MATLAB/Octave 2.0.1, Perl 2.1.1, PHP 2.1.1, Python 2.1.1, Ruby 2.1.1, Shell 2.1.1, VB.NET 2.1.1 Support für WS2811 und WS2812 zur LED Strip Bricklet API hinzugefügt [alle] Download: C/C++, C#, Delphi/Lazarus, Java, JavaScript, LabVIEW, Mathematica, MATLAB/Octave, Perl, PHP, Python, Ruby, Shell, VB.NET
-
Kein Tippfehler, sondern missverständlicher Satzbau. Besser wäre gewesen: 0b00001111 in Binär ist also 15.
-
Du kannst auch mit set_port_configuration() alle 8 Pins eines Port setzen. io.set_port_configuration('b', (1 << 0) | (1 << 7), 'o', True) Hier wählt das erste Parameter den Port, in diesem Falle 'b'. io.set_port('b', 0b00001111) Hier wählt das erste Parameter wieder den Port, in diesem Falle 'b'. Das b in 0b00001111 steht für Binär. 0b00001111 ist also 15 in Binär. In Hex wäre das 0x0F. 0b00001111 (Binär) ist 15 (Dezimal) ist 0x0F (Hex). Einige Programmiersprachen, wie z.B. Python erlauben es Binärzahlen direkt hinzuschreiben. (1 << 0) | (1 << 7) z.B. erzeugt durch Shift- und Or-Operationen die Binärzahl 0b10000001. Die das IO-16 Bricklet dann als Bitmaske interpretiert und den ersten und achten Pin an Port B auf High und alle anderen auf Low setzt, weil das erste und das achte Bit 1 sind und der Rest 0.
-
Jeder Setter-Aufruf in der API sendet exakt eine Nachricht. Bei jedem Getter kommt dann auch noch exakt eine Nachricht zurück. set_port_configuration() sendet also eine Nachricht. Die IO-16 ist in Port A und Port B unterteilt und an jedem Port sind 8 Pins. Mit set_port_configuration() kannst du die 8 Pins an einem Port setzen. Du brauchst also zwei set_port_configuration() Aufrufe um alle Pins einer IO-16 einmal zu setzen. Wenn du nur zwischen Output-High und Output-Low umschalten willst kannst du auch einmal mit set_port_configuration() alle Pins auf Output stellen und dann mit set_port() zwischen High und Low wechseln.
-
Da muss du zuerst den aktuellen Text aus dem Textfeld löschen. Das geht z.B, mit T.delete(1.0, END) bevor du mit T.insert() in der cb_temperature() Funktionen neuen einfügst. Etwa so: def cb_temperature(temperature): #print('Temperature: ' + str(temperature/100.0) + ' °C') T.delete(1.0, END) T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C\n')
-
Bindings: C/C++ 2.1.1 Add extern "C" markup to all files to force proper symbol names in C++ Explicitly use ANSI version of WinAPI functions to support UNICODE builds on Windows Add simple library Makefile for Linux Fix race condition between device destruction and callback dispatch Download: C/C++
-
Bindings: C/C++ 2.1.1 extern "C" Markup zu allen Dateien hinzugefügt, um C Symbolnamen in C++ zu erzwingen Explizit ANSI Version von WinAPI Funktionen verwendet, um die UNICODE Compile-Option unter Windows zu unterstützen Einfaches Library Makefile für Linux hinzugefügt Race Condition zwischen device_destroy() Funktion und Callback-Auslieferung behoben Download: C/C++
-
IO4 Bricklet + button to switch on/off Motion Detector
Thema antwortete auf photrons ben_bienne in: Anfängerfragen und FAQ
Take a look at the interrupt example for the IO-4 Bricklet. You connect your button to pin 0 and a GND pin on the IO-4 Bricklet. Each time the button is pressed or released you get an interrupt callback. You can modify the cb_interrupt() function from the example like this (untested): def cb_interrupt(interrupt_mask, value_mask): # test if interrupt is from pin 0 if interrupt_mask & (1 << 0): # test if button is pressed or released if value_mask & (1 << 0): print "button released" else print "button pressed" if system_activ: system_activ = False print "surveillance is disabled" else: system_activ = True print "surveillance is enabled" Now your script can tell if the button was pressed or released. With this information you can then set your system_activ variable. -
Du hast da mehrere Probleme in deinem Script. Die if __name__ == "__main__": Blöcke gehören so nicht innerhalb von Funktionen, bzw. machen da keinen Sinn. Du hast bei der Einrückung Tabs und Spaces gemischt, das mag Python im Zweifels so nicht und führt zu komischen Problemen, da Blöcke in Python durch Einrückung gebildet werden. Die Registrierung und Aktivierung des Temperature-Callbacks erfolgt in der Callback Funktion. Dass kann so nicht funktionieren, das muss außerhalb von cb_temperature() passieren. Etwa so: #!/usr/bin/env python # -*- coding: utf-8 -*- from Tkinter import * from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_remote_switch import RemoteSwitch from tinkerforge.bricklet_temperature import Temperature import os #Tinkerforge HOST = "127.0.0.1" PORT = 4223 RemoteSwitch_UID = "jNw" Temperature_UID = "dFu" root = Tk() root.title("GUI") WMWIDTH, WMHEIGHT, WMLEFT, WMTOP = root.winfo_screenwidth(), root.winfo_screenheight(), 0, 0 root.overrideredirect(1) root.geometry("%dx%d+%d+%d" % (WMWIDTH, WMHEIGHT, WMLEFT, WMTOP)) #Temperature T = None def cb_temperature(temperature): #print('Temperature: ' + str(temperature/100.0) + ' °C') T.insert(END, 'Temperature: ' + str(temperature/100.0) + ' °C\n') def shutdown(): os.system("sudo shutdown -h now") def reboot(): os.system("sudo shutdown -r now") def light_on(): rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_ON) def light_off(): rs.switch_socket_b(1, 1, RemoteSwitch.SWITCH_TO_OFF) #def netio(): # os.system("sudo python /home/pi/GUI/tinkerforge/tinkerforge listen --enable-execute") def exit(): sys.exit() #b=Button(root, text= "NetIO", command=netio) #b.pack() # Create UI logo = PhotoImage(file="/home/pi/GUI/images/rpi_inside.gif") w1 = Label(root, image=logo height=32, width=32).grid(row=1, column=3) MyButton1 = Button(root, text="Shutdown", width=10, command=shutdown) MyButton1.grid(row=1, column=0) MyButton1 = Button(root, text="Reboot", width=10, command=reboot) MyButton1.grid(row=2, column=0) MyButton1 = Button(root, text="Exit", width=10, command=exit) MyButton1.grid(row=3, column=2) MyButton1 = Button(root, text="Licht an", width=10, command=light_on) MyButton1.grid(row=4, column=1) MyButton1 = Button(root, text="Licht aus", width=10, command=light_off) MyButton1.grid(row=5, column=1) T = Text(root, height=2, width=30) T.grid(row=6, column=3) # Create Tinkerforge objects ipcon = IPConnection() rs = RemoteSwitch(RemoteSwitch_UID, ipcon) t = Temperature(Temperature_UID, ipcon) ipcon.connect(HOST, PORT) t.register_callback(t.CALLBACK_TEMPERATURE, cb_temperature) t.set_temperature_callback_period(1000) # Start mainloop root.mainloop()
-
Wenn du auf dem RPi kein X laufen hast, kannst du kein brickv starten, das ist normal. Die Verzeichnisstruktur muss so aussehen: /home/pi/tinkerforge/ -> dein_script.py -> tinkerforge/ ----> __init__.py ----> ip_connection.py ----> brick_master.py ----> ... ----> bricklet_ambient_light.py ----> ... Die Bindings müssen in einem tinkerforge Unterverzeichnis neben deinem Script liegen und nicht im gleichen Verzeichnis wie dein Script. Und dieses tinkerforge Unterverzeichnis muss eine __init__.py Datei beinhalten, was aber schon der Fall sein sollte wenn du es aus dem ZIP kopierst. xip_connection? Das sollte wenn ip_connection ohne x sein.
-
Du kannst den Master Brick, der als RS485 Master arbeitet, auch mittels Ethernet oder WIFI Extension mit dem PC verbinden. Es muss nicht USB sein. Die Dokumentation ist da jetzt auch klarere formuliert. Danke für den Hinweise.
-
Loetkolben, mehrere Python Versionen gleichzeitig installiert zu haben ist normal und kein Problem. RouvenE, irgendwie mach bei dir easy_install Probleme, warum ist mir nicht ganz klar. Lass mich mal zusammenfassen: brickd und brickv sind installiert und funktionieren soweit. Aber die Python Bindings fehlen. Probier mal Folgendes aus: [*]Python Bindings herunterladen und entpacken. [*]Aus dem source Verzeichnis das tinkerforge Verzeichnis neben das Python Script kopieren, das du verwenden willst. [*]Dann sollte Python die Bindings finden können. Damit hast du die Bindings jetzt noch nicht global im System installiert, aber das sollte so erstmal als Test funktionieren.
-
Das ist komisch. Teste mal ob auch wirklich jemand auf Port 4223 lauscht: netstat -l | grep 4223 Das sollte folgendes ausgeben: tcp 0 0 *:4223 *:* LISTEN Ansonsten kannst du mal versuchen die listen.address Option in /etc/brickd.conf auf 127.0.0.1 zu setzen. Dann werden nur noch lokale Verbindungen angenommen. 0.0.0.0 bedeutet Verbindungen werden von überall her angenommen. Hast vielleicht irgendwelche Firewall Dinge auf dem Raspberry Pi aktiviert, die die lokale Verbindung verhindern?
-
Schwimmbad Temperatur Abfrage mittels Smartphone
Thema antwortete auf photrons P4trick in: Anfängerfragen und FAQ
Leider kann die WIFI Extension (noch) keine Websockets, sonst könntest du auf deinem Smartphone einfach brickv.com aufrufen und dich direkt zu WIFI Extension verbinden un die Temperatur auslesen. Eine Mögliche alternative wäre eine Ethernet Extension (diese kann Websockets). Oder eine Raspberry Pi dazuhängen und die Daten nach Xively hochladen und sie dann auf der Xively Website vom Smartphone aus ansehen. Für die Wetterstation haben wir das samt Beispiel Programm dokumentiert. Du könntest auch NetIO verwenden. Dann brauchst du allerdings noch einen Rechner auf dem die Shell Bindings als NetIO Proxy laufen. -
Das sieht alles soweit gut aus. Ich nehme an du meinst, dass sich brickv mit einer Fehlermeldung beschwert, wenn du den Connect Knopf klickst? Die Fehlermeldung hat diesen Text: Could not connect. Please check host, check port and ensure that Brick Daemon is running. Dann jetzt ein einfacher Test. Kopiere diese vier Zeile Python Code in eine Datei namens test.py: import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 4223)) print('done') und start sie mittels: python test.py Wenn "done" ausgegeben wird hat die Verbindung zu brickd funktioniert. Wenn nicht, dann wird ein Traceback ausgegeben, den dann bitte hier posten.
-
How to fast check if HOST & Bricklet are connected
Thema antwortete auf photrons rwblinn in: General Discussion
Create an IPConnection object and connect it to the host. If connect fails then the host is not reachable. With the connected IPConnection object create an object for the Bricklet and call its getIdentity method. If the method fails with a timeout then the Bricklet is not connected. The default timeout is 2.5 seconds. If that's too long you can make it shorter. How short it can be and still work reliable depends on the TCP/IP connection speed. You'll have to experiment. -
Hast du dir schon die Beispielprogramme angesehen? Zu allen gibt es auch den Quelltext, da kannst du dir anschauen wie wir das gemacht haben.
-
Probleme mit Beispielcode in C "Wetterstation"
Thema antwortete auf photrons TUMler in: Anfängerfragen und FAQ
Die Fehlermeldung besagt, dass Dev-C++ eine kaputte .exe Datei erstellt hat. Das scheint mit erstmal nichts direkt etwas mit dem Wetterstationscode zusammen zu hängen. Hast du mal versucht ein einfaches Hello World Programm zu erstellen? Ich schätze mal, dass Dev-C++ da Beispiele mitbringt. -
brickd is relying on udev events to be notified about USB device arrival/removal. The kernel message sound like the musb driver is not handling the disconnect properly. In the end there is no udev event send for this USB device removal and brickd does not get notified about it. I'm afraid there's not much I can do here.