DLL Datei mit Arduino erstellen und via Bluetooth versenden

Ok ... wir kommen der Sache näher ... Entschuldige bitte, falls ich mich zu dumm ausgedrückt habe...
Und danke viel mals für die vielen konstruktiven Antworten!

ABER NUR DAMIT ICH ES DANN AUCH RICHTIG VERSTEHE :smiley: :

Diese ominöse DLL liegt irgendwo auf dem Computer rum, wohin ich meine Daten via Bluetooth senden muss.
In die DLL kann ich eine Funktion/Event (ich weiss nicht, wie es richtig heisst) schreiben, welche/s dann auf den ComPort schaut und die gesendeten Daten "in sich aufnimmt" sobald etwas gesendet wurde und diese dann noch weiter an das andere Programm meldet "ich hab hier was, mach was damit".

Habe ich das so richtig verstanden?

So grob, ja.
Detailliert kann ich Dir das nicht sagen, da ich die interne Anforderung ja nicht kenne.
Du kannst die DLL natürlich mit einer simplen Funktion ausstatten, die einen Befehl per Bluetooth an den Arduino sendet und dieser dann mit dem Messwert antwortet.
Genauso kannst Du ein Event definieren, welches die DLL bereitstellt und aufgerufen wird, sobald Daten per Bluetooth eingehen.

Das sollte hoffentlich in dem Lastenheft stehen, da ein Push oder Pull der Werte mit der Verantwortlichkeit einher geht!
Bedeutet, wenn Du das Event bereitstellst und z.B. die Anwendung vom Kunden ist nicht bereit... Was passiert dann? Wo landet der Wert? Musst Du einen Fehler protokollieren, jemandem Bescheid sagen? Eine LED zum blinken bringen?

Da seid Ihr ganz schön blauäugig an diese Sache herangegangen. Oder Dein Chef hat Dich arg ins kalte Wasser geworfen!

Würde persönlich beide Möglichkeiten, Funktion & Event in der DLL berücksichtigen. Eine Datei als Protokoll schreiben, wann welcher Wert abgerufen, oder per Event übermittelt wurde. Samt Erfolgsmeldung. Das sichert einen ungemein ab, wenn irgendwann mal heißt "da hat Ihr Programm nicht funktioniert".
Die Einrichtung, welcher COM-Port, Baudrate, usw. in einer Einrichtungsdatei hinterlegen, damit im Falle eines Umzugs/Neuinstallation/etc. dies nicht in der DLL geändert werden muss.
Dabei die Schreibberechtigung auf dem Rechner beachten :wink:

Du darfst nicht das Programm (Sketch) mit Datenfiles verwechseln. Als Beispiel: ein JPG Bild (Daten) kannst Du auf einer Vielzahl von Hardware (Digitalkammera, Win-PC, Linux-PC, MAC, I-irgendwas, Android-irgendwas ecc) angeschaut werden. Die Betrachtungssoftware ist aber nicht unter all diesen Geräten austauschbar.

zu DDL Datei.
Wüßte nicht wie das Datenvormat sein soll. Frag mal nach ob sie Dir die Spezifikation des zu übergebenden Datenformats (Aufbau der Datei) geben können. Ansonsten als Antwort: zuwenig Info und DDL Datei ist kein definiertes Datenformat.

Ein Arduino kann alles mögliche messen und Daten verschicken. Das ist kein Problem. Auf der PC-Seite müssen die Daten entgegengenommen werden. FTP wäre eine Möglichkeit, aber auch wie schon gesagt ein Programm das die Daten an der USB-COM Schnittstelle des Arduino entgegennimmt und diese wie auch immer formatiert abspeichert.

Grüße Uwe

So wie ich inzwischen die Aufgabe errate: Der Messwert ist für das verwendende Programm eine Konstante.
Um diese gelegentlich zu ändern, muss man nun nicht dieses Programm ändern und neu kompilieren, sondern nur anhalten, die DLL austauschen und kann dann das Programm wieder starten. Statt "Konstante" ginge auch eine Funktion, die einen Wert zurückliefert, wobei dem aufrufenden Programm natürlich egal (und verborgen) ist, wie die Funktion auf das Ergebnis kommt.

Die einfachste Lösung, die dem beschriebenen Verfahren am nächsten kommt, wäre eine simple Textdatei deren Inhalt ( der Messwert ) per Bluetooth (Serial) vom Arduino geholt wird.
Deine DLL erhält eine Initialisierungsfunktion (die automatisch durchlaufen wird, ohne dass das fremde Programm das aktiv machen muss), die den Messwert wie gewünscht zur Verfügung stellt.

