Сохранение данных датчика Arduino в текстовый файл

34

Как сохранить данные, полученные с датчика, в текстовый файл на компьютере?

desNotes
источник

Ответы:

30

Вы можете записать данные датчика в последовательный порт, используя serial-lib, и написать небольшую программу обработки, которая считывает данные из последовательного порта и записывает их в файл.

в коде Arduino инициализировать последовательный lib в методе установки

Serial.begin(9600);

и запишите значения вашего датчика в последовательный интерфейс, используя

Serial.println(value);

в вашем методе цикла

на стороне обработки используйте PrintWriter для записи данных, считанных с последовательного порта, в файл

import processing.serial.*;
Serial mySerial;
PrintWriter output;
void setup() {
   mySerial = new Serial( this, Serial.list()[0], 9600 );
   output = createWriter( "data.txt" );
}
void draw() {
    if (mySerial.available() > 0 ) {
         String value = mySerial.readString();
         if ( value != null ) {
              output.println( value );
         }
    }
}

void keyPressed() {
    output.flush();  // Writes the remaining data to the file
    output.close();  // Finishes the file
    exit();  // Stops the program
}
Николаус Градвохль
источник
Куда должен идти код «на стороне обработки» - в том же коде Arduino или в отдельном скрипте c?
Улад
1
В отдельном скрипте обработки - обработка не компилируется в C, но в Java
Nikolaus Gradwohl
@UladKasach «Обработка» - это многоплатформенная среда программирования. Фактически, это среда программирования с самым глупым в мире именем.
Скотт Сейдман
9

Еще один вариант - использовать устройство для чтения / записи SD-карт и записать свой файл на SD-карту. Когда вы закончите сбор данных, замените SD-карты на компьютере рабочей станции. Этот подход позволит вам запустить ваш проект без подключения к компьютеру и обеспечит энергонезависимое хранение больших объемов данных.

Крейг Трейдер
источник
6

Программа gobetwino будет записывать значения датчиков из Arduino в текстовый файл или электронную таблицу с минимальными усилиями. Он также может автоматизировать вещи на компьютере, добавлять временные метки (чтобы вам не нужно было программировать их в arduino) и т. Д.

альтернативный текст

эндолиты
источник
5

Самый простой способ - использовать библиотеку Serial и выводить ее. Затем вы можете записать вывод в текстовый файл с помощью программы терминала. Гипертерминал доступен в Windows, Teraterm в Linux и Z Term в OS X.

Мелани

Cyberspice
источник
4

Если вы хотите записать данные датчика непосредственно в файл на вашем компьютере без необходимости копировать и вставлять вывод из окна последовательного монитора, то попробуйте прочитать поток данных непосредственно из последовательного порта (что в любом случае делает последовательный монитор, я подозреваемый). На Mac / Linux сделать что-то вроде:

cat /dev/cu.usbmodem1d11 

Бог знает, что эквивалентно на машинах Windows.

garageàtrois
источник
1
Возможно, вы также захотите связать временные метки с каждым показанием датчика, и в этом случае вам, вероятно, придется заменить эту catкоманду каким-то сценарием.
garageàtrois
3

Вы можете создать скрипт Python для чтения последовательного порта и записи результатов в текстовый файл:

##############
## Script listens to serial port and writes contents into a file
##############
## requires pySerial to be installed 
import serial

serial_port = '/dev/ttyACM0';
baud_rate = 9600; #In arduino, Serial.begin(baud_rate)
write_to_file_path = "output.txt";

output_file = open(write_to_file_path, "w+");
ser = serial.Serial(serial_port, baud_rate)
while True:
    line = ser.readline();
    line = line.decode("utf-8") #ser.readline returns a binary, convert to string
    print(line);
    output_file.write(line);
Улад Касач
источник
1

Я нашел проще и безопаснее использовать скрипт Python. Я обычно использую этот на основе последовательной библиотеки . Также очень часто используется модуль datetime для добавления меток времени:

import serial
from datetime import datetime

sensor = "DH11"
serial_port = '/dev/ttyACM0'
baud_rate = 9600
path = "%s_LOG_%s.txt" % (str(datetime.now()), sensor)
ser = serial.Serial(serial_port, baud_rate)
with open(path, 'w+') as f:
    while True:
        line = ser.readline()
        f.writelines([line.strip(), " t = %s \n " % (datetime.now())])
GM
источник
0

Следующим шагом будет использование либо ethernet-щита, либо чего-то вроде платы WIZ810MJ, и ваш Arduino включит интернет. Затем вы можете записать данные и отправить их на веб-сервер, чтобы сопоставить их. Я делаю это в моем мониторе температуры вивария .

Cyberspice
источник