Jump to content

techniker

Members
  • Gesamte Inhalte

    32
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von techniker

  1. Mir ist aufgefallen dass das Energy Monitor Bricklet bei einer Netzfrequenz von 50 Hz ca. 0.2 Hz zu wenig anzeigt, also 49.8 Hz. Wo könnte da der Fehler liegen? Beste Grüsse Sven
  2. Vielen Dank für das Beispiel :-) https://download.tinkerforge.com/bindings/uc/tinkerforge_uc_bindings_2_0_4.zip im ZIP hat sich nichts verändert ausser beim Dateidatum, die ESP32 Files fehlen weiterhin. Beste Grüsse Sven
  3. Hallo Zusammen Ist es möglich die Bricklets in der Konsolenausgabe im Klartext auszugeben. Also den Typencode dem entsprechendem Namen zuzuordnen. Weiter ist mir noch aufgefallen das bei den Bindings Downloads auf der Tinkerforgeseite beim ESP32 Brick die Headerdatei und die *.c Datei fehlen. hal_arduino_esp32_brick.c und hal_arduino_esp32_brick.h! Beste Grüsse Sven
  4. Hallo Thomas Vielen Dank, ich hab jetzt mal Chatgpt bemüht und es ist sogar was lauffähiges dabei rausgekommen. Da ich ja TTF Fonts Rendern will ist es mit deinem Code leider nicht zu vergleichen. Aber vielen herzlichen Dank. :-) Gruss Sven
  5. Hallo Zusammen Gibt es einen Beispielcode? Dies wäre für die Community viel wertvoller als Bilder ;-) Grüsse Sven
  6. Hallo Zusammen gibt es irgendwo ein Beispiel um mit dem ESP32 einen Font zu laden und diesen dann mit dem E-Paper 296x128 Bricklet zu benutzen? Ganz generell die Verwendung der libgd auf dem ESP32? Beste Grüsse Sven
  7. okey alles klar, &ret_value :-) und schon gehts. Beste Grüsse
  8. Danke für den Tip, gibt es eine Beispiel wie ein ret_value in eine Variable zu schreiben ist?
  9. Hallo Zusammen Ich habe ein Problem mit dem Segment Display 4x7 Bricklet 2.0 mit dem ESP32, FW vom Bricklet 2.0.1. Dieses gibt mir beim laufenden Zähler mit tf_segment_display_4x7_v2_get_counter_value immer nur eine 0 zurück, statt den korrekten Wert. Freundliche Grüsse Sven
  10. Nochmals eine Frage: Kann man in Python 3 die Bedingungen gleicher Logik z.B != mit mehreren Variablen vergleichen, also in einer Kurzform anstatt diverse "nicht gleich" hintereinander zu schreiben. So das self.sw.get_color() nur einmal aufzuführen ist. "and self.sw.get_color() != [red, green...." geht eben nicht. if self.ping(self.HOST_Controller) == False and self.sw.get_color() != [red, green, purple] self.sw.set_color(*blue) elif self.ping(self.HOST_Controller) == True and self.sw.get_color() != red and self.sw.get_color() != green and self.sw.get_color() != purple:
  11. Danke vielmals, genau dass was ich gesucht habe.
  12. Sehr geehrtes Tinkerforge Team Ich benötige kurz Hilfe für den Python 3 Syntax um ein Tuple oder eine Liste an eine Methode zu übergeben. Beispiel: red = (30, 0, 0) self.sw.set_color(red) wie muss das Tuple red auseinander genommen werden um akzeptiert zu werden? Beste Grüsse Sven
  13. Ab wann kann in ca. mit dem ESP32 Board gerechnet werden?
  14. Danke für die ausführliche Erklärung.
  15. Hier mal noch ein Zwischenstand. Das AirQuality Bricklet dient nur mal als Datenlieferant. Denkbar sind diverse Anwendungen um Werte oder ein Balkendiagramm anzuzeigen. Der Timer kann auf 1000 gesetzt werden. Sobald dieser erreicht ist wird ein Refresh ausgelöst. default mode > fill.black > draw > delta mode, evtl. auch die Farbe rot möglich je nach Einbrenn-Problematik was sich noch zeigen wird. Beste Grüsse
  16. Abend, Vielen Dank für das Code Beispiel. Obwohl ich bei der Formel [y * WIDTH + x] nicht recht verstehe was die macht. Gibt es en Vorteil zu der append Funktion? Evtl. die Geschwindigkeit? Ich hab beide versucht und kein offensichtlicher unterschied feststellen können. z.B. dies hier: def draw_image(self, WIDTH, HEIGHT, image): data = image.load() pixels_matrix = [] for x in range(HEIGHT): for y in range(WIDTH): pixels_matrix.append(data[y, x] != 0) self.ink.write_black_white(0, 0, WIDTH-1, HEIGHT-1, pixels_matrix)
  17. Hallo Zusammen Ich hab echt den Filmriss. Wie kann ich auf dem E-Paper einen Wert mit einem TrueType Font Zeichnen? Ich hab da mal das alte Oled Servo Beispiel angeschaut. Diese API hat allerdings noch eine Funktion new_window... darum gehts nicht zu adaptieren. Beim neuen Oled Blicklet 2.0 gibt es das Servo Beispiel leider nicht mehr. Dort wurde auch die API eher in die Richtung des E-Ink Bricklet entwickelt. Hier mal eine Codevariante die natürlich nicht läuft weil ich die Daten nicht in den E-Ink Buffer bekomme. Vielleicht kann mir jemand helfen. Natürlich müss später noch die Aktualisierung gelöst werden. z.b schwarz überschreiben.. aber das kommt später. #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "localhost" PORT = 4223 UID = "Lww" # Change XYZ to the UID of your E-Paper 296x128 Bricklet WIDTH = 296 # Columns HEIGHT = 128 # Rows from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_e_paper_296x128 import BrickletEPaper296x128 from PIL import Image, ImageDraw, ImageFont import math import time def draw_matrix(pixels): column_index = 0 column = [] for i in range(HEIGHT//8 - 1): # We use last 8 pixels for text for j in range(WIDTH): page = 0 for k in range(8): if pixels[i*8 + k][j] == 1: page |= 1 << k if len(column) <= column_index: column.append([]) column[column_index].append(page) if len(column[column_index]) == HEIGHT: column_index += 1 epaper.write_black_white(0, 0, WIDTH-1, HEIGHT-1, pixels) if __name__ == "__main__": ipcon = IPConnection() # Create IP connection epaper = BrickletEPaper296x128(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd while True: img = Image.new('1', (WIDTH, HEIGHT), 0) draw = ImageDraw.Draw(img) font = ImageFont.truetype("DejaVuSans.ttf", 25) draw.text((70, 22), "test", font=font, fill=1) data = img.load() pixel_matrix = [[False]*WIDTH for i in range(HEIGHT)] for x in range(WIDTH): for y in range(HEIGHT): pixel_matrix[y][x] = data[x, y] == 1 draw_matrix(pixel_matrix) epaper.draw() time.sleep(0.04) hier ein lauffähiger Code, falls jemand ein ähnliches Problem hat. #!/usr/bin/env python # -*- coding: utf-8 -*- import time import logging as log log.basicConfig(level=log.INFO) from PIL import Image, ImageDraw, ImageFont from tinkerforge.ip_connection import IPConnection from tinkerforge.ip_connection import Error from tinkerforge.bricklet_e_paper_296x128 import BrickletEPaper296x128 from tinkerforge.bricklet_air_quality import BrickletAirQuality class AirQuality: HOST = "localhost" PORT = 4223 ipcon = None ink = None air_quality = None def __init__(self): self.ipcon = IPConnection() self.t = 0 self.h = 0 self.p = 0 self.ii = 0 self.ia = "" self.i = -7 self.init = True self.image = 0 self.WIDTH = 296 # Columns self.HEIGHT = 128 # Rows self.color = 0 while True: try: self.ipcon.connect(AirQuality.HOST, AirQuality.PORT) break except Error as e: log.error('Connection Error: ' + str(e.description)) time.sleep(1) except socket.error as e: log.error('Socket error: ' + str(e)) time.sleep(1) self.ipcon.register_callback(IPConnection.CALLBACK_ENUMERATE, self.cb_enumerate) self.ipcon.register_callback(IPConnection.CALLBACK_CONNECTED, self.cb_connected) # Enumerate Bricks and Bricklets (retry if not possible) while True: try: self.ipcon.enumerate() break except Error as e: log.error('Enumerate Error: ' + str(e.description)) time.sleep(1) def draw_image(self, ink, start_column, start_row, column_count, row_count, image): image_data = image.load() pixels = [] # Convert image pixels into 8bit pages for row in range(row_count): for column in range(column_count): pixels.append(image_data[column, row] != 0) self.ink.write_black_white(0, 0, self.WIDTH-1, self.HEIGHT-1, pixels) def cb_all_values(self, iaq_index, iaq_index_accuracy, temperature, humidity, air_pressure): if self.init == True: self.color = 1 self.image = Image.new("1", (self.WIDTH, self.HEIGHT), 0) self.draw = ImageDraw.Draw(self.image) self.font = ImageFont.truetype("DejaVuSans.ttf", 60) self.ink_refresh() self.init = False elif self.color == 1: self.t = temperature/100 self.draw.text((70, 22), str(self.t), font=self.font, fill=self.color) self.draw_image(self.ink, 0, 0, self.WIDTH, self.HEIGHT, self.image) if self.ink.get_draw_status() == self.ink.DRAW_STATUS_IDLE: self.ink.draw() if self.color == 1: self.color = 0 elif self.color == 0: self.color = 1 def ink_refresh(self): self.ink.set_update_mode(self.ink.UPDATE_MODE_DEFAULT) self.ink.fill_display(self.ink.COLOR_BLACK) self.ink.draw() time.sleep(5) self.ink.set_update_mode(self.ink.UPDATE_MODE_DELTA) def cb_enumerate(self, uid, connected_uid, position, hardware_version, firmware_version, device_identifier, enumeration_type): if enumeration_type == IPConnection.ENUMERATION_TYPE_CONNECTED or \ enumeration_type == IPConnection.ENUMERATION_TYPE_AVAILABLE: if device_identifier == BrickletEPaper296x128.DEVICE_IDENTIFIER: try: self.ink = BrickletEPaper296x128(uid, self.ipcon) log.info('Ink Display initialized') except Error as e: log.error('Ink Display init failed: ' + str(e.description)) self.ink = None elif device_identifier == BrickletAirQuality.DEVICE_IDENTIFIER: try: self.air_quality = BrickletAirQuality(uid, self.ipcon) self.air_quality.set_all_values_callback_configuration(500, False) self.air_quality.register_callback(self.air_quality.CALLBACK_ALL_VALUES, self.cb_all_values) log.info('Air Quality initialized') except Error as e: log.error('Air Quality init failed: ' + str(e.description)) self.air_quality = None def cb_connected(self, connected_reason): # Eumerate again after auto-reconnect if connected_reason == IPConnection.CONNECT_REASON_AUTO_RECONNECT: log.info('Auto Reconnect') while True: try: self.ipcon.enumerate() self.ink_refresh() break except Error as e: log.error('Enumerate Error: ' + str(e.description)) time.sleep(1) if __name__ == "__main__": print ("Start") refresh = 1000 x = 18 z = 7 y0 = 8 y1 = 128 y = range(y0, y1, int(round((y1-y0)/z,0))) w = AirQuality() time.sleep(0.1) while True: time.sleep(0.1)
  18. Hallo Erik Ja dass das Script noch mehr Probleme beinhaltet hab ich im Anschluss an mein Versuch auch herausgefunden. Ich habs ohne Docker zum laufen gebracht. Auszug aus der angepassten build_environment_setup.sh / Änderungen > mono_devel und siehe unten Bemerkung: Das die Sphinx Leute immer mal was ändern müssen, der "SmartyPantsHTMLTranslator" ist seit der Version 1.6 nicht mehr enthalten! ..... sudo apt-get -y install build-essential mono-complete mono-devel python3 perl default-jre default-jdk nodejs npm php-pear ruby zip curl ..... # Install pip and sphinx 1.5.6, pyenchant, sphinxcontrib.spelling cd ~/Downloads/ curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py sudo python2 get-pip.py pip2 install sphinx==1.5.6 pip2 install pyenchant pip2 install sphinxcontrib.spelling==1.4 # Generate Bindings and Copy examples to documentation cd ~/tf/generators/ python3 generate_all.py python3 copy_all.py ...... mit Docker hatte ich mal ein Versuch unternommen, aber ich habs dort gem. Dok. docker pull tinkerforge/build_environment_c ausgeführt. Dort fehlt das docker image für die doc-Git, _full kam mir nicht in den sinn. Danke für den Hinweis. Grüsse Sven
  19. Bin dem Problem auf der Spur. Scheint ein Python Versionsproblem zu sein. Im Script wird oben ja Python2 und später noch Python3 installiert. Für die generate wird sicher mal Python3 benötigt aber leider lautet der Aufruf auf python! So kanns nicht gehen. Ausser man referenziert python als python3 > eher unüblich. Jetzt lasse ich mal das Script laufen, abwarten. Vielen Dank für den Wink mit dem generate_all.py # Generate Bindings and Copy examples to documentation cd ~/tf/generators/ python generate_all.py > python3 python copy_all.py > python3 # Install additional pygments lexers cd ~/tf/doc/pygments-mathematica/ sudo python setup.py install cd ~/tf/doc/pygments-octave-fixed/ sudo python setup.py install # Generate doc cd ~/tf/doc/ make html # Generate brickv GUI cd ~/tf/brickv/src/ python build_all_ui.py
  20. Das Erstellen einer lokalen Dokumentation funktioniert nicht. zuvor wurde natürlich die build_environment_setup.sh ausgeführt. make html ergibt diese Rückmeldung make[1]: Verzeichnis „/home/gus/tf/doc/de“ wird betreten python ../generate_tables.py Traceback (most recent call last): File "../generate_tables.py", line 12, in <module> from device_infos import DeviceInfo, brick_infos, bricklet_infos ImportError: No module named device_infos make[1]: *** [Makefile:34: generate] Fehler 1 make[1]: Verzeichnis „/home/gus/tf/doc/de“ wird verlassen Weiss jemand wie dies zu beheben ist? Beste Grüsse
  21. Mir gelingt es nicht den Toolchain zu bauen. Die README.rst bezieht sich noch auf die SDK 1.5.3 Ihr benutzt aber doch die 2.0.0 ich wollte diese benutzen aber die Patches scheinen nicht zu funktionieren. gus@VMxubuntu:~/tf/wifi-v2-extension/software$ patch -b -N -d ../toolchain/esp-open-sdk/sdk/include -p1 < esp8266sdk-c_types.patch patching file c_types.h Hunk #1 FAILED at 6. 1 out of 1 hunk FAILED -- saving rejects to file c_types.h.rej gus@VMxubuntu:~/tf/wifi-v2-extension/software$ Der make Aufruf endet mit: espfs/espfs.c:244:4: error: implicit declaration of function 'heatshrink_decoder_poll' [-Werror=implicit-function-declaration] heatshrink_decoder_poll(dec, (uint8_t *)buff, len-decoded, &rlen); ^ espfs/espfs.c:244:43: error: expected expression before ')' token heatshrink_decoder_poll(dec, (uint8_t *)buff, len-decoded, &rlen); ^ cc1: all warnings being treated as errors Makefile:220: die Regel für Ziel „build/espfs/espfs.o“ scheiterte make[1]: *** [build/espfs/espfs.o] Fehler 1 make[1]: Verzeichnis „/home/gus/tf/wifi-v2-extension/toolchain/libesphttpd“ wird verlassen Makefile:139: die Regel für Ziel „buildlibesphttpd“ scheiterte make: *** [buildlibesphttpd] Fehler 2 gus@VMxubuntu:~/tf/wifi-v2-extension/software$ Frage wäre es vielleicht möglich das Ihr euer Toolchain gepackt als zip unter http://download.tinkerforge.com/ als download bereitstellt? Dies könnte viel mühe ersparen der PATH müsste dann nur noch gesetzt werden.
  22. Ist das verhalten des build scripts normal das dies mit dem Temperatur Brick endet? Meine Offline Doku hat eben auch keine Web-Elemente mehr sondern ist Weiss und beinhaltet eigentlich nur Text. Früher war mal die offline Doku vom aussehen her gleich wie eure online Version? Beste Grüsse Sven
  23. Hallo Zusammen Ich wollte mich mal mit dem Firmware Erstellung beschäftigen. Leider bekomme ich beim make Aufruf eine Fehlermeldung das im toolchain die mesh.h nicht gefunden werden kann. Muss ich die SDK 2.1 noch irgendwo zu Verfügung stellen? Andere Firmware z.B. vom Master kann ich ohne Probleme bauen. Beste Grüsse Sven
  24. Hallo Zusammen Also ich stehe vor dem gleichen Problem das die TCP Funktions ID: 99 die LED der Wifi 2.0 Ext. nicht einschaltet. Sondern scheinbar sogar ausschaltet wie die Funktions ID: 100. Könnte da ein Firmwarefehler der Grund sein? Ich hab noch keine Zeit gehabt selbst danach zu suchen. Beste Grüsse Sven
  25. Also, ich hab da bei mir eine Lösung gefunden. Das Problem ist dass aus welchem Grund auch immer, der TCP Ausgangs Buffer Daten enthält sobald eine TCP Verbindung hergestellt wird. Darum mache ich ein Connect und Lese den Buffer, beim Lesen wird dieser gelöscht, anschliessend kann ich mit der Funktion 254 die einzelnen Module abfragen ohne doppelte Einträge zu bekommen. TCPClient.Connect; TCPClient.IOHandler.ReadBytes(rxBuf, -1, False); Beste Grüsse und viel Erfolg
×
×
  • Neu erstellen...