Statt die DLL auszutauschen und das Programm neu zu starten, was ja in jedem Fall eine Aktion auf dem PC darstellt, wird dort eben der Task "Hole Messwert vom Arduino" ausgeführt.

Wie gesagt: nur eine Variante, wenn das Programm so aufgebaut ist und das auch so bleiben muss. @TriB's Ideen (incl. zusätzlicher log- und config-Datei) sind kein Gegensatz. Allerding rate ich, die Aktion am Arduino ( Messeinrichtung laufen lassen, dann mit PC verbinden ) soll wohl nur gelegentlich stattfinden, während das PC-Programm unabhängig davon und ohne Arduino-Verbindung beliebig lang und oft laufen soll.

Auf gar keinen Fall :sweat_smile:
Viel zu komplex und überflüssig :smiley:
Die DLL stellt die Verbindung zum Arduino her und holt den Messwert. Ob bei jeder Abfrage neu, oder der jeweils letzte gespeicherte Messwert, ist hoffentlich definiert.
Einmal sauber umgesetzt, wird die DLL nie wieder angefasst, geschweige denn vom Hauptprogramm neu geladen.

Warum also selbst eine Dienstanwendung schaffen, die dauerhaft im Hintergrund läuft, eine Datei befüttert, die dann von einer DLL ausgelesen wird, die die selbe Aufgabe auch direkt erledigen kann?

Das führt mich eigentlich auch wieder weg von Bluetooth, da der Arduino so oder so mit Spannung versorgt und in der Nähe vom PC sein muss. Wäre aus meiner Sicht eine weitere überflüssige Komplexität. Der Programmierung ist es egal ob es sich um einen COM-Port per USB oder per Bluetooth handelt.
Letzteres muss aber einmalig manuell einem festen Port zugewiesen werden.

1 Like

Ja, aber es Steht ja so im Aufgabenheft, dass er das Bluetooth benutzen soll.
Hier ist nicht die Frage nach Hardware oder deren Ersatz durch was anderes, oder komplett weglassen, sondern die Frage, wie er das mit der DLL lösen soll.
Wenn jemand mit seinem gerade volgetankten Fiat vor Dir steht und nach dem besten Weg mit dem Auto von Frankfurt nach Berlin fragt, macht es wenig Sinn ihm jetzt nen Mercedes oder die Bahn zu empfehlen, Denn der hat jetzt nunmal seinen Fiat und will mit dem nach Berlin.
Natürlich gibt es Situationen, bei denen jemand völlig ungeeignete komponenten nutzen wil um sein Ziel zu erreichen, und dann ist die Empfehlung zu besser geeigneten Komponenten auch gut, Aber hier besteht ja eine Festgelegte Aufgabenstellung und darin vorgeschriebene Koponenten.

Ich stimme dir zu, fürchtete nur, das sei die Vorgabe/Vorstellung des "Kunden".
Auch meine Idee basiert darauf, dass die DLL nicht mehr ausgetauscht werden muss.

Hallo,
Gute Idee , so macht das jetzt einen Sinn.
Heinz

Mittlerweile bewegen wir uns hier in Gebiete, wo ich nicht mehr auf Anhieb folgen kann..
Eigentlich wäre mir lieb, dass der Arduino (bzw. das Senden des Messwertes) die ausführende Arbeit übernimmt. Also NICHT DLL stellt die Verbindung zum Arduino her und holt den Messwert, SONDERN Messwert kommt und "Dinge geschehen innerhalb der DLL"

Auch das war mein Gedanke anfangs ... Sein Argument "USB benutzt man nicht, weil veraltet"
Ich weiss wie dumm das klingt ... Ich gebe nur wieder, was gesagt wurde :frowning:

Vielleicht nochmal zur Verdeutlichung, weil mittlerweile zuviele Missverständnisse aufgekommen sind (eventuell auch durch mein Verschulden):

  • Arduino PFLICHT
  • Bluetooth PFLICHT
  • DLL PFLICHT

mittlerweile wurde ja herausgefunden (hatte ich selber anders interpretiert), dass die DLL auf dem PC liegt und nur "gefüttert" wird.

Ich denke, dass es so gedacht ist:

DLL liegt herum und wartet auf Eingang von Daten --> Daten kommen auf COM-Port an --> Daten werden in DLL gepflegt --> DLL startet ein Event, dass sie weiterverwendet werden kann --> wieder von vorne

