Forum: PC-Programmierung PC Kommunikation mit Arduino Datenlogger


von Martin (Gast)


Lesenswert?

Mit meinem Arduino logge ich einen Temperaturverlauf mit. Jetzt siche 
ich nach einen Weg, diese Daten mit einem eigen programmierten PC 
Programm auszuwerten.
Wie kann ich am einfachsten die Kommunikation zwischen Arduino und PC 
herstellen? Ich möchte keinesfalls händisch angeben, welchen COM Port 
ich auslesehn will, etc.  Der PC soll den Arduino schon selbst erkennen.
Bitte um Tipps.
Danke!

: Verschoben durch User
von Joachim B. (jar)


Lesenswert?

Arduino lauscht an seiner Seriellen (über USB) auf Triggerworte / 
Strings

z.B. "hallo Arduino" und antwortet "hier"

Der PC (bzw. das Programm) öffnet einen comX nach dem anderen mit den 
passenden Einstellungen z.B 19K2 und sendet und lauscht

Im Misserfolgsfall kommt bei open Error oder nichts, im Erfolgsfall 
"hier"

Dann weiss der PC auf welchen Port der Arduino lauscht.
Das könnte der PC auch in der REG oder in seiner ini sich merken und 
speichern.

von Martin (Gast)


Lesenswert?

Die Ports der Reihe nach abhören bis man mit einem Codewort einen 
Treffer landet - sehr sehr gute Idee!!! :)

von Jim M. (turboj)


Lesenswert?

Martin schrieb:
> Der PC soll den Arduino schon selbst erkennen.

Kann man über eine Anlyse der Registry Daten erkennen. Allerdings ist so 
nur eine generische Erkunnung Deines Arduino Typs möglich - d.h. es 
knallt wenn 2 für verschiedene Zwecke angeschlossen sind.


Custom USB Deskriptoren sind auf den Arduinos mit nativem USB im µC 
möglich - d.h. auf den Varianten mit Atmega32U4 oder den dickeren 
Cortex-M3 µCs. Dort würde man entweder HID oder WinUSB einsetzen.

von Niklas Gürtler (Gast)


Lesenswert?

Martin schrieb:
> möchte keinesfalls händisch angeben, welchen COM Port ich auslesehn
> will, etc.  Der PC soll den Arduino schon selbst erkennen.

Das geht am Besten, wenn man direkt mit USB programmiert, was aber 
deutlich komplizierter ist als die serielle Schnittstelle. Im
USB-Tutorial mit STM32 steht einiges dazu, aber das trifft auf die 
normalen Arduinos nicht so zu, weil die andere Controller nutzen - der 
allgemeine Teil hilft aber vielleicht trotzdem.

von STK500-Besitzer (Gast)


Lesenswert?

Martin schrieb:
> Der PC soll den Arduino schon selbst erkennen.

Inwiefern?
Der Arduino-Treiber meldet sich im Geräte-Manager mit einem Namen an, 
der "Arduino" enthält (oder einen anderen passenden Bezeichner).
Den kann man mit Hilfe eines Programms auslesen und entsprechend in 
einer Batchdatei auswerten/weiter verwursten.

Wenn du selber eine Software schreiben kannst, "klappesrst" du einfach 
die verfügbaren COM-Ports nach deinem Logger ab (oder liest die Daten 
des Gerätemanagers aus).

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Man könnte ja auch einen Netzwerk-Shield auf den Arduino setzen, dann 
wird dieser über die MAC/IP-Adresse eindeutig identifizierbar. UDP ist 
nicht besonders resourcen-fressend.

Oder man verwendet gleich einen (weitgehend) kompatiblen ESP8266-Ableger 
...

Großer Vorteil auf der PC-Seite: Kein Treiber-Geraffel, Netzwerk kann 
heute jeder. Auf Arduino-Seite: plattformunabhängig, zur Not weltweit zu 
erreichen, auch vom Smartphone.

