DLL Datei mit Arduino erstellen und via Bluetooth versenden

If you want me to translate the following text into english, please tell me in the comments

Einen wunderschönen guten Tag liebe Damen und Herren,

ich habe folgendes Problem und hoffe auf Hilfe :slight_smile:

Hintergrundinformationen:
Ich absolviere gerade meine Fortbildung zum staatlich geprüften Techniker für Elektrotechnik auf Abendschule. Teil des Technikers ist es ein Technikerprojekt in einer beliebigen Firma durchzuführen um Projektmanagement und Eigenverantwortlichkeit zu schulen.
Meine Gruppe hat folgende Aufgabe bekommen:
Entwickelt eine "Maschine" welche die Länge einer Leitung misst, das gemessene Ergebnis in eine DLL-Datei packt und dann via Bluetooth an einen Laptop versendet.
Ich möchte nicht zu sehr ins Detail gehen, weil ich eigentlich so eine Einverständniserklärung unterschrieben habe nicht darüber zu reden ... Außerdem bin ich etwas paranoid bei dem Thema..

Eckdaten & zu benutzende Module:

  • Microcontroller (Arduino NANO - ATMEGA 328p)
  • Bluetooth (Wir haben uns für ein HC05 Modul entschieden.. dazu später mehr)
  • Laptop mit Windows 10
  • Programmiersoftware Atmel Studio 7 (Wird in der Schule verwendet, deswegen haben wir uns dafür entschieden... entgegen meiner eigenen Meinung)

Problem:
Die Messeinrichtung, Stepmotor-Ansteuerung, Bluetooth-KOPPLUNG steht alles soweit. Jetzt geht es um die DLL-Datei.
Da mein Fachwissen in der IT-Branche eher eingeschränkt ist, habe ich Rat bei unseren ITlern gesucht, welche mir folgendes mitgeteilt haben.

  • DLL für diesen Zweck (eine Zahl übermitteln) völlig ungeeignet
  • Bluetooth-Modul nicht fähig Dateien zu versenden, weil nicht OBEX oder FTP fähig
  • Rechenleistung und Speicher des Arduino zu gering

Problem ist, dass die Firma zwingend eine DLL-Datei benötigt, um die Daten im späteren Verlauf (nicht mehr unsere Aufgabe) weiterzuverwenden.
Daher meine Frage an euch... Wie bekomm ich das trotzdem noch hin :smiley: ?
Irgendetwas wurde mir auch erzählt, dass kein Compiler für den Arduino existiert, der DLL-Dateien erstellen kann (da beginnt es bei mir so langsam, dass ich nur noch "Bahnhof" verstehe)

Unser "Lösungsversuch":
So wie ich das verstanden habe, "verbindet sich das Bluetooth-Modul mit einem COM-Port am PC", welcher dann seriell ausgelesen werden kann. Wenn ausgelesen --> DLL auf PC erstellen und fertig.
Gibt es eine schönere, bessere, leichtere Methode?

Für eventuelles technisches Missverständnis meiner seits entschulde ich mich... Das ist für mich absolutes Neuland und elektrisch bin ich leider auch nicht der Künstler :smiley:

Bei weiteren Fragen stehe ich gerne zur Verfügung.

Hi sueppchen,
also grundsätzlich kann jeder seine Dateiendung nahezu frei wählen.
Wenn ich der Meinung bin, dass ich meiner Text-Datei die Endung *.exe geben möchte, kann ich das tun.
Jedoch wird nahezu jedes Betriebssystem von einer ausführbaren Programm-Datei ausgehen und diese nicht mit einem Texteditor öffnen, sondern einen Fehler werfen.
Genauso bei einer DLL. Diese wird als Dynamic Link Library - Klassenbibliothek behandelt und darin wiederverwendbarer, kompilierter Code erwartet.

Hat die Firma nun also ein Programm, welches die DLL als Textdatei interpretiert, wird das funktionieren. Ist unüblich eine allgemeingültige Dateiendung für andere Anwendungsfälle wiederzuverwenden, klappt aber!