Mal angenommen das macht Sinn, wie ich den Vorgang beschrieben habe... Kann ich mir das dann so vorstellen, dass nach jedem "Benutzen der DLL" der Inhalt gelöscht wird und neu gefüttert werden kann? Sprich die DLL dann "als festes Programm läuft".
Es tut mir Leid, dass das alles so wirr klingt... ich habe leider keine Ahnung von dem Quack ...

Bei weiteren Fragen, erkläre ich gerne anders oder male ein Schaubild oder Ähnliches...

Weiterhin vielen lieben Dank für die viele Hilfe!

Ist da alles veraltet oder wird das nur nach Belieben gewechselt? Irgendwie kommt mir das immer komischer vor.

Gruß Tommy

Man kann einer DLL-Datei so ziemlich alles und jedes was du jemals auf einem Computer an Funktionalität gesehen hast "beibringen".

Deshalb führt meiner Meinung nach überhaupt kein Weg daran vorbei das dieser
Computer-Oberspezialist eine ganz präzise Spezifikation der DLL in Schriftform zur Verfügung stellt.

Du könntest das ganze auch so sehen:
Es geht darum Projektmanagement zu erlernen. Und dazu gehört zu erkennen wann man Fachwissen braucht das man in Form eines Spezialisten dazuholen muss.

Kein einziger "Projektmanager", CEO, Abteilungsleiter hat bestes und tiefes Wissen über alle Wissensgebiete die zum Realisieren eines Projektes notwendig sind. Die moderne Welt ist arbeitsteilig. Mit Spezialisten von A-Z. Also hole dir einen Spezialisten dazu. Da du bestimmte Details nicht erzählen willst oder glaubst es nicht erzählen zu dürfen kann man da auch keine detaillierte Empfehlung geben was das für ein Spezialist sein müsste. Ob das doch noch irgendwie möglich wird hast du selbst in der Hand.

Wenn ich das richtig verstanden habe hast du so eine Art Betreuer. Du kannst doch mit dem Betreuer die Probleme ansprechen.

vgs

Ja und der Auftraggeber hat die verdammte Pflicht und Schuldigkeit eine ausreichend präzises Pflichtenheft zu erstellen damit das erstellte Softwareprodukt auch nachher nach seinen Vorstellungen funktioniert.

Wenn der Auftraggeber dazu zu doof ist dann kannste ihm so gut wie alles servieren und dann muss der Auftraggeber zusehen das er sein Programm so umgestrickt bekommt dass sie mit deiner DLL klarkommt.

Also entweder du kannst da jetzt präzise Details liefern oder ich ordne das ganze unter
"Blender" braucht Unterstützung beim Weiterblenden oder unter Low-Level-Trolling ein:
tips how to improve your posting style

vgs

Da muss man sich dann natürlich auch die Frage stellen, wieviel Einfluss Deine Einstufung auf alle Andern oder das Thema an und für sich, hat oder inwiefern das den TO tangieren sollte.

Kollateralschaden halt.
Wird gerne inkauf genommen.

Nein, das funktioniert so leider nicht.
Eine DLL ist ein lebloses Objekt. Sie kann sich nicht selbst starten/ausführen und schon gar nicht per Bluetooth aktivieren.
Stell es Dir vor wie in der Arduino-Welt eine *.ino-Datei ohne setup() und loop().

Toter Code, der erst zum Leben erweckt werden muss. Durch einen Windows-Dienst, der im Hintergrund läuft, eine *.exe-Datei, die ein Anwender per Doppelklick startet oder eben durch das Programm, welches der Kunde im Einsatz hat.

Also steht nichts anderes zur Debatte, als dass Du eine *.dll entwickelst, die von dem Kundenprogramm gestartet wird.
Was darin dann passiert, obliegt Dir allein. Du kannst nun entscheiden, ob im Konstruktor (vergleichbar mit dem setup() ) eine dauerhafte Verbindung zum Arduino aufgebaut wird und Du asynchron ein Event aufrufst, welches das Kundenprogramm abonniert;
Oder Du nur auf Anfrage mit dem Arduino kommunizierst.

Das alles sind dann aber Grundlagen in der Programmierung. Und wenn Du weder weißt in welcher Sprache Du das entwickeln möchtest, noch wie man das tut, werden wir hier nicht weiter kommen.

Für einen Profi, der Hochsprachen im Windows-Umfeld entwickeln kann und mit dem Arduino umzugehen weiß, ist das ein überschaubarer Aufwand. Ein, maximal zwei Personentage.
Wenn man nicht weiß wie eine Klassenbibliothek funktioniert oder gar erstellt wird, sich mit Konstruktoren, Threads & Events nicht auskennt und bei null startet...
Tja, dann braucht der Autodidakt sicherlich mehrere Monate!

