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!
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.
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.
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.
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).
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 ...
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.
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 ...
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).
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).
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.