Schönen guten Tag 
in meinem ersten Arduino / Microcontroller -Projekt geht es um Temperatur und Luftdruckmessungen.
Die Werte werden mittels nRF24_mini per WLAN an einen Empfänger verschickt. Dieser Empfänger besteht aus einem Teensy 3.2, Spannungswandler und 2.4G Wireless Module. Die Werte werden auch wunderbar empfangen und ausgegeben.
Nun wird eine Möglichkeiten gesucht die Werte durch den Teensy auch automatisch in einer csv-Datei abzulegen, vorzugsweise direkt auf der Festplatte des ohnehin angeschlossenen PCs. Leider hab ich bei der Suche nach ähnlichen Problemen keine Lösung gefunden, jediglich eine Variante per SD Karte, die ja auch in den Beispielsketches der Arduino IDE erläutert wird. Kann mir jemand weiterhelfen?
Einen Weg mittels Arduino direkt auf eine PC-Festplatte zu scheiben, ist mir nicht bekannt.
Du müsstest es über die serielle Schnittstelle an den PC senden und dieser sollte dann mit einer eigenen Anwendung (evtl. ein Terminalprogramm) die Daten dann auf die Festplatte schreiben.
JoE1205:
... Nun wird eine Möglichkeiten gesucht ...
Auch mir ist keine Möglichkeit bekannt, direkt auf eine Festplatte zu speichern.
Eine andere Möglichkeit: Auf dem PC läuft ein Programm, das die Ausgaben des Teensy verarbeitet und speichert. Dieses Programm müsste aber noch geschrieben werden.
Gruß
Gregor
JoE1205:
Schönen guten Tag 
in meinem ersten Arduino / Microcontroller -Projekt geht es um Temperatur und Luftdruckmessungen.
Die Werte werden mittels nRF24_mini per WLAN an einen Empfänger verschickt. Dieser Empfänger besteht aus einem Teensy 3.2, Spannungswandler und 2.4G Wireless Module. Die Werte werden auch wunderbar empfangen und ausgegeben.
Nun wird eine Möglichkeiten gesucht die Werte durch den Teensy auch automatisch in einer csv-Datei abzulegen, vorzugsweise direkt auf der Festplatte des ohnehin angeschlossenen PCs. Leider hab ich bei der Suche nach ähnlichen Problemen keine Lösung gefunden, jediglich eine Variante per SD Karte, die ja auch in den Beispielsketches der Arduino IDE erläutert wird. Kann mir jemand weiterhelfen?
Wenn Du die Daten schon über WLAN senden kannst, warum sendest Du sie nicht gleich bzw. auch zum PC?
Du brauchst dort nur ein Programm, dass die Daten dann in die Datei schreibt. Das brauchst Du aber immer, egal auf welchem Weg die Daten zum PC kommen.
Gruß Tommy
Nur als Bemerkung: Der Teensy ist für diese Aufgabe eigentlich völlig überdimensioniert. Wenn der nicht mehr tun soll, dann würde auch ein Nano/UNO ausreichen (kommt aber auf den RAM-Verbrauch an).
Da ich ein ähnliches Projekt (Wetterstation) laufen habe, hatte ich auch das gleiche Problem (Datenübertragung zum PC). Ich verwende allerdings einen Arduino Mega.
Nur, dass ich mich auch noch mit der Programmiersprache AutoIt auskenne und somit das PC-Programm bereits geschrieben habe. Da könnte ich Dir behilflich sein, wenn Du das möchtest.
Hast Du Dir denn schon Gedanken gemacht, wie Du die Daten auf dem Teensy speicherst?
Bei mir sind das ein paar mehr Daten, als nur Temperatur und Luftdruck. Ich habe mir eine Struktur erstellt:
struct WeatherData { // Struktur der Datensaetze
byte Hour; // 1 Byte
byte Minute; // 1 Byte
uint32_t Lux; // 4 Byte
uint16_t Pressure; // 2 Byte
int16_t Temp1; // 2 Byte
byte Hum1; // 1 Byte
int16_t Temp2; // 2 Byte
byte Hum2; // 1 Byte
byte Battery; // 1 Byte
uint16_t WSpeed; // 2 Byte
uint16_t WDir; // 2 Byte
uint16_t WGust; // 2 Byte
uint16_t RVol; // 2 Byte
uint16_t WLevel; // 2 Byte
};
und erstelle dann ein Array of Structs:
struct WeatherData DataPerDay[MaxDataCount]; // Array mit den Datensaetzen
Die Daten werden alle 10 Minuten geloggt und am Ende des Tages auf SD-Karte gespeichert (3600 Bytes pro Tag).
Mit meinem PC-Programm übermittele ich eine Anfrage (Datum) an den Arduino Mega und dieser schickt mir die Daten zum PC zurück, nachdem er sie von SD-Karte gelesen hat.
Dadurch dass der Mega "nur" 8KB SRAM zur Verfügung hat, muss ich die aktuellen Tagesdaten vorher auf SD-Karte zwischenspeichern, dann die angeforderten Daten laden und zum PC übertragen und abschließend wieder die zwischengespeicherten Daten laden.
Das funktioniert aber alles problemlos.
Hallo,
"Einen Weg mittels Arduino direkt auf eine PC-Festplatte zu scheiben, ist mir nicht bekannt."
Processing?
Legt eine Log-Datei an
//Arduino Kochbuch
// Processing Sketch
/*
* ReceiveMultipleFieldsBinaryToFile_P
*
* portIndex must be set to the port connected to the Arduino
* based on ReceiveMultipleFieldsBinary, this version saves data to file
* Press any key to stop logging and save file
*/
import processing.serial.*;
PrintWriter output;
DateFormat fnameFormat= new SimpleDateFormat("yyMMdd_HHmm");
DateFormat timeFormat = new SimpleDateFormat("hh:mm:ss");
String fileName;
Serial myPort; // Create object from Serial class
short portIndex = 0; // select the com port, 0 is the first port
char HEADER = 'H';
void setup()
{
size(200, 200);
// Open whatever serial port is connected to Arduino.
String portName = Serial.list()[portIndex];
println(Serial.list());
println(" Connecting to -> " + Serial.list()[portIndex]);
myPort = new Serial(this, portName, 9600);
Date now = new Date();
fileName = fnameFormat.format(now);
output = createWriter(fileName + ".txt"); // save the file in the sketch folder
}
void draw()
{
int val;
String time;
if ( myPort.available() >= 15) // wait for the entire message to arrive
{
if( myPort.read() == HEADER) // is this the header
{
String timeString = timeFormat.format(new Date());
println("Message received at " + timeString);
output.println(timeString);
// header found
// get the integer containing the bit values
val = readArduinoInt();
// print the value of each bit
for(int pin=2, bit=1; pin <= 13; pin++){
print("digital pin " + pin + " = " );
output.print("digital pin " + pin + " = " );
int isSet = (val & bit);
if( isSet == 0){
println("0");
output.println("0");
}
else {
println("1");
output.println("0");
}
bit = bit * 2; // shift the bit
}
// print the six analog values
for(int i=0; i < 6; i ++){
val = readArduinoInt();
println("analog port " + i + "= " + val);
output.println("analog port " + i + "= " + val);
}
println("----");
output.println("----");
}
}
}
void keyPressed() {
output.flush(); // Writes the remaining data to the file
output.close(); // Finishes the file
exit(); // Stops the program
}
// return the integer value from bytes received on the
// serial port (in low,high order)
int readArduinoInt()
{
int val; // Data received from the serial port
val = myPort.read(); // read the least significant byte
val = myPort.read() * 256 + val; // add the most significant byte
return val;
}
Gruß und Spaß
Andreas
Nur mal so am Rande: Da schreibt aber der Arduino auch nicht direkt auf die PC-Platte.
Gruß Tommy
Jedes vernünftige Terminal Programm kann serielle Daten direkt in eine Text Datei schreiben
Hallo,
nur mal so noch weiter am Rande:
Der Sketch erzeugt eine Datei (mit Datum & Uhrzeit) als Name.
Vom Arduino empfangene Nachrichten werden der Datei hinzu gefügt.
Gruß und Spaß
Andreas
Hi,
vielen Dank für die zahlreichen Antworten, ich versuche mal Schritt für Schritt darauf einzugehen:
Tommy56:
Wenn Du die Daten schon über WLAN senden kannst, warum sendest Du sie nicht gleich bzw. auch zum PC?
Die eingesetzten Rechner sind in der Regel nicht mit WLAN ausgestattet, außerdem soll der Sensor mit verschiedenen PCs arbeiten.
slartibartfast:
Nur als Bemerkung: Der Teensy ist für diese Aufgabe eigentlich völlig überdimensioniert. Wenn der nicht mehr tun soll, dann würde auch ein Nano/UNO ausreichen (kommt aber auf den RAM-Verbrauch an). (...)
Stimm ich dir zu, der Teensy liegt aber ansonsten eh nur rum. 
Ansonsten ist dein Programm recht interessant. Ich muss mal drüber nachdenken ob das bei mir Sinn macht.
JoE1205:
Die eingesetzten Rechner sind in der Regel nicht mit WLAN ausgestattet, außerdem soll der Sensor mit verschiedenen PCs arbeiten.
Aber die PC sind doch mit Sicherheit im lokalen LAN verbunden. Darüber könntest Du sie erreichen.
Gruß Tommy