Jump to content

All Activity

This stream auto-updates     

  1. Past hour
  2. Oha! Das ist spannend. Ich werde auch anfangen zu testen und euch Feedback geben!
  3. Today
  4. Da würde ich zusammengefasst sagen "Nimm nur das NodeMCU und kauf dir ein HAT Zero Brick ". Das hat die korrekten Trenner/Buffer-Chips und du kannst 4 Bricklets anschließen ohne dass du Breakout Bricklets brauchst. Das HAT hat auch 3,3V Logikpegel, also sollte es am NodeMCU funktionieren. Wenn du das am Arduino machen willst, musst du dann doch etwas basteln: Wir benutzen den 74AHC244 als Trenner-Chip, damit kann man zwei Ports auf einmal verschalten. Der 74AHC125 scheint das Äquivalent dafür zu sein, wenn du nur einen Port brauchst. Du kannst dir die Schaltung vom bald erscheinenden Breakout Bricklet 2.0 ansehen, den ich angehangen habe. Die Schaltung oben links mit dem LD1117 und den CONN_01X03 Jumper kannst du weglassen, wenn du direkt 3,3V und 5V vom Arduino bekommst, für das Breakout Bricklet haben wir das eingebaut, damit man nur 5V einspeisen muss. Die 82Ω Widerstände und die 220pF Kondensatoren brauchst du auch nicht unbedingt. Der Rest sollte auf einem Breadboard aufbaubar sein. Nein. (Bzw. nur ein Isolator Bricklet und dahinter ein anderes) Die Ports sind nicht an die Bricklets gekoppelt: Du musst nur deklarieren, welche Ports es gibt und welcher Pin der zugehörige Chip-Select-Pin ist. Die HAL-Initialisierung fragt dann einmal an allen Ports ab, welche Bricklets angeschlossen sind. Nein, weil du pro Port mehr als ein Bricklet angeschlossen haben kannst. (Im Moment z.B. wenn du ein Isolator Bricklet benutzt) breakout-V2.pdf
  5. Danke - Post #2 mit Source angepasst. Nächster Test: Multiple Bricklets an einem Arduino MEGA & NodeMCU. Fragen dazu (bin kein Elektroniker): Welchen "tri-state buffer chip" wird empfohlen (muß ich bestellen, zB 74HC125)? Erbitte Wiring Beispiel(e) für 2-3 Bricklets? Können an einem Breakout (v1) mehrere Bricklets angeschlossen werden? Wie werden die Ports für die einzelnen Bricklets deklariert? Macht es Sinn bei der Port deklaration auch die Bricklet UID zu definieren?
  6. Yesterday
  7. Brick Viewer scheint da ein Usability Problem zu haben. Du bist nicht der erste, der in letzter Zeit mit dem Connect Knopf Probleme hat. Wir werden das abändern, so dass die Funktion des Connect Knopfes klarer wird.
  8. Nö - sorry ... Nach dem ich das gemacht hab - siehe oben... Also jetzt gehts.... Auf den Trick bin ich garnicht gekommen.... Danke cu Web
  9. Und genau davon hätte ich gerne ein Bild. Wie sieht dein Brick Viewer aus, wenn es nicht funktioniert. Du klickst aber schon auf den großen Connect Kopf, oben in Brick Viewer, so dass sich der Knopf auf Disconnect ändert?
  10. Ich kann nur das zeigen was ich hier bei mir sehe..... Nun hab mich wohl etwas unklar ausgedrückt... sorry. Was ich meinte ist dies (als Beispiel vom GPS Bricklet 2.0 - Ok könnte jetzt auch den CO2 Graph oder einen der anderen o.g. Bricklets aus Eurer Doku posten): Das bekomme ich z.B. nicht zu sehen... Wie schon geschrieben im DatenLogger des aktuellen Brickviewers erscheinen all die Daten des GPS Bricklets 2.0 und werden auch laufend aktuallisiert. Liegts am BV, an den Einstellungen ? Oder ist das generell nicht mehr möglich (wenn ja - solltet Ihr die Beschreibungen in den Dokus mal anpassen ) ? cu Web
  11. Sehr gut, ich habe den Fix mal in Beta 2 gepackt. Der hal_arduino_avr heißt jetzt hal_arduino. Ich habe den HAL hier auch mit einem Teensy (der hat einen ARM-Prozessor) getestet, deshalb die Namensänderung. Das hatte ich übrigens nur so gebaut, damit ich die selbe Demo-Implementierung für die Linux-Demo benutzen kann, der Arduino-Compiler läuft in Linkerprobleme wenn man ein normales Include benutzt weil die demo eine .c, keine .cpp ist.
  12. Funktioniert. Klasse! Danke. Logik angepasst = nur jeweils einmal drücken um LED ON oder OFF zu setzen. Im Anhang die letzte Version. PS: Im Anhang noch ein ino Beispiel wo keine externe Deklarationen verwendet werden = "alles in einem" - wollte mal checken ob direkt aus der ino, Tinkerforge Funktionen aufgerufen werden können. io4ledserial.ino io4ledbtn.c
  13. Teste bitte mal die Version der Bindings im Anhang. Ich glaube ich habe das Problem gefunden. Außerdem habe ich die io4ledbtn.c leicht verändert angehangen, die Signatur deines Callbacks passte nicht ganz: Der erste Parameter ist entgegen der Dokumentation ein Zeiger auf das Device von dem das Callback kam. Das muss ich mal ins README schreiben. Außerdem benutze ich da jetzt den callback_tick und gebe eventuelle Fehler aus. (Nur den Return Code, für die Fehlerbeschreibungen ist der RAM des Unos zu klein) PS: Ich habe gerade keinen Button zur Hand und deshalb nur mit einem Kabel Pin 1 der IO-4 auf Masse gezogen, ist das beabsichtigt, dass man immer zweimal drücken muss, damit die LED an oder aus geht? io4ledbtn.c tinkerforge_uc_bindings_2_0_0_rwblinn.zip
  14. Last week
  15. Hm ich teste das hier gerade auch, habe aber noch nicht gefunden, was genau kaputt ist. Ich melde mich morgen nochmal mit mehr Informationen.
  16. Mir ist unklar was du mit "keine Grafik angezeigt" meinst. Meinst du die Bricks und Bricklets tauchen in Brick Viewer gar nicht auf, oder tauchen die Bricklets auf, aber die Graphen bleiben leer? Kannst du vielleicht einen Screenshot zeigen?
  17. Im Buttonbeispiel, die Loop geändert: void io4ledbtn_loop(TF_HalContext *hal) { tf_io4_v2_callback_tick(&io, 250); // tf_io4_v2_get_value(&io, io_ret_value); // Handle button pressed to set the led state on or off. // The values button_pressed and led_state are set in the button callback io4ledbtn_cb_input_value() if (button_pressed == true){ tf_hal_log_info("LED state set to %s", led_state ? "true" : "false"); tf_io4_v2_set_selected_value(&io, 0, led_state); } } Die Bedingung wird ausgeführt, aber nicht die Function tf_io4_v2_set_selected_value(). Habe verschiedene timeouts probiert. Push-button pressed channel 1. Led state true LED state set to true Übrigens: der Test io4led erfolgreich auf folgende Microcontroller: Arduino UNO, Arduino MEGA, ESP-WROOM-32.
  18. Das hängt vom Bricklet ab. Manche brauchen die 5V, aber bei vielen ist das einfach auf Brickletseite nicht verbunden, weil sie mit 3,3V auskommen. Die Kurzfassung ist du kannst in deinem Buttonbeispiel anstelle von dem tf_io4_v2_get_value(&io, io_ret_value); in der io4ledbtn_loop-Funktion folgendes machen: tf_io4_v2_callback_tick(&io, 250); Das blockiert für 250µs und holt Callbacks ab, ohne dass du unnütz den Getter ausführst. Im Callback selbst hast du // <TODO> This function is not triggered - need to explore why // tf_io4_v2_set_selected_value(&io, 0, led_state); Die Funktion würde nicht ausgeführt werden, weil prinzipiell keine Ausführung von Device-Funktionen in Callbacks erlaubt ist. D.h. das richtige Vorgehen ist, wie du es auch gemacht hast, im Callback nur Informationen zu ändern, die du dann in der Loop benutzt.
  19. Hi, After multiple customer requests to be able to control Bricklets directly with a microcontroller, I've spent the last months creating bindings to be able to do so. The first beta version of the C/C++ bindings for microcontrollers are attached to this post. With them you can control Co-processor bricklets using for example an Arduino over SPI. The bindings are separated in a common implementation and Hardware Abstraction Layers (HALs) for the specific platforms. At this time a HAL for Arduino AVR and ESP32 boards and a HAL for the Raspberry Pi (Zero) with a Hat (Zero) Brick are available. Further information about the interface of the bindings, and on how to implement custom HALs for other boards can be found in the attachment's README file. If you want to test the bindings, you can do so in one of the following ways (sorted by difficulty) You can use the bindings with a Raspberry Pi + a HAT Brick. No Brick Daemon is required in this case. (If a Brick Daemon is already installed, you can disable it with sudo systemctl disable --now brickd A single bricklet can be connected directly to a microcontroller with a 3.3V logic level. The simplest way to connect to the bricklet's signals is by using a Breakout Bricklet. Multiple bricklets can only be used on the same SPI bus with additional hardware. See below. With a bit of wiring, you can use the HAT on an Arduino or other microcontroller with 3.3V logic level: The hat uses the default pins of all Raspberry Pi HATs Attention: The connector is mirroed in the image, as it shows the Pi, not the HAT Brick. The following pins are required: Pin 1: 3,3V Pin 2/4: 5V Pin 6: Ground Pin 19, 21, 23: SPI MOSI, MISO, Clock For the HAT: Pins 16, 15, 22, 13, 37, 18, 26, 31, 29 as chip select pins For the HAT Zero: Pins 13, 16, 18, 15, 22 as chip select pins You can use custom hardware: The Bricklets can be plugged on Breakout Bricklets, but if multiple Bricklets are to be used on the same SPI bus, a tri-state buffer chip must be used, as the Bricklets are not correctly separated from the MISO signal if they are not selected. Details can be found in the README. In the future there will be additional hardware for the bindings: An ESP32 based board on that programs using the bindings can be executed, as well as a new Breakout board that allows connecting multiple Bricklets to a micro controller. Tested hardware +---------------+-------------------+----------------------------------------------+ | Hardware | HAL | Notes | +---------------+-------------------+----------------------------------------------+ | Arduino Uno | hal_arduino | Bricklet logic level is only 3.3V. See above | | NodeMCU ESP32 | hal_arduino_esp32 | Both SPI interfaces are supported | | ESP-WROOM-32 | hal_arduino_esp32 | Thanks to @rwblinn | | Arduino MEGA | hal_arduino | See Uno. Thanks to @rwblinn | | Raspberry Pi | hal_linux | With HAT (Zero) Brick | | Teensy 3.1 | hal_arduino | | +---------------+-------------------+----------------------------------------------+ Cheers, Erik Edit: Beta 2 with the following changes: More callback documentation in the READMEs Renamed hal_arduino_avr to hal_arduino Fixed bug in the state machine when using callbacks tinkerforge_uc_bindings_2_0_0_beta_2.zip
  20. Danke für die weiteren Infos. Fragen dazu: Die 5V werden dann anscheinend nicht benötigt da die Bricklets mit 3V3 auskommen? Habe die 5V Leitung zum Breakout weggelassen (nur 3V3) und die Tests funktionieren, sowohl bei einem Arduino UNO und ESP-Wroom-32. Das mit dem Callbacks habe ich nicht verstanden. Erbitte Beispiel, wo ein Input Signal verarbeitet wird. In meinem Button Beispiel, setzt der Callback nur einen Flag der in der Loop verarbeitet wird.
  21. Hab da das Problem, das ich gernell keine Grafik angezeigt bekomme, egal welches Bricklet (auch nur einzeln) benutzt wird. Lt. Anleitung / Beschreibung sollte das ja gehen. Genutzt werden u.a.: HAT Brick via GPIO Kabel am Raspi 4 Air Quality Bricklet CO2 Bricklet 2.0 GPS Bricklet 2.0 UV light Bricklet 2.0 Outdoor Weather Bricklet desgleichen wenn ein Master Brick verwendet wird. Die Daten Logger Funktion geht aber einwandfrei... Wo liegt mein Fehler ? ps. Der Deamon ist natürlich ebenfalls installiert. cu Web
  22. Moin, Erstmal danke für die Tests! Es überrascht mich etwas, dass der Aufbau funktioniert: Der Arduino Uno hat ein Logik-Pegel von 5V, das Bricklet ist 5V kompatibel, schickt selbst aber nur 3,3V über die MOSI-Leitung. Du hast anscheinend das Glück, dass dein Arduino die 3,3V High-Signale versteht, bei meinem hat das nicht funktioniert. Falls du mit irgendeinem Bricklet keine Antworten bekommst, liegt es vermutlich daran. Zu dem TODO bei deinem Push-Button-Test: Die Callbacks kommennur, wenn du eine Funktion aufrufst, da sonst keine Kommunikation mit dem Bricklet stattfindet. Es gibt aber pro Device eine Callback-Tick-Funktion, z.B. int tf_io4_v2_callback_tick(TF_IO4V2 *io4_v2, uint32_t timeout_us); Die Funktion blockiert für die übergebene Zeit (in Mikrosekunden) und liefert Callbacks aus die reingekommen sind. D.h. wenn du in deiner Loop noch Zeit übrig hast ist es sinnvoll bei allen Bricklets bei denen du Callbacks benutzt die Funktion aufzurufen. Wenn du die ganze Zeit mit dem Bricklet kommunizierst, z.b. bei dir mit get_value, werden die Callbacks dann ausgeliefert, wenn sie während des getters reinkommen. Die Tick-Funktion werde ich mal im Readme dokumentieren. Eventuell kommt noch eine allgemeinere Tick-Funktion, die alle Bricklets mit registrierten Callbacks tickt. Gruß, Erik Edit: Was mir noch aufgefallen ist: In deinem Callback-Handler hast du einen auskommentierten Funktionsaufruf auf dem IO4 Bricklet. Die Bindings unterstützen es aber nicht, aus einem Callback heraus wieder Funktionen aufzurufen, da ein Callback auch mitten in einem anderen Funktionsaufruf ankommen kann.
  23. Danke für die Bindings = sehr gut. Erste Tests = Verbesserungen willkommen Aufbau Arduino UNO <-> Tinkerforge Breakout Bricklet V1 <-> Tinkerforge IO4 Bricklet V2 <-> LED & Push-Button. Tests LED 10x blinken (io4led) Push-button LED an | aus (io4ledbtn) Im Anhang: Beschreibung (PDF, En), Source Code. tf-microcontroller-example.zip
  24. Moin, Nachdem es in letzter Zeit häufiger Kundenanfragen danach gab, Bricklets direkt mit einem Mikrocontroller zu verwenden, habe ich die letzten Monate entsprechende Bindings entwicklet. Die erste Beta der C/C++ Bindings für Mikrocontroller, mit denen Koprozessor-Bricklets direkt von z.B. einem Arduino über SPI gesteuert werden können, finden sich im Anhang. Die Bindings sind in eine allgemeine Implementierung und einen Hardware Abstraction Layer (HAL) für konkrete Plattformen unterteilt. Es gibt zur Zeit einen HAL für Arduino-AVR-Boards, einen für ESP32-Boards wie das NodeMCU und einen für das Raspberry Pi (Zero) + HAT (Zero). Details zum Interface, zur Implementierung eigener HALs für andere Boards usw. finden sich im Readme im Anhang. Falls ihr die Bindings testen wollt, gibt es im Moment folgende Möglichkeiten (sortiert nach Schwierigkeitsgrad): Man kann die Bindings wie erwähnt mit einem Raspberry Pi + HAT verwenden, dann wird kein Brick Daemon benötigt. (Falls ein Brick Daemon installiert ist kann dieser mit sudo systemctl disable --now brickd deaktiviert werden) Ein einzelnes Bricklet kann an einem Mikrocontroller mit 3,3V Logikpegel direkt verwendet werden. An die Signale des Bricklets kommt man am einfachsten mit einem Breakout Bricklet. Mehrere Bricklets an einem SPI-Bus funktionieren aufgrund eines Bugs im Bricklet-Koprozessor nicht ohne Zusatzhardware, siehe den Abschnitt über eigene Hardware. Mit etwas freischwebender Verkabelung kann ein HAT auch an einem Arduino oder anderem Mikrocontroller mit 3,3V Logikpegel verwendet werden: Das HAT verwendet die Standard-Pinbelegung aller Raspberry Pi HATs Achtung: Im Bild ist diese gespiegelt, weil sie die Belegung des Pis, nicht des HATs ist. Es werden folgende Pins benötigt: Pin 1: 3,3V Pin 2/4: 5V Pin 6: Masse Pin 19, 21, 23: SPI MOSI, MISO, Clock Für das HAT: Pins 16, 15, 22, 13, 37, 18, 26, 31, 29 als Chip Select Pins Für das HAT Zero: Pins 13, 16, 18, 15, 22 als Chip Select Pins Es kann vollständig eigene Hardware verwendet werden. Die Bricklets können an Breakout Bricklets angeschlossen werden, es muss aber, wenn mehrere Bricklets an einem SPI-Bus verwendet werden sollen, ein vom Chip-Select gesteuerter Trenner-Chip verwendet werden, da die Bricklets die MISO-Leitung auch treiben, wenn sie nicht selected sind. Im Readme finden sich Details dazu. Künftig wird es von uns eigene Hardware für die Bindings geben, sowohl ein ESP32-basiertes Board auf dem Programme, die die Bindings verwenden geflasht werden können, als auch ein neues Breakout Board, mit dem Koprozessor-Bricklets direkt mit einem Mikrocontroller verbunden werden können. (hier ein Teaser) Bisher getestete Hardware +===============+===================+====================================================+ | Hardware | HAL | Notizen | +===============+===================+====================================================+ | Arduino Uno | hal_arduino | Bricklet-Logik-Pegel beträgt nur 3,3V, siehe oben. | +---------------+-------------------+----------------------------------------------------+ | NodeMCU ESP32 | hal_arduino_esp32 | Beide SPI-Schnittstellen werden unterstützt | +---------------+-------------------+----------------------------------------------------+ | ESP-WROOM-32 | hal_arduino_esp32 | Danke an @rwblinn | +---------------+-------------------+----------------------------------------------------+ | Arduino MEGA | hal_arduino | Siehe Uno. Danke an @rwblinn | +---------------+-------------------+----------------------------------------------------+ | Raspberry Pi | hal_linux | Mit HAT (Zero) Brick | +---------------+-------------------+----------------------------------------------------+ | Teensy 3.1 | hal_arduino | | +---------------+-------------------+----------------------------------------------------+ Gruß, Erik Edit: Beta 2 mit folgenden Änderungen: Mehr Callback-Dokumentation in den READMEs hal_arduino_avr in hal_arduino umbenannt Bugfix für die State-Machine der bei Callback-Verwendung auftrat tinkerforge_uc_bindings_2_0_0_beta_2.zip
  25. Habe es jetzt noch einmal getestet; mit 2.4.13 passiert das nicht mehr. Da habe ich letzte Woche das neue, drei Tage alte Release wohl übersehen. Dankeschön!
  26. Earlier
  27. Hi Paul, bitte melde dich per Mail bei uns. Wir können dir eine WIFI 2.0 zum Testen zur Verfügung stellen. VG Bastian
  28. Das Monstrum wächst. Muss mal bei Gelegenheit einen Bericht verfassen. Inzwischen habe ich verbaut: 4 ServoBricks 2 Master 1 IMU v2 1 RED Brick 6 Moisture Sensoren 9 IO16 1 RS232 1 GPS v2 Das Schiff misst seinen Tiefgang, den Inhalt von 4 Ballasttanks. Hat einen echten Echosounder zum Tiefe messen, Flossensteuerung über die Lage und vieles mehr. Macht echt Spaß das mit Tinkerforge zu entwickeln. Angesteuert wird über ein Tablet mit Gaming-Case als Fernbedienung.
  29. Moin, ipcon.connect blockiert bis entweder die Verbindung aufgebaut ist oder ein Fehler auftritt. Folgende Dinge fallen mir am Code auf: Das "if __name__ == "__main__":" kannst du dir an der Stelle sparen, du bist da ja schon mitten im Programm. Wenn du dir die IPConnection weiter außen hältst, musst du nicht jedes Mal eine neue Verbindung aufbauen, wenn du einen Temperaturwert abfragen willst get_temperature() kann (wie fast alle anderen Funktionen der Bricks/Bricklets auch) Timeouts erzeugen, wenn aus irgendeinem Grund die Abfrage länger als (falls nicht umkonfiguriert) 2,5 Sekunden dauert. Je nachdem was sonst noch auf dem System passiert, kann das durchaus passieren. Am besten ist es, wenn du den Fehler fängst und behandelst, im einfachsten Fall probierst du es einfach nochmal, bis z.b. 5 Versuche nicht geklappt haben. Das kann z.b. so aussehen: from tinkerforge.ip_connection import Error # 3 Versuche, danach geben wir auf for i in range(3): try: temp = thermocouple.get_temperature() # Wenn der Aufruf geklappt hat, verlasse die Schleife break except Error as e: if e.value != Error.TIMEOUT: # Wenn der Fehler kein Timeout war wird er zum Aufrufer weitergegeben. raise e else: # Das else einer for-Schleife wird ausgeführt, wenn kein break in der Schleife getroffen wurde # Das heißt in diesem Fall, dass alle 3 Versuche Timeouts erzeugt haben print("Konnte Temperatur nicht abfragen") Damit du das nicht bei jedem Aufruf machen musst, kannst du dir das wie folgt in eine Funktion packen: from tinkerforge.ip_connection import Error def attempt_n_times(fn, name, attempts): for i in range(attempts): try: return fn() except Error as e: if e.value != Error.TIMEOUT: raise e print("Konnte {} nicht ausführen: {} Timeouts".format(name, attempts)) return None temp = attempt_n_times(thermocouple.get_temperature, "Temperaturabfrage", 3) attempt_n_times(lambda: thermocouple.set_configuration(16, 3, 0), "Thermocouple-Konfiguration", 3) Achtung: Das sind Codebeispiele für das Thermocouple Bricklet, das musst du noch auf das Temperature 2.0 oder PTC 2.0 Bricklet anpassen. Du scheinst ja beide zu benutzen. Warum die Timeouts bei dir manchmal gehäuft auftreten ist mir spontan nicht klar. Eventuell stört dein TK-Schrank die Signale? Gruß, Erik
  1. Load more activity
×
×
  • Create New...