Anfrage Programmierung Raspberry Pi
Anfrage Programmierung Raspberry Pi
Hallo
Ich habe eine Anfrage bekommen, ob ich einen Raspberry Pi so programmieren kann, dass er auf einen Bewegungssensor reagiert und falls jemand in der Nähe ist, eines von einer Serie von Videos abspielt.
Da ich bisher nichts mit Sensoren am Raspi zu tun hatte, wollte ich mal fragen, ob ihr da einen Weg seht.
Sensor wäre der:
https://thepihut.com/blogs/raspberry-pi ... -detection
https://tutorials-raspberrypi.de/raspbe ... ensor-pir/
Wie man von Lazarus aus die Videos steuert, wäre auch noch eine Frage. Oder wäre Python einfacher? Kenne ich allerdings auch kaum.
Da es etwas eilt, möchte ich den Job (begrenztes Budget) nur zusagen, falls ich (hoffentlich mit eurer Hilfe) einen Weg zum Ziel sehe.
Danke!
Ich habe eine Anfrage bekommen, ob ich einen Raspberry Pi so programmieren kann, dass er auf einen Bewegungssensor reagiert und falls jemand in der Nähe ist, eines von einer Serie von Videos abspielt.
Da ich bisher nichts mit Sensoren am Raspi zu tun hatte, wollte ich mal fragen, ob ihr da einen Weg seht.
Sensor wäre der:
https://thepihut.com/blogs/raspberry-pi ... -detection
https://tutorials-raspberrypi.de/raspbe ... ensor-pir/
Wie man von Lazarus aus die Videos steuert, wäre auch noch eine Frage. Oder wäre Python einfacher? Kenne ich allerdings auch kaum.
Da es etwas eilt, möchte ich den Job (begrenztes Budget) nur zusagen, falls ich (hoffentlich mit eurer Hilfe) einen Weg zum Ziel sehe.
Danke!
- kupferstecher
- Beiträge: 431
- Registriert: Do 17. Nov 2016, 11:52
Re: Anfrage Programmierung Raspberry Pi
Der Sensor liefert wohl ein Digitalsignal auf einer Leitung, das du auf einen GPIO (general purpose IO) legst. Also wie ein Taster. Die Auswertung ist einfach.
Zum Thema Video, es gibt wohl ein VLC-Plugin, hab aber selber nie etwas damit gemacht, nur davon gehört. Vielleicht reicht es auch, das Video per Command/Prozess in einem externen Player zu starten?
Zum Thema Video, es gibt wohl ein VLC-Plugin, hab aber selber nie etwas damit gemacht, nur davon gehört. Vielleicht reicht es auch, das Video per Command/Prozess in einem externen Player zu starten?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Anfrage Programmierung Raspberry Pi
Richtig. Das ist eine Standard Komponente bei Arduino. Du musst einfach nur Spannung, Masse und ein IO Pin nutzen. Probleme könnte es bei der 3V Versorgung geben. Es könnte sein, dass der mit 3V Arbeiten kann, einfach ausprobieren. Oder du musst ihn mit 5 Volt versorgen und ein Spannungsteiler zwischen dem OUT und dem IO Pin setzten bzw. ein Transistor könnte auch gehen.kupferstecher hat geschrieben:Der Sensor liefert wohl ein Digitalsignal auf einer Leitung, das du auf einen GPIO (general purpose IO) legst. Also wie ein Taster. Die Auswertung ist einfach.
Ich habe davon einige hier rum liegen. Sie brauchen z.b. ca um die 4 Sekunden Abstand zwischen den erneuten Auslösen.
Socke hat, dafür eine Lib geschrieben, um sowas mit dem PI umzusetzen.
Hinweis: Die PI's können nur mit 3V umgehen nicht mit 5V. Sie können soweit, 5V Komponenten versorgen, aber nicht bei den IO Pins, die gehen direkt zu der CPU. Baut man hier ein Kurzen, ist der PI hin(höchstwahrscheinlich).
MFG
Michael Springwald
Michael Springwald
- af0815
- Lazarusforum e. V.
- Beiträge: 6762
- 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: Anfrage Programmierung Raspberry Pi
Video sollte mit V4L2 bzw. gstreamer gehen. Sollte der 3B+ oder 4 sein, sonst wird es je nach Video eng. Ich habe beides für USB-Kameras im Einsatz mit RasPi.
GPIO geht ohne großen Aufwand. Code dazu kann ich liefern.
Es sind hier zwei Varianten versteckt die man mit UseGPIOHAL umschalten kann. Ich verwende die Variante ohne UseGPIOHAL normalerweise, da die kein root benötigt. Frag mich nur nicht nach der RPI_HAL. die muss ich erst suchen 
GPIO geht ohne großen Aufwand. Code dazu kann ich liefern.
Code: Alles auswählen
uses
...
{$IFDEF RasPi}
{$IfDef UseGPIOHAL} // GPIO HAL (bedingt root)
,rpi_hal
{$Else}
, unix
, BaseUnix
{$EndIf}
{$endif}
....
procedure TMain.StartUp;
begin
{$IFDEF RasPi}
// gibt es nur am RasPi
{$IfDef UseGPIOHAL} // GPIO HAL (bedingt root)
if not RPI_HW_Start([InitHaltOnError,InitGPIO]) then begin
//showmessage('GPIO Hardware Error');
{$IfDef DbgGPIO}Debugln('GPIO Hardware Error');{$EndIf}
FCloseRequired:=true;
end
else begin
GPIO_set_input(16);
end;
{$Else}
{ Prepare SoC pin 16 (pin 36 on GPIO port) for access: }
try
fileDesc := fpopen('/sys/class/gpio/export', O_WrOnly);
gReturnCode := fpwrite(fileDesc, PIN_16[0], 2);
{$IfDef DbgGPIO}Debugln('ST1-FD:'+IntToHex(fileDesc,4));{$EndIf}
{$IfDef DbgGPIO}Debugln('ST1-Ret:'+IntToHex(gReturnCode,4));{$EndIf}
finally
gReturnCode := fpclose(fileDesc);
end;
{ Set SoC pin 16 as output: = GPIO 36 }
try
fileDesc := fpopen('/sys/class/gpio/gpio16/direction', O_WrOnly);
gReturnCode := fpwrite(fileDesc, IN_DIRECTION[0], 3);
{$IfDef DbgGPIO}Debugln('ST2-FD:'+IntToHex(fileDesc,4));{$EndIf}
{$IfDef DbgGPIO}Debugln('ST2-Ret:'+IntToHex(gReturnCode,4));{$EndIf}
finally
gReturnCode := fpclose(fileDesc);
end;
{$EndIf}
{$endif}
end;
var
OldState, LastState, Newstate : boolean;
procedure TMain.TimerTimer(Sender: TObject);
var
EV : String;
IsOk: Boolean;
Delta: Integer;
{$IFDEF RasPi}
{$IfnDef UseGPIOHAL}
fileDesc: integer;
buttonStatus: string[1] = '1';
{$EndIf}
{$EndIf}
begin
Timer.Enabled:= false;
try
// GPIO behandeln
{$IFDEF RasPi}
{$IfDef UseGPIOHAL}
// GPIO HAL (bedingt root)
NewState := GPIO_get_PIN(16);
{$Else}
//
try
{ Open SoC 16 (pin 36 on GPIO port) in read-only mode: }
fileDesc := fpopen('/sys/class/gpio/gpio16/value', O_RdOnly);
EdtGPIO.Text:= 'FD:'+IntToHex(fileDesc,4);
{$IfDef DbgGPIO}Debugln('Tim1-FD:'+IntToHex(fileDesc,4));{$EndIf}
if fileDesc > 0 then
begin
{ Read status of this pin (0: button pressed, 1: button released): }
gReturnCode := fpread(fileDesc, buttonStatus[1], 1);
NewState := (buttonStatus = PIN_ON);
EdtGPIO1.Text:= buttonStatus;
{$IfDef DbgGPIO}Debugln('Tim2-FD:'+IntToHex(fileDesc,4));{$EndIf}
{$IfDef DbgGPIO}Debugln('Tim2-Ret:'+IntToHex(gReturnCode,4));{$EndIf}
{$IfDef DbgGPIO}Debugln('GPIO:' + buttonStatus);{$EndIf}
end;
finally
{ Close SoC pin 18 (pin 12 on GPIO port) }
gReturnCode := fpclose(fileDesc);
end;
{$EndIf}
CBRPiIn.Checked := Newstate;
If (LastState = Newstate) and LastState then begin
// 2 Durchläufe vorhanden
if OldState <> LastState then
DoIrgendwas;
OldState := LastState;
end;
LastState := Newstate;
if not Newstate then
OldState:=false;
{$endif}
finally
Timer.Enabled:= true;
end;
end;
procedure TMain.FormDestroy(Sender: TObject);
{$IFDEF RasPi}
{$IfNDef UseGPIOHAL} // GPIO HAL (bedingt root)
var
fileDesc: integer;
{$EndIf}
{$endif}
begin
Timer.Enabled := false;
{$IFDEF RasPi}
{$IfNDef UseGPIOHAL} // GPIO HAL (bedingt root)
try
fileDesc := fpopen('/sys/class/gpio/unexport', O_WrOnly);
gReturnCode := fpwrite(fileDesc, PIN_16[0], 2);
finally
gReturnCode := fpclose(fileDesc);
end;
{$EndIf}
{$endif}
end;

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Anfrage Programmierung Raspberry Pi
Danke erst einmal für alle Antworten.
Ich schaue mir das mal an.

