Delphi/Lazarus - API Bindings

Die Delphi/Lazarus Bindings ermöglichen es Bricks und Bricklets aus selbst erstellen Delphi/Lazarus Programmen heraus zu steuern. Die ZIP Datei für die Bindings beinhaltet:

  • in source/ den Quelltext der Bindings
  • in examples/ die Beispiele für alle Bricks und Bricklets

Voraussetzungen

  • Delphi 2007 oder neuer, oder Lazarus (Free Pascal Compiler 2.4 oder neuer), andere Delphi oder Object Pascal Compiler sollten auch funktionieren

Installation

Um die Delphi/Lazarus Bindings einfach zu halten haben sie nur externe Abhängigkeiten, die möglichst überall verfügbar sind, wodurch sie leicht in jegliches Projekt eingebunden werden können. Wir bieten keine vorkompilierte Bibliothek an, da dies zu viel Aufwand wäre alle möglichen Kombinationen von Architekturen und Betriebssystem zu versorgen. Die Bindings sollten aber auf den meisten Architekturen (ARM, x86, etc.) und den meisten Betriebssystemen (Windows und POSIX Systeme, wie Linux und macOS, usw.) lauffähig sein.

Da es keine vorkompilierte Bibliothek für die Delphi/Lazarus Bindings gibt, gibt es in diese Sinne auch nichts zu installieren. Die empfohlene Art und Weise die Bindings zu verwenden, ist ihren Quelltext direkt in das jeweilige Delphi/Lazarus Projekt mit einzubinden. Der folgenden Abschnitt zeigt an verschiedenen Beispielen auf wie das gemacht werden kann.

Test eines Beispiels

Um ein Delphi/Lazarus Beispiel testen zu können müssen zuerst Brick Daemon und Brick Viewer installiert werden. Brick Daemon arbeitet als Proxy zwischen der USB Schnittstelle der Bricks und den API Bindings. Brick Viewer kann sich mit Brick Daemon verbinden und gibt Informationen über die angeschlossenen Bricks und Bricklets aus.

Als Beispiel werden wir das Stepper Brick Konfigurationsbeispiel mit dem Free Pascal Compiler (FPC), sowie der Lazarus IDE und der Delphi IDE kompilieren. Dafür müssen die IP Connection und die Stepper Brick Bindings vom source/ Ordner sowie ExampleConfiguration.pas aus dem examples/Brick/Stepper/ Ordner in ein neuen Ordner kopiert werden:

example_project/
 -> Base58.pas
 -> BlockingQueue.pas
 -> BrickDaemon.pas
 -> Device.pas
 -> DeviceBase.pas
 -> IPConnection.pas
 -> LEConverter.pas
 -> SHAone.pas
 -> TimedSemaphore.pas
 -> BrickStepper.pas
 -> ExampleConfiguration.pas

Am Anfang des Beispiels ist mit HOST und PORT angegeben unter welcher Netzwerkadresse der Stepper Brick zu erreichen ist. Ist er lokal per USB angeschlossen dann ist localhost und 4223 richtig. Als UID muss die UID des angeschlossen Stepper Bricks angegeben werden, diese kann über den Brick Viewer ermittelt werden:

const
  HOST = 'localhost';
  PORT = 4223;
  UID = 'XYZ'; { Change to your UID }

Free Pascal Compiler (FPC)

FPC findet die verwendeten Units automatisch, dadurch sieht der Befehl für die Kompilierung des Beispiels mit FPC wie folgt aus:

fpc ExampleConfiguration.pas

Runtime Error 211

Wenn Runtime Error 211 beim Starten des Programms auftritt, oder das Programm folgendes ausgibt:

Threading has been used before cthreads was inizialized.

Dann muss CThreads am Anfang der Uses Liste des Programms eingefügt werden.

Lazarus IDE

Mit Lazarus kann der example_project/ Ordner so verwendet werden:

  • Project
  • New Project from file ...
  • Wähle example_project/ExampleConfiguration.pas
  • Klicke Open
  • Wähle "Console Application"
  • Klicke OK
  • Wähle einen "Application Class Name" und "Title"
  • Klicke OK

Jetzt kann das Projekt kompiliert und gestartet werden!

Runtime Error 211

Wenn Runtime Error 211 beim Starten des Programms auftritt, oder das Programm folgendes ausgibt:

Threading has been used before cthreads was initialized.

Dann muss -dUseCThreads zu den Lazarus Compilereinstellungen hinzugefügt werden:

  • Projekt
  • Projekteinstellungen ...
  • Compilereinstellungen
  • Andere

Jetzt das Projekt neu kompilieren. Falls dies das Problem nicht behebt, dann muss CThreads am Anfang der Uses Liste des Programms eingefügt werden.

Delphi IDE

Mit Delphi XE2 (ältere Delphi-Versionen sollten ähnlich funktionieren) kann der example_project/ Ordner wie folgt verwendet werden. Zuerst muss ExampleConfiguration.pas in ExampleConfiguration.dpr umbenannt werden dann bleiben noch diese Schritte:

  • Project
  • Add Existing Project...
  • Choose example_project/ExampleConfiguration.dpr
  • Klicke Open

Jetzt kann das Projekt kompiliert und gestartet werden!