Bleibt also die Erstellung dieser Datei:
Richtig ist, dass Bluetooth das nicht kann. Daher benötigst Du eine Anwendung auf dem Computer, die die Daten empfängt und sich um die Generierung der Datei kümmert.
Dazu kannst Du das HC-05 verbinden und mit einem COM-Port verknüpfen. So ist es möglich mit einer seriellen Schnittstelle Daten zu empfangen.
Womit Du nun dieses Programm erstellst (C, C++, C#, Python, Java, etc.), bleibt natürlich Dir überlassen.

Moin,

ich bedanke mich für die schnelle Antwort!

Eigentlich erübrigt sich die nächste Frage, wenn der Arduino gar nicht fähig ist, solch eine Datei zu erstellen... Aber wüsstest du zufällig ein Modul, was OBEX bzw FTP fähig ist und auf 5V läuft?

Ich suche mir nämlich die Finger wund ...

Der Aufgabensteller sollte sich sein Lehrgeld zurückgeben lassen und die Finger von sinnlosen Aufgabenstellungen in der Weiterbildung lassen.
Evtl. sollte er sich mal darüber informieren, was eine DLL ist.

Gruß Tommy

Nur weil du eine Datei "xyz.dll" nennst, kann kein anderer diese verwenden, wenn nicht mehr und genaueres vereinbart wurde. Im Gegenteil, sollte jeder sich hüten, eine Datei namens xyz.dll oder .exe von Fremden anzunehmen.
Und eine windows-dll mit der Funktionalität einer Dynamic Link Library per arduino zu erzeugen ist selbst im trivialen Fall (z.B. dass diese nur eine Variable Konstante definiert) nicht vorgesehen.

Völlig richtig.

Zur fachlichen Qualifikation gehört auch, sich zu weigern, unsinnige Anforderungen zu erfüllen bzw. solches zu versprechen.

Ich glaube eher, dass hier ein Missverständnis vorliegt,
was die Aufgabe und Übergabeschnittstelle angeht.

Hallo Whandall,

leider nicht!
Die oben beschriebene Aufgabe wurde so besprochen und im Lasten- und Pflichtenheft verschriftlicht/unterschrieben.

@michael_x Da stimme ich dir voll und ganz zu, hilft mir nur leider jetzt nicht mehr. Die ganze Geschichte ist mir aber eine Lehre gewesen

Nicht so clever etwas zu unterschreiben von dem man keine Ahnung hat.

Das nützt ja so oder so nichts.
Du wirst definitiv ein Programm brauchen, welches diese Datei erstellt oder zumindest entgegennimmt.
Im Falle von FTP musst Du einen FTP-Server installieren. Diesen dann im Netzwerk entsprechend freigeben. Dann noch ggf. Berechtigungen hinzufügen und einen Job erstellen, der die Datei dann in das entsprechende Verzeichnis für das ominöse dll-Programm kopiert.
Dann könntest Du z.B. mit einem ESP8266 oder ESP32 per WiFi Dateien dort hin schreiben.
Aber Achtung : Arduino & ESP unterscheiden sich von 5V zu 3,3V an den Ein- & Ausgängen. Daher wäre noch ein Pegelwandler von Nöten.

OBEX (Object Exchange) ist in der Tat ein Dateiaustausch, der von Bluetooth adaptiert wurde.
Jedoch muss der Empfang von so einer Datei am Computer initiiert werden. Was ebenfalls wieder ein Programm (oder manuellen Eingriff eines Mitarbeiters) erfordert.

Egal wie Du es drehst und wendest, Du wirst um ein Programm nicht herumkommen, welches auf dem PC läuft, wo die Datei landen soll.
Und da ist imho von den genannten Varianten die einfachste, sich selbst ein Programm/Dienst zu schreiben, der die Rohdaten vom Arduino entgegen nimmt und die Datei erstellt.

Schreib doch eine dll, welche eine Funktion enthält, die eine Serielle Verbindung zum Arduino aufmacht und diesen nach den Daten fragt. Die kann der Kunde dann in sein System einbinden.
In dieser Lösung kommt immerhin das Wort dll vor. :stuck_out_tongue:

Davon hätte ich sogar unzählige DLL´s fertig hier liegen :rofl:
Nutze ich für meinen ECU-Emulator, um meinen OBD2 Dongle zu testen.
Oder um eine Schnittstelle zu Waagen herzustellen.
Und meinen zweiten Arbeitsrechner per Tastatureingabe fernzusteuern (HC-05 an einem Nano als HID).
Mein CAN-Bus Sniffer geht auch über den COM-Port :thinking:

Ist alles in C# umgesetzt, dazu gibt es auch massenweise Tutorials.

Sollte der TE sich also für .Net entscheiden, könnte ich zumindest ein bisschen was beisteuern was über das Wort dll hinaus geht :sweat_smile:

Wenn ich das richtig verstanden habe, wollten wir das anfänglich auch so machen, allerdings sagte unser Auftraggeber damals "Seriell? Wer benutzt denn heutzutage noch seriell. Das ist veraltet"

Ich bedanke mich trotzdem für alle hilfreichen Beiträge. Mal schauen, ob er sich zu oben genannter Lösung "überreden" lässt.

Ich wünsche einen schönen Tag!

Also ich kann nicht glauben das da in der Aufgabenstellung steht

"Entwickelt eine "Maschine" welche die Länge einer Leitung misst, das gemessene Ergebnis in eine DLL-Datei packt und dann via Bluetooth an einen Laptop versendet."

Und das in diesem Fall mit DLL-Datei eine windows-typische Dynamic-Link-Library gemeint ist.

Um eine vernünftige Dynamic-Link-Library zu erstellen braucht es ein Software-Entwicklungs-System das unter einem richtigen Betriebssystem läuft und das frisst so viel Ressourcen dass da auch ein Raspberry Pi richtig zu ächzen hätte.

Nun der Aufgabentext lautet Zitat

Entwickelt eine "Maschine" welche die Länge einer Leitung misst, das gemessene Ergebnis in eine DLL-Datei packt und dann via Bluetooth an einen Laptop versendet.

Wenn diese "Maschine" auch einen Windows-Computer beinhaltet ist es kein Problem von Windows-Rechner zu Windows-Rechner per Bluetooth eine x-beliebige Datei zu übertragen. Soll heißen der Arduino kann die Länge messen überträgt das Meßergebnis auf einen Windows-Rechner und der Windowsrechner macht dann das DLL-Brimborium.

Warum ein einzelnes Messergebnis also eine einzelne Zahl und sei es 127.789,123 m
in eine DLL-Datei gepackt werden muss das verstehe ich nicht.

Wurde da in der Aufgabenstellung gleich mit eingebaut das - statt des IT-Experten - der Buchhalter die Aufgabenstellung geschrieben hat und der wollte sich bei völliger Ahnungslosigkeit "fachmännisch" ausdrücken und dadurch ist der Begriff "DLL-Datei" in die Aufgabenstellung gekommen?

Du schreibst die Firma benötigt zwingend eine DLL-Datei.
Wenn die Firma nicht genau spezifiert hat

WAS

diese DLL-Datei können soll und

VON WELCHER EXE-Datei

diese DLL-Datei

in welcher ART und WEISE

aufgerufen wird
ist diese Spezifizierung - völlig wertlos / unsinning / schwachsinnig / der Beliebigkeit preisgegeben.

Wie soll die Schnittstelle in der DLL-Datei aussehen damit sich das aufrufende Programm den "Meßwert" aus der DLL_Datei holen kann?

  • Wie heißt der dort hinterlegte Funktionsaufruf?
  • mit was für Parametern muss diese Funktion aufgerufen werden?
  • welche Datentypen haben diese Parameter?
  • mit welchem Datentyp gibt der DLL-Aufruf das Meßergebnis aus/zurück?

An diesen Fragen kannst du erkennen wie extrem schwachsinnig es ist für das Übergeben einer simplen Zahl eine DLL-Datei zu erzeugen.

Das ist wie wenn man zum Anliefern einer Packung Puddingpulver einen eigenen Autobahnzubringer bauen würde.

Also entweder du hast wegen Geheimhaltung irgendetwas wichtiges verschwiegen oder diese Aufgabenstellung gibt dir den Freibrief das Meßergebnis als base32-codierten Text, als Morsecode oder was immer dir sonst an phantasiereichen ASCII-Code-repräsentationen einfällt zu speichern und der Firma zu sagen
"sie zu wie du meine DLL-Datei einliest".

Die konstruktivere Variante wäre ganz höflich und sachlich bei der Firma nachzufragen: "In welcher Form soll das Meßergebnis zur Verfügung gestellt werden?"

Das ist eine so allgemeine Formulierung, dass man darauf sowohl mit einer DLL-Datei-Spezifikation antworten könnte als auch mit etwas x-beliebig anderem.

vgs

Das verstehe ich übrigens auch unter Seriell.

Auch USB und CAN sind z.B. serielle Protokolle.
Der Aufgabensteller scheint wirklich nicht mit Fachwissen gestraft zu sein.

Gruß Tommy

Wissen ist Macht, nichts wissen macht nichts. :thinking:

Vielleicht gibt's ja eine strukturelle Beschreibung der Datei?
Würde mich nicht wundern, wenn's am Ende wirklich nur eine Textdatei sein soll.
DLL alleine sagt ja nix.

Das dachte ich mir auch :smiley:

Natürlich ist die ganze Geschichte schöner und genauer formuliert... Ich wollte lediglich die wichtigsten Dinge in den Satz packen.

Es ist definitiv so. Er will von uns eine DLL-Datei haben, welche den Messwert beinhaltet. Damals (wie auch heute) wusste ich leider nicht, dass eine DLL so "komplex" ist.

Es ist alles wie oben beschrieben. Microcontroller (Arduino Nano ATMEGA 328p), Messkonstruktion, Bluetoothmodul, fertig. Nichts weiter ist geplant

[quote] Warum ein einzelnes Messergebnis also eine einzelne Zahl und sei es 127.789,123 m
in eine DLL-Datei gepackt werden muss das verstehe ich nicht. [/quote]

Wie gesagt, ich möchte nicht genauer ins Detail gehen.. Kann ich auch ehrlich gesagt nicht, weil ich davon keine Ahnung habe...
Was ich sagen kann ist, dieser Messwert wird hinterher noch verwendet indem er in ein anderes "Programm implementiert wird" ... Ich denke dafür ist die dll wichtig, damit das andere Programm das versteht ?! (Zerfleischt mich bitte nicht, wenn ich hier Stuss rede ... Ich versuch es nur nahezubringen)

Ganz im Gegenteil... der Typ hat angeblich wohl was aufm Kasten und bot uns sogar an uns bei der "hochsprachenprogrammierung" zu helfen...

so oder so ähnlich werde ich es auch angehen... Danke trotzdem für die vielen Worte!

Ich kann mir sehr gut vorstellen, dass das hier alles sehr ausgedacht klingt...
Ich kann euch nur versichern, das sind alle wichtigen Informationen die ich habe. Es wurde nichts ausgelassen.

Okay, jetzt habe ich es!
Der möchte den Messwert gar nicht in einer Datei haben.
Er möchte von Dir tatsächlich eine DLL. Diese wird der Partner/Kunde in seinem Programm einbinden und darin eine von Dir entwickelte Funktion aufrufen.
Diese liefert ihm den Messwert zurück.
Somit kann er so oft und wann immer er möchte, den Wert abfragen.

Es geht also um eine Schnittstelle, nicht um eine Datei mit Werten!

Dann bleibt meine Herangehensweise allerdings 1:1 bestehen und Du musst nur das Wort "Programm" mit "DLL" austauschen und fertig :slight_smile:
Es ist sogar so, dass es praktisch keinen Unterschied in der Programmierung macht eine ausführbare Datei oder eine DLL zu erstellen. Die eine hat einen Einstiegspunkt und kann alleine laufen, die andere muss von extern aufgerufen werden.
Je nach Entwicklungsumgebung ist das lediglich ein Haken bei der Erstellung des Projektes.

Und bevor hier noch irgendwas missverstanden wird:
Diese DLL liefert nicht der Arduino! Die lieferst Du einmalig an den Kunden, wenn Du sie am PC fertig entwickelt hast.
Dann verbindet sie sich mit dem Arduino und holt (wie in meiner Eingangs-Antwort #2 und #9 beschrieben) die Messwerte.