Ich schaue mir das mal an.
- af0815
- Lazarusforum e. V.
- Beiträge: 6762
- 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: Anfrage Programmierung Raspberry Pi
Man kann gstreamer per TProcess recht gut starten und dem die ganze Videoarbeit aufbürden. Der Vorteil ist, man kann das ganze auf der Kommandozeile testen und dann einfach das in Pascal verwenden. Ich habe auch für meine Zwexke einen Pascal Wrapper für gstreamer 1.0, nur dort wird die Sache viel härter, man sollte dann wissen wie der gstreamer und die Pipelines funktionieren + viel Geduld fürs testen haben 
V4L2 geht auch recht gut, nur habe ich da keine Erfahrung wie man die Daten hinein bekommt. Anzeigen ist nicht das große Problem.
Start
Stop

V4L2 geht auch recht gut, nur habe ich da keine Erfahrung wie man die Daten hinein bekommt. Anzeigen ist nicht das große Problem.
Start
Code: Alles auswählen
AProcess := TProcess.Create(nil);
AProcess.Executable := '/bin/sh';
AProcess.Parameters.Add('-c');
AProcess.Parameters.Add('/usr/bin/gst-launch-1.0 -v ... gst commands...');
AProcess.Options := [poUsePipes];
AProcess.Execute;
Code: Alles auswählen
function IsCommandRunning(cmd:String):THandle;
var
t:TProcess;
s,s1:TStringList;
erg: integer;
h1,h2,h3:string;
begin
Result:=0;
t:=tprocess.create(nil);
t.Executable:='ps';
t.Parameters.Add('-C'+cmd);
t.Options:=[poUsePipes,poWaitonexit];
try
t.Execute;
s:=tstringlist.Create;
try
s.LoadFromStream(t.Output);
if s.Count > 1 then begin
// Zeile 0 = Text
h1:= s[1];
s1:=TStringList.Create;
try
s1.Delimiter:=#32;
s1.StrictDelimiter:=true;
s1.DelimitedText:= trim(s[1]);
h2:= s1[0];
erg := 0;
if s1.Count > 1 then
TryStrToInt(s1[0],erg);
Result:=erg;
finally
s1.free;
end;
end;
finally
s.free;
end;
finally
t.Free;
end;
end;
procedure xxxx;
begin
...
// shutdown gst-launch
h:= IsCommandRunning('gst-launch-1.0');
{$ifdef KAMERADEBUG}
DebugLn('gstreamer Handle='+IntToStr(h));
{$endif}
if h > 0 then begin
if fpkill(h,SIGINT)<>0 then
DebugLn(DateTimeToStr(now) + {$I %FILE%} + '->' +{$I %CURRENTROUTINE%}+'SIGINT NOK');
end;
end;
.....
end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Anfrage Programmierung Raspberry Pi
Was auch eine Variante ist, einen Arduino Nano an den USB des PIs anschliessen.
Auf dem Nano ein kleiner Brückensketch laufen lassen.
Hat mehrere Vorteile.
5V
Software auf dem schnellen PC entwickeln.
Bei einem Kurzschluss ist nur ein billiger Nano zerstört.
Auf dem Nano ein kleiner Brückensketch laufen lassen.
Hat mehrere Vorteile.
5V
Software auf dem schnellen PC entwickeln.
Bei einem Kurzschluss ist nur ein billiger Nano zerstört.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- af0815
- Lazarusforum e. V.
- Beiträge: 6762
- 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: Anfrage Programmierung Raspberry Pi
Optokoppler kann ich nur wärmsten empfehlen. Nie die GPIO direkt mit der Aussenwelt verbinden. Und ja, Achtung auf die 3.3V, da hat Mathias schon recht, nur statt einen Nano zu verwenden, gleich einen Optokoppler nehmen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Anfrage Programmierung Raspberry Pi
Vielen Dank an alle!
Ich habe den Job abgelehnt, da ich auch dank euch zur Einsicht gelangt bin, dass ich mich da in der knappen Zeit kaum einarbeiten bzw. genügend Erfahrung sammeln kann, um eine professionelle Lösung abzuliefern.
Ihr wart mal wieder sehr hilfreich.
Ich werde das Thema bei Gelegenheit erst einmal als Hobby angehen.
Ich habe den Job abgelehnt, da ich auch dank euch zur Einsicht gelangt bin, dass ich mich da in der knappen Zeit kaum einarbeiten bzw. genügend Erfahrung sammeln kann, um eine professionelle Lösung abzuliefern.
Ihr wart mal wieder sehr hilfreich.