Das ist in der Tat eine verdammt schwierig zu beantwortende Frage. Sowohl was die Absichten des TO angeht als auch wie meine Einstufung Andere beeinflusst.
Wenn es diese Einflussmöglichkeit sichtbar gemacht hat. Finde ich das einen positiven Aspekt in dem ganzen. Diese Schwierigkeit versuche ich in dem englischen Posting zu beschreiben. Möglicherweise gibt es Argumente auf die ich noch nicht gekommen bin die meine Haltung verändern. Ich habe meine Entscheidung wie ich das sehe nicht aufgrund von zwei kurzen Sätzen gefällt, sondern aus dem Verlauf des Threads und der Muster die ich darin zu erkennen glaube.

vgs

Dennoch denke ich dass Deine persönliche Ansicht auf dieses Theme in etwa soviel Einfluss hat, wie der berühmte Sack Reis der in China umkippt.
Wenn Du persönlich mit dem Thema hier oder der Art wie der TO seine Infos gibt, ein Problem hast, zwingt Dich ja niemand, da mit zu arbeiten. Es gibt ja hier auch andere Themen, die von Deinem fachlichen Input profitieren können.
Darum frage ich mich, warum Den To hier plötzlich begonen hast, anzumachen, er hat Dir doch gar nichts getan?

Wenn der Auftraggeber so klare und unabänderliche Vorstellungen hat, wie seine Software die gewünschte DLL verwenden will, sollte er neben der schriftlichen Beschreibung auch eine Muster-DLL im Quelltext (mit der dazu gehörigen "Toolchain" = Programmierumgebung) beistellen.
Deine Aufgabe ist dann nur, statt des Demo-Beispielwerts den echten Wert irgendwie zu bekommen.

Als Hintergrund-Tip: Eine DLL ist eine Sammlung von Funktionen und Variablen, die von separat kompilierten Programmen verwendet werden können.
Eine DLL ist im Prinzip passiv und wird nur von außen verwendet. (Ergänzung: sie wird von einem Programm geladen. Dann startet eine Initialisierungsfunktion, die nicht aktiv vom aufrufenden Programm gestartet werden muss.)
Bei Windows Dot.Net ist übrigens üblicherweise die Dot.Net-Laufzeitumgebung "das
Programm" und die c#-Programme sind alles DLLs.

Wenn der Arduino von sich aus aktiv sein soll, brauchst du einen Dienst (service), der auf dem PC permanent im Hintergrund lauert und merkt, dass der Arduino etwas sendet. Und/oder dass der Arduino nun verbunden oder verfügbar ist. Ganz passiv kann die PC-Seite jedenfalls nicht sein. Also kannst du auch die Rollen noch mal generell überdenken.

Wenn ich es richtig sehe, bist du auch eigentlich eher für das Messen auf dem Arduino zuständig.
Delegiere das Erstellen der obligatorischen DLL und des Service an einen entsprechenden Experten, nachdem allen Beteiligten klar ist, dass der Ansatz "Nach jeder Messung entsteht auf dem Arduino eine aktualisierte DLL, die sich drahtlos auf den PC hinüberzaubert" suboptimal war.

Aber This topic has been solved . lassen wir's also stehen.

Der Microsoft hat ein auf den ersten Blick gar nicht mal so schlechtes Beispiel wie man eine DLL erstellt (und auch gleich einen Client, der sie benutzt):

Das sollte mit Visual Studio Community Edition auch machbar sein.

Statt der fibonacci_xxx wäre dann eine Funktion zu implementieren, die den Messwert über Bluetooth (+) vom Arduino abholt und zurückgibt. Diese von der DLL exportierte Funktion muss das ausführbare Programm (.exe) des Auftraggebers dann aufrufen.

(+) Habe nie 'BT Serial Profile' auf PC programmiert; ist vielleicht sichtbar als serielle Schnittstelle COMx wenn ein USB-BT-Stick verwendet wird.
Das erforderliche Protokoll zwischen PC und Arduino zum Abholen des Wertes bleibt in der DLL verborgen.

Weiß ja nicht, wie groß Eure Gruppe ist, wie lange ihr Zeit habt und welche Detailinformationen noch vorliegen - aber das scheint mir schon eine anspruchsvolle Aufgabe, selbst wenn sie ordentlich aufgeschrieben wäre.