Software - Lazarus

Lazarus ist eine sogenannte IDE-Entwicklungsoberfläche, speziell Neulinge "erschlägt" sie anfangs mit ihren Möglichkeiten. Ich nutze sie sowohl auf normalen Computern (Windows/Linux) als auch auf dem RaspberryPi.....

Aber mit etwas Einarbeitung kann man schnell optisch ansprechende objektorientierte (eine Schaltfläche löst eine Aktion aus etc.) Programme mit ansprechender Oberfläche im Look des Betriebssystems erstellen.

Die Programmiersprache ist hier Pascal, grundsätzlich funktioniert die Programmierung ähnlich wie beim kommerziellen Borland Delphi. Die Web-Gemeinschaft ist oft etwas speziell - aber es findet sich immer - in irgendeinem Blog - eine Lösung.

Aufgrund der - prinzipiellen "Verwandschaft" zu o.g. Delphi - können auch in auf Delphi spezialisierten Blog's häufig passende Informationen gefunden werden.

Und...

  • Lazarus ist kostenlos...
  • Lazarus kann sowohl auf Windows als auch auf Linux und anderen Betriebssystemen ausgeführt werden...
  • die eigenen Programme können auf jedem Betriebssystem mit wenigen Änderungen kompiliert und genutzt werden... 

 

Einige Anmerkungen....