Nachteil: Keine (einfache) Stromversorgung wie bei USB. Man könnte ein 
USB-Netzteil nutzen, oder ein Solarmodul oder einen 
Energy-Harvesting-Chip. Es gibt auch Projekte, die Energeie aus normalem 
Netzwerkverkehr (ohne PoE!) sammeln können ...

von Niklas Gürtler (Gast)


Lesenswert?

Frank E. schrieb:
> Großer Vorteil auf der PC-Seite: Kein Treiber-Geraffel,

Hat man bei USB ab Windows 8 auch nicht, wenn man es richtig (WinUSB 
Device) macht - und unter Linux sowieso nicht.

Für Netzwerk muss der User die IP des Geräts kennen, auf diesem muss man 
ggf. eine IP einstellen können - auch nicht super benutzerfreundlich.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Niklas Gürtler schrieb:
> Frank E. schrieb:
>> Großer Vorteil auf der PC-Seite: Kein Treiber-Geraffel,
>
> Hat man bei USB ab Windows 8 auch nicht, wenn man es richtig (WinUSB
> Device) macht - und unter Linux sowieso nicht.
>
> Für Netzwerk muss der User die IP des Geräts kennen, auf diesem muss man
> ggf. eine IP einstellen können - auch nicht super benutzerfreundlich.

Nö, dafür hat man Broadcasts erfunden (zumindest für das gleiche 
Subnet). Einmal ins Netz gebrüllt und der Schützling meldet sich. Fortan 
kennt man seine IP ...

von Mathias (Gast)


Lesenswert?

Alle COM Ports öffnen und den Logger einfach jede Sekunde "hier" 
schreien lassen. Dann weiß man nach einer Sekunde, welcher Port der 
richtige ist. Ungefragt Daten an unbekannte Geräte schreiben macht in 
99% der Fälle keine Probleme, aber wenn man wichtige Geräte 
angeschlossen hat, die zu den 1% gehören, will man das vielleicht nicht.
Ist eben die Frage, ob du das verkaufen willst und damit alle 
Eventualitäten abkaspern willst (dann am besten per HID oder libUSB) 
oder nur zum privaten gebrauch nutzt (dann ist fast egal, was du 
machst).

von Niklas Gürtler (Gast)


Lesenswert?

Frank E. schrieb:
> Nö, dafür hat man Broadcasts erfunden (zumindest für das gleiche
> Subnet). Einmal ins Netz gebrüllt und der Schützling meldet sich.

Es sei denn es meldet sich irgendein anderes Gerät welches auf der 
selben Port-Nummer arbeitet. Oder es ist irgendeine Firewall dazwischen 
- z.B. Heim vs. Gast Netz bei DSL-Routern. Es hat schon seinen Grund 
warum die meisten Peripherie-Geräte wie Mäuse und Festplatten per USB 
angebunden sind. Dort hat man einen einheitlichen zentral verwalteten 
Mechanismus zur Erkennung von Geräten. Das ist für den End-User immer 
noch am Einfachsten. Der hat auch nicht immer einen Ethernet Port zur 
Hand - da wäre wenn schon WLAN gefragt, was aber wieder Konfiguration 
des Schlüssels erfordert.

Eine Netzwerk-Anwendung ist auch nicht unbedingt einfacher zu 
programmieren als USB. Es gibt wohl nur mehr Tutorials & Bibliotheken. 
Dafür haben viele Controller eine komplette USB Peripherie bereits 
integriert, da fehlt nur noch ggf. eine Schutzschaltung. Bei Ethernet 
braucht's immer Übertrager und fast immer ein PHY-IC. Es gibt zwar 
Shields die das haben, aber auch Arduinos mit nativem USB (z.B. Due).

von Joachim B. (jar)


Lesenswert?

Mathias schrieb:
> Alle COM Ports öffnen und den Logger einfach jede Sekunde "hier"
> schreien lassen. Dann weiß man nach einer Sekunde, welcher Port der
> richtige ist.

der Logger könnte sogar
"hier Ardu Logger 007"
"hier Ardu Logger 008"
"hier Ardu Input 001"

schreien, dann wären auch andere Ardu erkennbar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.