Raspberry Pi - USB Stick

Raspberry Pi - USB Stick

Beitragvon Murphy. » 23. Nov 2016, 00:45 Raspberry Pi - USB Stick

Hallo,
ich beschäftige mich seit kurzem im Rahmen meiner Bachelorarbeit mit einem Raspberry Pi und Lazarus. Leider benötige ich jetzt dringend Hilfe, da ich nicht weiter komme. Ich erfasse mit einem ADC Wandler Werte und gebe Stellsignale über einen DAC aus. Diese Werte werden parallel in eine Txt Datei geschrieben. Diese Txt Datei möchte ich auf einen USB-Stick kopieren und umbennen. Ich habe mich dabei an dieser Anleitung orientiert http://www.raspberrypi-spy.co.uk/2014/05/how-to-mount-a-usb-flash-disk-on-the-raspberry-pi/ leider funktioniert es nicht und ich weiß nicht mehr weiter.

Mein Skript sieht so aus:
Code: Alles auswählen
 
procedure TForm4.Button2Click(Sender: TObject);
begin
  dat_alt := '/home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt';
  dat_neu := '/media/usb/temp.txt';
  dat_rename := 'media/usb/'+DateToStr(Now)+'_'+TimeToStr(Now)+'.txt';
 
  mount_process := TProcess.Create(nil);
  unmount_process:= TProcess.Create(nil);
 
  mount_process.CommandLine := 'sudo mount /dev/sda1 /media/usb -o uid=pi,gid=pi'; //Kommandozeile
  unmount_process.CommandLine := 'unmount /media/usb'; //Kommandozeile einfügen
 
  // mount_process.Options := mount_process + [poWaitOnExit];
  //unmount_process.Options := unmount_process + [poWaitOnExit];
 
  mount_process.Execute;
 
  CopyFile(dat_alt, dat_neu);
  RenameFile(dat_neu, dat_rename);
 
  unmount_process.Execute;
 
  mount_process.Free;
  unmount_process.Free;
 
  AssignFile(tfOut, C_FNAME);
  rewrite(tfOut);
  writeLN(tfOut,'DD-MM-YY', char(9), 'hh-mm-ss', char(9), 'D', char(9), 'T1', char(9), 'T2',  char(9), 'P', char(9), 'M', char(9), 'Lüfter',  char(9), 'Heizung');
  CloseFile(tfOut);
  Form4.Close;
end;         
 


Hat jemand Erfahrung damit ?
Murphy.
 
Beiträge: 20
Registriert: 21. Okt 2016, 18:02

Beitragvon af0815 » 23. Nov 2016, 06:58 Re: Raspberry Pi - USB Stick

Bitte um Beschreibung was genau nicht geht. Bzw. wo dein Programm nicht mehr funktioniert.

Du versuchst da mehrere Schritte,

A) mounten des USB-Sticks
B) Kopieren
C) Ummount
D) Schreiben eines Textfiles

Wenn du nur A durchführst, ist der Stick gemountet ?
Wenn nein, funktioniert der Befehl im Terminal/Konsole ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3490
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon MacWomble » 23. Nov 2016, 08:29 Re: Raspberry Pi - USB Stick

Ich würde zunächst folgendes prüfen:

Ist der Ordner /media/usb angelegt und hast du alle Rechte daran?
Ist der USB-Stick wirklich sda1?

Das geht am einfachsten in der Konsole.

Für deinen Einsatzzweck würde ich pmount verwenden. Dann kann der Stick ohne sudo gemounted werden. Da dies ja aus dem Programm gesteuert wird, sehe ich da kein relevantes Sicherheitsproblem.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 607
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19 Cinnamon / CodeTyphon Generation V Plan 6.60 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Mathias » 23. Nov 2016, 17:10 Re: Raspberry Pi - USB Stick

Ich erfasse mit einem ADC Wandler Werte und gebe Stellsignale über einen DAC aus.

Was hast du da für einen interessanten Baustein angeschlossen ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Murphy. » 24. Nov 2016, 02:49 Re: Raspberry Pi - USB Stick

Hi,

ich habe etwas weiter gebastelt. Das Programm sieht jetzt so aus:

Code: Alles auswählen
unit u_save_form;
 
{$mode objfpc}{$H+}
 
interface
 
uses
 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
 StdCtrls, u_intpolwn_form, Process;
 
const
 C_FNAME = '/home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt';
 
var
 
 rec_intervall: integer;
 tfOut: Textfile;
 dateiname, dat_neu, dat_alt, dat_rename: string;
 mount_process, unmount_process, copy_process, rename_process: TProcess;
 
 
 