Ich werde das Thema bei Gelegenheit erst einmal als Hobby angehen.
Re: Anfrage Programmierung Raspberry Pi
Damit dieser Thread nicht ganz ohne Ergebnis bleibt:
Habe mir jetzt für erste Gehversuche dieses "Arduino Uno Starterset* geholt.
Für umgerechnet € 42.77 finde ich das ganz lustig, für den Anfang.
Danke nochmals für die Inputs. Ich werde bestimmt noch weitere Fragen haben.
Habe mir jetzt für erste Gehversuche dieses "Arduino Uno Starterset* geholt.
Für umgerechnet € 42.77 finde ich das ganz lustig, für den Anfang.
Danke nochmals für die Inputs. Ich werde bestimmt noch weitere Fragen haben.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Anfrage Programmierung Raspberry Pi
Der kostet ja ein halbes Vermögen.
45.- für die paar Bauteile.

45.- für die paar Bauteile.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Anfrage Programmierung Raspberry Pi
Ein halbes Vermögen würde ich nicht direkt sagen.
Man kann das auch noch viel teurer kaufen:
https://www.digitec.ch/de/s1/product/ma ... lsrc=aw.ds
Natürlich kann man sich das alles einzeln zusammensuchen, aber ich bezahle gerne auch etwas dafür, dass das alles erst einmal zusammenpasst und alles da ist, was man braucht.
"Starter" eben.
Man kann das auch noch viel teurer kaufen:
https://www.digitec.ch/de/s1/product/ma ... lsrc=aw.ds