API Referenz und Beispiele

Links zur API Referenz der IP Connection, Bricks und Bricklets sowie die Beispiele aus der ZIP Datei der Bindings sind in der folgenden Tabelle aufgelistet. Anleitungen für weiterführende Projekte finden sich im Abschnitt über Kits.

  API Beispiele
IP Connection API Beispiele
     
Bricks    
DC API Beispiele
IMU 2.0 API Beispiele
Master API Beispiele
RED API Beispiele
Servo API Beispiele
Silent Stepper API Beispiele
Stepper API Beispiele
     
Bricks (Abgekündigt)    
IMU API Beispiele
     
Bricklets    
Accelerometer API Beispiele
Accelerometer 2.0 API Beispiele
Air Quality API Beispiele
Ambient Light 3.0 API Beispiele
Analog In 3.0 API Beispiele
Analog Out 2.0 API Beispiele
Analog Out 3.0 API Beispiele
Barometer API Beispiele
Barometer 2.0 API Beispiele
CAN API Beispiele
CAN 2.0 API Beispiele
CO2 2.0 API Beispiele
Color API Beispiele
Distance IR API Beispiele
Distance IR 2.0 API Beispiele
DMX API Beispiele
Dual Button API Beispiele
Dual Button 2.0 API Beispiele
Dual Relay API Beispiele
Dust Detector API Beispiele
E-Paper 296x128 API Beispiele
GPS 2.0 API Beispiele
Hall Effect API Beispiele
Hall Effect 2.0 API Beispiele
Humidity 2.0 API Beispiele
Industrial Analog Out API Beispiele
Industrial Analog Out 2.0 API Beispiele
Industrial Counter API Beispiele
Industrial Digital In 4 2.0 API Beispiele
Industrial Digital Out 4 API Beispiele
Industrial Digital Out 4 2.0 API Beispiele
Industrial Dual 0-20mA API Beispiele
Industrial Dual 0-20mA 2.0 API Beispiele
Industrial Dual Analog In API Beispiele
Industrial Dual Analog In 2.0 API Beispiele
Industrial Dual Relay API Beispiele
Industrial Quad Relay 2.0 API Beispiele
IO-16 API Beispiele
IO-16 2.0 API Beispiele
IO-4 2.0 API Beispiele
Isolator API Beispiele
Joystick API Beispiele
Joystick 2.0 API Beispiele
Laser Range Finder 2.0 API Beispiele
LCD 128x64 API Beispiele
LCD 20x4 API Beispiele
LED Strip 2.0 API Beispiele
Line API Beispiele
Linear Poti API Beispiele
Linear Poti 2.0 API Beispiele
Load Cell 2.0 API Beispiele
Moisture API Beispiele
Motion Detector API Beispiele
Motion Detector 2.0 API Beispiele
Motorized Linear Poti API Beispiele
Multi Touch API Beispiele
NFC API Beispiele
OLED 128x64 API Beispiele
OLED 128x64 2.0 API Beispiele
OLED 64x48 API Beispiele
One Wire API Beispiele
Outdoor Weather API Beispiele
Particulate Matter API Beispiele
Piezo Speaker API Beispiele
Piezo Speaker 2.0 API Beispiele
PTC 2.0 API Beispiele
Real-Time Clock API Beispiele
Real-Time Clock 2.0 API Beispiele
Remote Switch 2.0 API Beispiele
RGB LED API Beispiele
RGB LED 2.0 API Beispiele
RGB LED Button API Beispiele
Rotary Encoder 2.0 API Beispiele
Rotary Poti API Beispiele
RS232 API Beispiele
RS232 2.0 API Beispiele
RS485 API Beispiele
Segment Display 4x7 API Beispiele
Segment Display 4x7 2.0 API Beispiele
Solid State Relay 2.0 API Beispiele
Sound Intensity API Beispiele
Sound Pressure Level API Beispiele
Temperature API Beispiele
Temperature 2.0 API Beispiele
Temperature IR 2.0 API Beispiele
Thermal Imaging API Beispiele
Thermocouple 2.0 API Beispiele
Tilt API Beispiele
UV Light API Beispiele
UV Light 2.0 API Beispiele
Voltage/Current 2.0 API Beispiele
     
Bricklets (Abgekündigt)    
Ambient Light API Beispiele
Ambient Light 2.0 API Beispiele
Analog In API Beispiele
Analog In 2.0 API Beispiele
Analog Out API Beispiele
CO2 API Beispiele
Current12 API Beispiele
Current25 API Beispiele
Distance US API Beispiele
GPS API Beispiele
Humidity API Beispiele
Industrial Digital In 4 API Beispiele
Industrial Quad Relay API Beispiele
IO-4 API Beispiele
Laser Range Finder API Beispiele
LCD 16x2 API Beispiele
LED Strip API Beispiele
Load Cell API Beispiele
NFC/RFID API Beispiele
Piezo Buzzer API Beispiele
PTC API Beispiele
Remote Switch API Beispiele
RGB LED Matrix API Beispiele
Rotary Encoder API Beispiele
Solid State Relay API Beispiele
Temperature IR API Beispiele
Thermocouple API Beispiele
Voltage API Beispiele
Voltage/Current API Beispiele