Thread Kommunikation zwischen zwei Scripts (in eine Richtung) - PIPEs? (6 answers)
Opened by phischmi at 2016-07-16 00:24

hlubenow
 2016-07-17 18:21
#185088 #185088
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
Guest phischmi
Nun ist meine Idee, die Kommunikation zum Arduino aufrecht zu erhalten und das Script mit wechselnden Werten zu füttern, ohne es jedesmal explizit mit einem anderen Parameter aufzurufen.
Stattdessen würde ich ein zweites Hilfsscript "zwischenschalten" wollen und mit dem gewünschten Parameter aufrufen. Dieses kommuniziert dann mit dem Script, welches die serielle Verbindung mit dem Arduino hält.
Soweit mein Plan :D

Ok, dann also so (Linux):
1. Führe folgendes bash-Skript aus:
Code: (dl )
1
2
3
4
#!/bin/bash

mkfifo myfifo
cat > myfifo & mypid=$!

Dann siehst Du ein eigenartiges neues File "myfifo" im Verzeichnis (named pipe).

2. Dein Skript zum Senden ("worker.pl") sollte dann etwa so aussehen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env perl

# worker.pl

use Device::SerialPort::Arduino;

use warnings;
use strict;

my $Arduino = Device::SerialPort::Arduino->new(
    port     => '/dev/tty.usbmodemFA131',
    baudrate => 9600,
    databits => 8,
    parity   => 'none',
);

my $line = "nothing";
print "Worker running.\n";
while ($line ne "exit") {
    $line = <>;
    if ($line) {
        chomp($line);
        print "I got: $line\n";
        $Arduino->communicate($line);
        next;
    } else {
        $line = "nothing";
    }
    sleep(1);
}
print "Worker finished.\n";

# receive sth from Arduino with delay
# print $Arduino->receive(2), "\n";

Führe "worker.pl" folgendermaßen aus:
Code: (dl )
./worker.pl < myfifo


3. Jetzt liest worker.pl Daten aus myfifo (und sendet diese an Arduino).
Mit
Code: (dl )
echo 100 > myfifo

sendet man Daten über myfifo nach worker.pl. Man beendet worker.pl entweder mit Strg+C, oder man sendet ihm "exit" über den echo-Befehl.

Ich kann den Arduino-Teil nicht testen, aber die Pipe-Kommunikation geht bei mir soweit.

View full thread Kommunikation zwischen zwei Scripts (in eine Richtung) - PIPEs?