Während ich auf Windows i.d. Regel normale Standard-Anwendungen programmiere, sind es auf dem RasPi meist Programme mit Hardware-Anbindung (Ansteuerung von Pin's, Zugriff auf Betriebssystem-Routinen und - Funktionen etc.).

ACHTUNG: Unter WIN und LINUX gibt es verschiedene Formatdefinitionen für Daten, z.B. ist das Dezimaltrennzeichen bei Zahlen unter WIN ein "Komma" und unter LINUX ein "Punkt", ähnliche Unterschiede gibt es z.B. auch bei Datumsformaten etc. Dies müsst Ihr beachten, falls Ihr auf einem Betriebssystem programmiert und das Programm auf dem anderen Betriebssystem ausführen wollt. Mehr dazu findet Ihr wie üblich im Web....

Der Zugriff vom Windows-PC auf den RasPi erfolgt dabei mit einem Fernsteuerungsprogramm "VNC-Viewer" über WLAN, das Lazarus ist dann auf dem RasPi installiert....Dateien tausche ich mit "WinSCP" zwischen Windows und Linux aus.

Für spezielle Aufgaben gibt es bei Laszarus i.d. Regel zusätzliche sogenannte Packages, welche in die eigentliche IDE eingebunden werden oder aber zusätzlich im Projekt geladen werden müssen.  Dies ist leider nicht immer ganz einfach.

Insbesondere beim Thema Hardware-Zugriff gibt es einige wichtige Werkzeuge für Lazarus unter Linux...

WiringPi...

Um mit Lazarus auf dem RasPi die boardeigenen Pin's anzusteuern, nutze ich ein zusätzliches Modul namens "wiringPi".....das müsst Ihr im Web suchen und installieren (hier verweise ich auf entsprechende Anleitungen im Web...)

Ihr bindet das Modul dann im Projektverwalter und in der uses-Klausel in Euer Programm mit ein...

implementation

{$R *.lfm}

{ TForm1 }

uses h2wiringpi;
                   

und hier eine kleines Beispielprozedur....

procedure TForm1.Button7Click(Sender: TObject);
var
  lese_pin, schalt_pin :longint;

  begin
      label1.caption:= 'Programm läuft';

      if wiringpisetup=0 then
         begin

         // LED-Lesen
         schalt_pin:=6;  // Kennung fürr GPIO 25
         lese_pin:=21;  // Kennung für GPIO 5
         // modus einstellen und aktivieren
         pinmode(lese_pin , INPUT);    // pin (0) auf methode INPUT (0) setzen
         pinmode(schalt_pin , OUTPUT);    // pin (0) auf methode INPUT (0) setzen
          //Ausleseschleife
          while checkbox1.checked do
                begin
                if (digitalread(lese_pin) = HIGH) then
                   begin
                   digitalwrite(schalt_pin,0);
                   label1.caption:='LED AN';
                   end;
                if (digitalread(lese_pin) = LOW) then
                   begin
                   digitalwrite(schalt_pin,1);
                   label1.caption:='LED AUS';
                   end;
                delay(100);
                application.processmessages;
                end; // while
          digitalwrite(schalt_pin,0);
          label1.caption:= 'Programm aus';
          end; // endif

end;  

Soweit ich weiss, wird wiringPi allerdings nicht mehr weiterentwickelt und ist auch etwas eingeschränkt in seinen Funktionen, daher müsst / könnt Ihr auch oft nachfolgende Möglichkeiten nutzen...

LazSerial - Komponente

Um mit Lazarus auf dem RasPi auf die seriellen Schnittstellen - hier Bluetooth - zuzugreifen, nutze ich ein zusätzliches Modul namens "LazSerial".....das müsst Ihr ebenfalls im Web suchen und installieren ( auch hier verweise ich auf entsprechende Anleitungen im Web...)

Nach erfolgreicher Installation habt Ihr dann unter den Werzeugen eine Rubrik "LazSerial" mit einer dargestellten Computer - Schnittstelle und könnt die Komponente dann benutzen. 

Auf meinem RasPi ist die Konfiguration der Komponente wie folgt...

Baudratebr1152000
DataBitsdb8bits
Device/dev/rfcomm0
FlowControlfcNone
NameLazSerial1
ParityNone
RcvLineCRLFTRUE
StopBitssbOne
Tag0

Process und RunCommand...

Ihr könnt mit dem Lazarus-Befehl "process" sowohl einzelne Betriebssystem-Befehle wie auch echte Programme ( z.B. Phyton-Programme - oft für Sensoren etc. vom hersteller zur Verfügung gestellt ) als programmexterne Routinen aufrufen und die Rückgabewerte auswerten..

Desweiteren gibt es auch noch die Möglichkeit "RunCommand" für die Ausführung externer Scripte - z.B. sogenannter Batch-Programme ( WIN .bat / Linux .sh ).

hier als Aufruf eines Betriebssystem-Befehls...und einer externen Script-Datei...

procedure TForm1.FormActivate(Sender: TObject);
var
 my_process:TProcess;
 my_proclist:TStringList;
  s:string;
  i:integer;

begin
   // {
  memo1.lines.clear;
  memo1.lines.add('Suche ESP...') ;
  application.processmessages;
  // nachschauhen, ob esp da ist
  my_process:=TProcess.create(nil);
  my_proclist:=TStringlist.create;
  // scannt nach aktuellen Bluetooth Geräten
  my_process.commandline:= ('hcitool scan');
  my_process.options:=my_process.options +  [ poWaitOnExit, poUsePipes];
  my_process.execute;
  my_proclist.LoadFromStream(my_process.output);
  for i:=0 to my_proclist.count-1 do
      begin
      s:=my_proclist[i];
      if Pos( 'ESP32_Lidar', s) <> 0 then
         begin
         // bindet automatisch den esp32 ein
         if RunCommand('blueschuh_esp32_verbinden.sh',['-c','echo $PATH'],s) then
           begin
           memo1.lines.add('Warte auf Anbinden des ESP.....');
           application.processmessages;
           // wenn beim nachfolgenden Befehl der esp nicht da ist, hängt das Programm
           try
             LazSerial1.active:=true;
           except
           end;
           if LazSerial1.active=true then memo1.lines.add('ESP anbinden erfolgreich');
           end else memo1.lines.add('ESP anbinden fehlgeschlagen') ;
          end;
      end;
  my_proclist.free;
  my_process.free;
  // }

end;   

hier als Aufruf eines externen Phyton-Programmes...

procedure TForm1.Button6Click(Sender: TObject);
var
my_process:TProcess;
my_proclist:TStringList;
begin

  my_process:=TProcess.create(nil);
  my_proclist:=TStringlist.create;

  // ruft das python-script auf
  my_process.commandline:= ('python  /home/pi/daten/i2c_ina219/ina_test2_ferngesteuert.py');
  my_process.options:=my_process.options +  [ poWaitOnExit, poUsePipes];

  // und führt es aus
  my_process.execute;

  // lädt den Rückgabestream
  my_proclist.LoadFromStream(my_process.output);

  // stellt ergebniss dar
  memo1.lines:= my_proclist;
  edit3.text:= my_proclist[0];
  // edit2.text:=copy(edit2.text,6,4);

  // speicher freigeben
  my_proclist.free;
  my_process.free;
end;
 

 

Kompliziert ??... nun ja, Lazarus ist echt eine vollwertige Programmieroberfläche....

 

zurück zur Startseite