type
 
 { TForm4 }
 
 TForm4 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Edit1: TEdit;
   Label1: TLabel;
   Timer1: TTimer;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Edit1Change(Sender: TObject);
   procedure Edit1EditingDone(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { private declarations }
 public
   { public declarations }
 end;
 
var
 Form4: TForm4;
 
implementation
 
{$R *.lfm}
 
{ TForm4 }
 
procedure TForm4.Timer1Timer(Sender: TObject);
begin
 AssignFile(tfOut, C_FNAME);
 append(tfout);
 writeLN(tfOut, DateToStr(Now),char(9), TimeToStr(Now), char(9), FloatToStrF(ip1,ffFixed,15,3), char(9), FloatToStrF(ip4,ffFixed,15,3), char(9), FloatToStrF(ip5,ffFixed,15,3), char(9), FloatToStrF(ip6,ffFixed,15,3), char(9), FloatToStrF(ip7,ffFixed,15,3), char(9), FloatToStrF(ip2,ffFixed,15,3), char(9), FloatToStrF(ip3,ffFixed,15,3));
 CloseFile(tfOut);
end;
 
procedure TForm4.Button2Click(Sender: TObject);
begin
 dat_alt := '/home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt';
 dat_neu := '/media/usb/temp.txt';
 dat_rename := 'media/usb/'+DateToStr(Now)+'_'+TimeToStr(Now)+'.txt';
 
 mount_process := TProcess.Create(nil);
 unmount_process:= TProcess.Create(nil);
 copy_process:= TProcess.Create(nil);
 rename_process:= TProcess.Create(nil);
 
 mount_process.CommandLine := 'sudo mount /dev/sda1 media/usb'; //Kommandozeile
 unmount_process.CommandLine := 'sudo umount /media/usb';
 copy_process.CommandLine := 'sudo cp /home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt /media/usb/temp.txt';
 rename_process.CommandLine := 'sudo mv /media/usbstick/temp.txt media/usb/'+DateToStr(Now)+'_'+TimeToStr(Now)+'.txt';
 
 //mount_process.Options := mount_process + [poWaitOnExit];
 //unmount_process.Options := unmount_process + [poWaitOnExit];
 
 //CopyFile(dat_alt, dat_neu);
 //RenameFile(dat_neu, dat_rename);
 
 mount_process.Execute;
 copy_process.Execute;
 rename_process.Execute;
 unmount_process.Execute;
 
 mount_process.Free;
 copy_process.Free;
 rename_process.Free;
 unmount_process.Free;
 
 AssignFile(tfOut, C_FNAME);
 rewrite(tfOut);
 writeLN(tfOut,'DD-MM-YY', char(9), 'hh-mm-ss', char(9), 'D', char(9), 'T1', char(9), 'T2',  char(9), 'P', char(9), 'M', char(9), 'Lüfter',  char(9), 'Heizung');
 CloseFile(tfOut);
 Form4.Close;
end;
 
procedure TForm4.Edit1Change(Sender: TObject);
begin
 dateiname := Edit1.Text;
end;
 
procedure TForm4.Edit1EditingDone(Sender: TObject);
begin
 dateiname := Edit1.Text;
 dat_alt := '/home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt';
 dat_neu := '/home/pi/Desktop/LTRS_Datenlogger/temp.txt';
 dat_rename := '/home/pi/Desktop/LTRS_Datenlogger/'+DateToStr(Now)+'_'+TimeToStr(Now)+'_'+dateiname+'.txt';
 CopyFile(dat_alt, dat_neu);
 RenameFile(dat_neu, dat_rename);
 AssignFile(tfOut, C_FNAME);
 rewrite(tfOut);
 writeLN(tfOut,'DD-MM-YY', char(9), 'hh-mm-ss', char(9), 'D', char(9), 'T1', char(9), 'T2',  char(9), 'P', char(9), 'M', char(9), 'Lüfter',  char(9), 'Heizung');
 CloseFile(tfOut);
 Form4.Close;
end;
 
 
 
 
procedure TForm4.Button1Click(Sender: TObject);
begin
 Form4.Close;
end;
 
end.


Leider funktioniert das Kopieren und Umbennen immer noch nicht. In der Konsole scheint das mounten des Sticks zu funktionieren, soweit ich das beurteilen kann.

@ MacWomble: Kannst du mir Infos zu pmount geben? habe dazu leider nichts gefunden.

@ Mathias: Ich verwende als Analog/Digital-Wandler einen MCP3208 zum erfassen der Messwerte und steuer meine Leistungsregler über einen Digital/Analog-Wandler (MCP4922)
Murphy.
 
Beiträge: 20
Registriert: 21. Okt 2016, 18:02

Beitragvon Murphy. » 26. Nov 2016, 03:24 Re: Raspberry Pi - USB Stick

Hallo,

ich habe nochmal etwas rumprobiert. Wenn ich über RemotDesktop auf den Raspberry zu greife und das Terminal ausführe, kann ich eine Datei auf den USB Stick kopieren und diese Umbennen. Leider funktioniert es aus meinem Programm immer noch nicht. Um den Stick zu mounten habe ich mich nach dieser Anleitung gerichtet https://www.elektronik-kompendium.de/sites/raspberry-pi/1911271.htm

Der Programmabschnitt sieht jetzt so aus. Ich teste das Kopieren und Umbenennen mit der Funktion TForm4.Button2Click :
Code: Alles auswählen
unit u_save_form;
 
{$mode objfpc}{$H+}
 
interface
 
uses
 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
 StdCtrls, u_intpolwn_form, unix;
 
const
 C_FNAME = '/home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt';
 
var
 
 rec_intervall: integer;
 tfOut: Textfile;
 dateiname, dat_neu, dat_alt, dat_rename: string;
 
type
 
 { TForm4 }
 
 TForm4 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Edit1: TEdit;
   Label1: TLabel;
   Timer1: TTimer;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Edit1Change(Sender: TObject);
   procedure Edit1EditingDone(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { private declarations }
 public
   { public declarations }
 end;
 
var
 Form4: TForm4;
 
implementation
 
{$R *.lfm}
 
{ TForm4 }
 
procedure TForm4.Timer1Timer(Sender: TObject);
begin
 AssignFile(tfOut, C_FNAME);
 append(tfout);
 writeLN(tfOut, DateToStr(Now),char(9), TimeToStr(Now), char(9), FloatToStrF(ip1,ffFixed,15,3), char(9), FloatToStrF(ip4,ffFixed,15,3), char(9), FloatToStrF(ip5,ffFixed,15,3), char(9), FloatToStrF(ip6,ffFixed,15,3), char(9), FloatToStrF(ip7,ffFixed,15,3), char(9), FloatToStrF(ip2,ffFixed,15,3), char(9), FloatToStrF(ip3,ffFixed,15,3));
 CloseFile(tfOut);
end;
 
procedure TForm4.Button2Click(Sender: TObject);
begin
 dat_alt := '/home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt';
 dat_neu := '/media/usb/temp.txt';
 dat_rename := '/media/usb/umbenannt.txt';
 CopyFile(dat_alt, dat_neu);
 RenameFile(dat_neu, dat_rename);
 
 AssignFile(tfOut, C_FNAME);
 rewrite(tfOut);
 writeLN(tfOut,'DD-MM-YY', char(9), 'hh-mm-ss', char(9), 'D', char(9), 'T1', char(9), 'T2',  char(9), 'P', char(9), 'M', char(9), 'Lüfter',  char(9), 'Heizung');
 CloseFile(tfOut);
 Form4.Close;
end;
 
procedure TForm4.Edit1Change(Sender: TObject);
begin
 dateiname := Edit1.Text;
end;
 
procedure TForm4.Edit1EditingDone(Sender: TObject);
begin
 dateiname := Edit1.Text;
 dat_alt := '/home/pi/Bachelorarbeit/Lazarus/LTRS/temp.txt';
 dat_neu := '/home/pi/Desktop/LTRS_Datenlogger/temp.txt';
 dat_rename := '/home/pi/Desktop/LTRS_Datenlogger/'+DateToStr(Now)+'_'+TimeToStr(Now)+'_'+dateiname+'.txt';
 CopyFile(dat_alt, dat_neu);
 RenameFile(dat_neu, dat_rename);
 AssignFile(tfOut, C_FNAME);
 rewrite(tfOut);
 writeLN(tfOut,'DD-MM-YY', char(9), 'hh-mm-ss', char(9), 'D', char(9), 'T1', char(9), 'T2',  char(9), 'P', char(9), 'M', char(9), 'Lüfter',  char(9), 'Heizung');
 CloseFile(tfOut);
 Form4.Close;
end;
 
procedure TForm4.Button1Click(Sender: TObject);
begin
 Form4.Close;
end;
 
end.
 


Hat jemand Erfahrung mit dem Raspberry in dem Zusammenhang?
Murphy.
 
Beiträge: 20
Registriert: 21. Okt 2016, 18:02

• Themenende •

Zurück zu Linux



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried