Raspberry Pi - USB Stick

Antworten
Murphy.
Beiträge: 20
Registriert: Fr 21. Okt 2016, 19:02

Raspberry Pi - USB Stick

Beitrag von Murphy. »

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 ?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Raspberry Pi - USB Stick

Beitrag von af0815 »

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

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Raspberry Pi - USB Stick

Beitrag von MacWomble »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Raspberry Pi - USB Stick

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Murphy.
Beiträge: 20
Registriert: Fr 21. Okt 2016, 19:02

Re: Raspberry Pi - USB Stick

Beitrag von Murphy. »

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: Fr 21. Okt 2016, 19:02

Re: Raspberry Pi - USB Stick

Beitrag von Murphy. »

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?

Antworten