Natürlich kann man sich das alles einzeln zusammensuchen, aber ich bezahle gerne auch etwas dafür, dass das alles erst einmal zusammenpasst und alles da ist, was man braucht.
"Starter" eben.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Anfrage Programmierung Raspberry Pi
Oder direkt beim Chinesen, da bekommt man es für 20.-
Bei Conrad und Digtec finanzierst du nur die Zwischenhändler.
Welche es auch aus China kaufrn.
Bei Conrad und Digtec finanzierst du nur die Zwischenhändler.
Welche es auch aus China kaufrn.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Anfrage Programmierung Raspberry Pi
Jeder wie er mag, dafür habe ich das Ding jetzt und nicht vielleicht in zwei Monaten, wie meine letzte China Bestellung.Mathias hat geschrieben: Do 27. Aug 2020, 22:05 Oder direkt beim Chinesen, da bekommt man es für 20.-
Bei Conrad und Digtec finanzierst du nur die Zwischenhändler.
Welche es auch aus China kaufrn.

Die paar Kröten sind jetzt echt nicht mein Hauptproblem.
- af0815
- Lazarusforum e. V.
- Beiträge: 6762
- 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: Anfrage Programmierung Raspberry Pi
Ich hätte eher geglaubt due nimmst sowas für den RasPi https://www.amazon.de/Freenove-Raspberr ... B06VTH7L28 als Starterset. Weil es ging ja um den RasPi und nicht um Arduino.
Fertige Systeme gibt es auch
https://www.mass.de/de/produkte/raspber ... rpi10.html ist Industrietauglich (mit 12V-24V) und kostet auch soviel. Dafür Metallgehäuse und durchdachter Aufbau.
https://www.amazon.de/GeeekPi-Prototype ... B07MCX54ZD da kann man einen Optokoppler drauf löten und die Sache ist mit dem richtigen Gehäuse auch gegessen.
Fertige Systeme gibt es auch

https://www.amazon.de/GeeekPi-Prototype ... B07MCX54ZD da kann man einen Optokoppler drauf löten und die Sache ist mit dem richtigen Gehäuse auch gegessen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).