Jump to content

Uhlhorn

Members
  • Gesamte Inhalte

    104
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von Uhlhorn

  1. Ah, okay. Das ist natürlich ein valides Argument. Dass kann ich einsehen. :-) Kann man vielleicht nicht nur die Funktion in die API aufnehmen, die auf einen externen True-Type-Font verweist? Also so in der Art: BrickletLCD128x64.draw_TTCtext(position_x, position_y, font, size, index, encoding, color, text) (Also angelehnt an PIL.ImageFont.truetype) Wobei font ein String mit Pfad und Namen der TTC-Datei ist: font = "Fonts/Menlo.ttc" So was müsste doch gehen, oder? Und kann man den Speicher vielleicht auch vergrößern?
  2. Ich teste gerade das Display. Bitte nicht so einen Legotext! Das ist ja grausam! Lieber eine schöne Schrift, so, wie ich es hier im OLED gemacht habe. Ich mache Euch auch gerne die Bitmaps dafür. ;-)
  3. Ja, werde ich zurücksenden. Kommt die Tage … Das mit dem Kühlkörper ist jetzt nicht so dramatisch, weil ich den Schrittmotor im Moment nur für einen Zeiger verwende. Ich brauche keine Drehmomente und fahre ihn mit entsprechend geringem Strom. Kann man ihn nicht mit dem gleichen Kleber wieder ankleben? Ansonsten verwende ich meine Spange und einen Tropfen Wärmeleitpaste.
  4. Ich habe die Teile heute erhalten und gleich getestet: Der neue Stepper läuft nun einwandfrei in allen (getesteten) Variationen, also auch mit dem alten Master. Wollt Ihr den alten Stepper zurück haben, um nach der Ursache zu suchen zu können? Auch beim neuen Stepper ist der Kühlkörper wieder abgebrochen. Dabei habe ich so aufgepasst ihn möglichst nicht zu berühren. Doch ich bin wohl beim ersten Herausziehen des Steckers doch ganz leicht dagegen gekommen. Jedenfalls war er plötzlich lose. Der Kleber, mit dem der Kühlkörper befestigt ist, haftet nicht am Aluminium. Vielleicht hilft es, wenn man das Aluminium vorher mit eine Feile oder Sandpapier aufraut, um eine größere Oberfläche zu erhalten? Egal, ich habe mir eine Haltespange konstruiert (siehe Foto). Falls jemand Interesse daran hat, ich stelle die Fusion-360-Datei oder eine STL gerne zur Verfügung. ;-)
  5. Oh, danke schön. :-) Ich werde es gleich testen, wenn es ankommt. Da bin ich auch gespannt. ;-)
  6. Mal sehen, ob das funktioniert. :-) Danke für die CAD-Daten, die sind bei solchen Sachen immer eine große Hilfe!
  7. Das müsste ich ausprobieren. Ich bin inzwischen am überlegen, ob ich noch einen Silent Stepper und einen Master bestelle, nur um einen einzelnen Hardwaredefekt sicher ausschließen zu können. Von dem ganzen Umgestecke ist mir jetzt auch noch der Kühlkörper abgegangen. :-( Kann man den mit irgend etwas wieder ankleben? Ansonsten nehme ich Wärmeleitpaste für Prozessoren und eine mit dem 3D-Drucker gedruckten Haltespange. Das müsste ja auch funktionieren.
  8. Auch mit 30 Sekunden ändert sich nichts daran. Ich habe jetzt zusammen mit dem Silent Stepper und dem Master (sonst nichts) dieses Programm benutzt: #!/usr/bin/env python # -*- coding: utf-8 -*- # python 3 HOST = "localhost" PORT = 4223 UID_r = "Ehv" # Change XYZ to the UID of your Rotary Encoder Bricklet 2.0 UID_s = "5VH7xb" # Change XXYYZZ to the UID of your Silent Stepper Brick from tinkerforge.ip_connection import IPConnection from tinkerforge.brick_silent_stepper import BrickSilentStepper from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_rotary_encoder_v2 import BrickletRotaryEncoderV2 from random import * import time alt = 0 Zeitpunkt = time.time() + 10.1 ZeitDiff = time.time() - Zeitpunkt if __name__ == "__main__": ipcon = IPConnection() # Create IP connection re = BrickletRotaryEncoderV2(UID_r, ipcon) # Create device object ss = BrickSilentStepper(UID_s, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd ipcon.set_timeout(30) # Don't use device before ipcon is connected ss.set_motor_current(850) # 800mA ss.set_minimum_voltage(6000) ss.set_step_configuration(ss.STEP_RESOLUTION_64, True) # 1/8 steps (interpolated) ss.set_max_velocity(4000) # Velocity 2000 steps/s # Slow acceleration (500 steps/s^2), # Fast deacceleration (5000 steps/s^2) ss.set_speed_ramping(1000, 1000) ss.set_basic_configuration(1, 250, 10, 1000, 65535, 65534, 65535, 1) #ss.set_basic_configuration(1, 250, 10, 1000, 65535, 65536, 65536, 1) while 1: # Get current count without reset #count = re.get_count(False) Schritte = round(random()*100000)+10000 Richtung = round(random()) Zeit = round(random()*30+1,1) Geschwindigkeit = round(random()*40000)+15000 Beschleunigung = round(random()*40000)+10000 if ZeitDiff <= 0: if Richtung == 1: # Rechts drehen ss.full_brake() ss.enable() # Enable motor power print("Schritte: " + str(Schritte)) if Richtung == 1: print("Richtung: rechts") else: print("Richtung: links") print("Zeit: " + str(Zeit)) print("Geschwindigkeit: " + str(Geschwindigkeit)) print("Beschleunigung: " + str(Beschleunigung) + "\n") ss.set_speed_ramping(Beschleunigung, Beschleunigung) ss.set_max_velocity(Geschwindigkeit) ss.set_steps(Schritte) # Drive „Schritte“ steps forward Zeitpunkt = time.time()+Zeit if Richtung == 0: # Links drehen ss.full_brake() ss.enable() # Enable motor power print("Schritte: " + str(Schritte)) if Richtung == 1: print("Richtung: rechts") else: print("Richtung: links") print("Zeit: " + str(Zeit)) print("Geschwindigkeit: " + str(Geschwindigkeit)) print("Beschleunigung: " + str(Beschleunigung) + "\n") ss.set_speed_ramping(Beschleunigung, Beschleunigung) ss.set_max_velocity(Geschwindigkeit) ss.set_steps(-Schritte) # Drive „Schritte“ steps backward Zeitpunkt = time.time()+Zeit ZeitDiff = Zeitpunkt-time.time() #print("ZeitDiff: "+str(ZeitDiff)) #print(" ") if ss.get_current_velocity() == 0: ss.disable() ZeitDiff = -1 input("Press key to exit\n") # Use input() in Python 3 ss.disable() ipcon.disconnect() Herausgekommen ist nach einer erfolgreichen Bewegung diese Fehlermeldung: Siehe Screenshot. Mit dem BrickViewer 2.4.0 beta2 hängt es sich genau so auf. Das Brick kommuniziert nicht mehr mit dem BrickViewer, aber der Motor läuft unverändert weiter.
  9. ja, das kann ich mir gut vorstellen. Daher habe ich den Aufbau so minimiert, dass der Red Brick verzichtbar ist. Man kann es auch nur mit einem Stepper und einem Master nachbilden, siehe meine Antwort #18 vom 28.02. 20:02 Uhr: « Antwort #19 am: Februar 28, 2019, 20:02:31 » Das werde ich heute mal ausprobieren. Ich werde berichten …
  10. Oh Prima! :-) Und die Displays könnten auch größere Textgrößen haben. So könnte das OLED-Display neben einer Textgröße für 8 Zeilen auch Textgrößen für 4 Zeilen haben, für 3 Zeilen, 2 Zeilen und 1 Zeile. Dann hätte man sehr viel mehr Nutzungsmöglichkeiten. Ich wäre auch bereit die Bitfolgen für die Zeichen zu erstellen. ;-)
  11. Ja, werde ich gleich mal ausprobieren. Nachtrag: Ja, das Problem ist behoben! :-) Ich hatte schon als Kind einen „grünen Daumen“ für alles technische. Und wenn etwas einen Bug hat, dann finde ich ihn schnell. Es gibt Software, wenn ich sie benutze, dann finde ich innerhalb von Minuten ein gutes Dutzend Bugs. :-) Seit einigen Tagen kenne ich auch den Grund für diese Fähigkeit und werde mit diesem Wissen meine Fähigkeiten erweitern können.
  12. Ja, das mache ich gerne. Allerdings sind die ganzen Scripte etwas unaufgeräumt, da ich ständig daran rumgebastelt habe. Falls also dazu Fragen sind, einfach fragen. ;-) (Ist als PM raus, weil da möglicherweise urheberrechtlich geschütztes Material drin ist.)
  13. Es hat funktioniert! :-) Danke sehr! PIL sollte wegen der Displays unbedingt in die Vorinstallation des Red Brick aufgenommen werden. ;-) Und es sollte auch eine Funktion für größere Schriften in die API aufgenommen werden. Mit einer schön großen Schrift sieht das doch gleich viel geiler aus. ;-)
  14. Ah, danke sehr! :-) Werde ich gleich mal ausprobieren. :-) Wegen der Displays und der IR-Kamera wäre es doch gut, wenn PIL zukünftig vorinstalliert wäre, oder?
  15. Ich habe inzwischen Pillow-5.4.1.tar.gz heruntergeladen und auf den Red Brick kopiert. Dann musste ich erst mal herausfinden, wo das Teil liegt, denn die Dokumentation erklärt leider nicht, wo die hochgeladenen Dateien liegen (➢Verbesserungsvorschlag!). Falls das hier ein anderer Anfänger liest: Sie liegen im Userverzeichnis unter „programs“ „Name des Programms“/bin/. In meinem Fall heißt das Programm: OLED_Hello_World. Daraus ergibt sich der Pfad: ~/programs/OLED_Hello_World/bin/ Hier bekommt man das File: Pillow 5.4.1 – Download files Dann habe ich, wie auf der Website beschrieben, tar xvfz Pillow-5.4.1.tar.gz erfolgreich ausgeführt. Nun muss ich aber den Namen der .whl-Datei haben, um pip install … ausführen zu können. Woher bekommt man den?!? Also habe ich mit sudo updatedb die Locate-Datenbank aktualisiert und mit locate ".whl" nach den Wheel-Datein gesucht. Doch eine Wheel-Datei für PIL oder Pillow ist nicht dabei. locate „pil*.whl" bringt ebenfalls kein Treffer. Gemäß der Website sollte aber eine .whl-Datei vorhanden sein oder entstehen. Das ist aber nicht der Fall. :-( pip install Pillow wirft auch jedem menge unverständlicher Fehlermeldungen raus.
  16. Das ist es leider nicht, weil ich keinen WLAN-Stick habe. Ich nutze seit Mitte der 90er Jahre Computer von Apple, und Apple brachte als einer der ersten Hersteller weltweit WLAN ausgestattete Rechner auf den Markt. Seit diesem Zeitpunkt hatte ich nie wieder einen Computer ohne WLAN. Daher gab es für mich auch nie die Notwendigkeit einen WLAN-Stick anzuschaffen. Ich müsste erst einen WLAN-Stick bestellen und mehrere Tage auf die Lieferung warten. Und ich bräuchte ihn auch nur für diesen Zeck, sonst nicht. Nein, ich beziehe mich auf Eure Aussage: „Wenn andere Bibliotheken […] genutzt werden sollen, dann können diese […] mit dem eigenen Programm hochgeladen werden […]“ DAS möchte ich gerne machen. Ich weiß aber nicht wie das geht, das wird nämlich nicht erklärt. Den externen Link schaue ich mir natürlich auch an. Danke dafür. ;-) Vielleicht bekomme ich es ja hin.
  17. „Wenn andere Bibliotheken, wie die Installierten genutzt werden sollen, dann können diese entweder mit dem eigenen Programm hochgeladen werden oder aber mittels apt-get, pip, pear, npm oder ähnlichen Paketmanagern installiert werden.“ (Gefunden: Doku RED Brick) Leider steht da nicht, wie man diese mit dem eigenen Programm hochlädt. Auch eine Suche bei YouTube und Google hat nichts Brauchbares ergeben. Und die Paketmanager, die ich ausprobiert habe, benötigen Internet, welches aber auf dem Red Brick nicht verfügbar ist. Wie installiere ich das nun? Oder wie lade ich diese Bibliotheken hoch?!? Ich habe schon die Programme aus meinem lokalen PIL-Ordner mit meinem Programm hochgeladen. Es hat leider nichts geholfen. Ich bin jetzt völlig gestrandet und weiß nicht mehr weiter. :-(
  18. Hi, ich bin ja noch Python-Anfänger. Ich habe nun ein Script geschrieben, welches PIL verwendet. Übertrage ich es auf den Red Brick erhalte ich die Fehlermeldung: ImportError: No module named 'PIL' Wie bekomme ich denn PIL auf den Red Brick?
  19. Oh, ich habe den Fehler gefunden! :-) Ich hatte irgendwie vergessen die UID zu setzen. Jetzt geht es.
  20. Das Konzept von Callback ist mir noch nicht ganz klar. Ich vermute, dass es sich um so etwas wie einen Interrupt in Assembler handelt, wo ein Vorgang dem Prozessor mitteilt, dass irgendetwas zu tun ist. Aus dem Wort „Callback“ (Rückruf) leite ich ab, dass sich das Modul meldet, wenn es neue Werte zur Abholung bereit hat. Was ich aber nicht verstehe ist der Ablauf. Wo wird hingesprungen, wenn ein Ereignis ansteht? Vielleicht könnte man die Dokumentation um einen Artikel erweitern, der in das Konzept der Callback-Funktion einführt. ;-) Oder besser: macht ganz kurze YouTube-Videos zu all diesen kleinen Dingen, so in der Art der Quick-Look-Videos von pixelfondue, die meist nur wenige Sekunden lang sind: Das hätte sogar den schönen Nebeneffekt, dass Eure Produkte sehr viel bekannter werden und der Umsatz steigt. ;-)
  21. Ich bin in Python ein Newbee! Ich habe früher (80er Jahre) mal BASIC und 6502-Assembler programmiert, später ein bisschen PHP und AppleScript. Was für Bindings? Ich habe mir PyCharm installiert und damit geht das alles. Vielleicht ist das ja auch das Problem bei dem Stepper Brick? Wie kann ich es denn besser machen?
  22. Das Testprogramm soll einen String mit großen Fonts anzeigen. Allerdings laufe ich jetzt in eine andere Fehlermeldung außerhalb meines eigenen Programms. in dem einen Programm funktioniert es, in dem anderen Programm bekomme ich komische Fehlermeldungen. :-( [size=9pt]Traceback (most recent call last): File "/Users/gerhard/PycharmProjects/RedBrick/tinkerforge/ip_connection.py", line 1164, in send_request response = device.response_queue.get(True, self.timeout) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/queue.py", line 178, in get raise Empty _queue.Empty During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/gerhard/PycharmProjects/RedBrick/OLED-Test.py", line 56, in <module> oled.write_pixels(0, 0, WIDTH, HEIGHT, pixels) File "/Users/gerhard/PycharmProjects/RedBrick/tinkerforge/bricklet_oled_128x64_v2.py", line 400, in write_pixels ret = self.write_pixels_low_level(x_start, y_start, x_end, y_end, pixels_length, pixels_chunk_offset, pixels_chunk_data) File "/Users/gerhard/PycharmProjects/RedBrick/tinkerforge/bricklet_oled_128x64_v2.py", line 130, in write_pixels_low_level self.ipcon.send_request(self, BrickletOLED128x64V2.FUNCTION_WRITE_PIXELS_LOW_LEVEL, (x_start, y_start, x_end, y_end, pixels_length, pixels_chunk_offset, pixels_chunk_data), 'B B B B H H 448!', '') File "/Users/gerhard/PycharmProjects/RedBrick/tinkerforge/ip_connection.py", line 1173, in send_request raise Error(Error.TIMEOUT, msg) tinkerforge.ip_connection.Error: Did not receive response for function 1 in time (-1)[/size] Hier das betroffene Programm: #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "localhost" PORT = 4223 UID = "XYZ" # Change to your UID WIDTH = 128 # Columns HEIGHT = 64 # Rows MODE = "1" import sys from PIL import Image, ImageDraw, ImageFont from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_oled_128x64_v2 import BrickletOLED128x64V2 if __name__ == "__main__": ipcon = IPConnection() # Create IP connection oled = BrickletOLED128x64V2(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd # Don't use device before ipcon is connected # Clear display oled.clear_display() image = Image.new(MODE,(WIDTH,HEIGHT)) font = ImageFont.truetype('Menlo.ttc', 28, 1) d = ImageDraw.Draw(image) # get a drawing context d.text((5, 15), "-42,0°C", font=font, fill=(255)) # draw text image_data = image.load() # Convert image to black/white pixels #image = Image.open(image_data) #print("size: "+str(image_data.size[0])) pixels = [] for row in range(HEIGHT): for column in range(WIDTH): print("row: " + str(row)) print("column: " + str(column)) # print(image.size[0]) # print(image.size[1]) # print(image_data[column, row]) if column < image.size[0] and row < image.size[1]: pixel = image_data[column, row] > 0 else: pixel = False pixels.append(pixel) print(pixels) print(len(pixels)) image.show() oled.write_pixels(0, 0, WIDTH, HEIGHT, pixels) input('Press key to exit\n') # Use input() in Python 3 ipcon.disconnect()
×
×
  • Neu erstellen...