Forum: Mikrocontroller und Digitale Elektronik 2 RaspberryPis über Bluetooth koppeln


von checkeranonym (Gast)


Lesenswert?

Hallo,

ich habe ein paar Fragen. Ich versuche zwei RaspberryPis über Bluetooth 
zu koppeln. Ich habe anhand Tutorials für die Kopplung mit anderen 
Geräten, wie z.B. Tastaturen oder Lautsprecher, die Einstellungen auf 
den jeweiligen RaspberryPis getroffen. Leider können die RaspberryPis 
keine Verbindung miteinander aufbauen. Beide haben die gleiche 
MAC-Adresse und den selben Namen.

Könnte es daran liegen? Oder kann man 2 RaspberryPis überhaupt nicht per 
Bluetooth koppeln? Eine Meldung für eine Bestätigungspin ploppt auch 
nicht auf. Es kommen nur Meldungen, dass die Verbindung nicht möglich 
ist.

Ich versuche einen RaspberryPi 3B und einen RaspberryPi 4 zu koppeln. 
Danke im Voraus.

von 50c (Gast)


Lesenswert?

checkeranonym schrieb:
> Es kommen nur Meldungen, dass die Verbindung nicht möglich
> ist.

...die da wären?

von S.P. (Gast)


Lesenswert?

Das hat genau genommen nichts direkt mit Raspberry Pi zu tun. Suche mal 
nach Tutorials über die Einrichtung eines Bluetooth Personal Area 
Network (PAN) unter Linux.

von checkeranonym (Gast)



Lesenswert?

Die folgenden Fehlermeldungen kommen. Einmal in der Konsolenanwendung 
und einmal wenn ich die Geräte über das Symbol in der Taskleiste 
verbinden möchte.

Das mit dem PAN schau ich mir mal an.

von c-hater (Gast)


Lesenswert?

checkeranonym schrieb:

> Leider können die RaspberryPis
> keine Verbindung miteinander aufbauen. Beide haben die gleiche
> MAC-Adresse und den selben Namen.
>
> Könnte es daran liegen?

Der Name ist Wurscht. Aber gleiche MAC kann natürlich nicht 
funktionieren, da braucht man wirklich nicht lange drüber nachdenken...

> Oder kann man 2 RaspberryPis überhaupt nicht per
> Bluetooth koppeln?

Das müsste sogar über zwei Wege gehen, SPI oder PAN.

von checkeranonym (Gast)


Lesenswert?

Hallo,

ich habe mich jetzt genauer mit den MAC-Adressen beschäftigt. Wenn ich 
im hcitool bei der Zeile BD-Adress nach schaue, haben beide eine 
unterschiedliche MAC-Adresse. Wenn ich den Befehl bluetoothctl eingebe 
und dort  scan on eingebe, finden beide Pis die Adresse die im oberen 
Bild meines vorigen Posts zu sehen ist (A4....).


Wenn ich mit dem hcitool einen Scan durchführe, findet beide Pis keine 
anderen Geräte.


Woran könnte es liegen? Ich gehe bis jetzt davon aus, dass beide 
RaspberryPis bereits ein Bluetoothmodul von Haus aus. integriert haben. 
Oder brauche ich einen extra Bluetoothdongle für jeden Pi? Danke im 
Voraus.

von checkeranonym (Gast)


Lesenswert?

Hallo,

da ich keine Lösung gefunden habe auch die Tutorials aus dem Internet 
nicht funktioniert haben, versuche ich jetzt die Daten über Ethernet zu 
übertragen. Leider kommen ebenfalls Fehlermeldungen. Es geht darum, dass 
ich ein Programm geschrieben habe, dass beim Druck eines Buttons die 
Anzahl der Schritte die ein Schrittmotor machen muss vom ersten an den 
zweiten RaspberryPi gesendet werden. Der Grund ist, dass ich 9 Motoren 
habe aber die Anzahl die ein RaspberryPi Maximal haben kann sind 6 
Motoren.

Der Code für den ersten Pi:
1
import socket
2
TCP_IP = '192.168.137.24'
3
TCP_PORT = 5005
4
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
5
sock.bind((TCP_IP1,TCP_PORT))
6
7
while 1:
8
data=str(steps)
9
sock.sendto(data, (TCP_IP,TCP_PORT))

Der Code für den zweiten PI:
1
import socket
2
TCP_IP = '192.168.137.24'
3
TCP_PORT = 5005
4
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
5
sock.bind((TCP_IP1,TCP_PORT))
6
7
while 1:
8
data,addr=sock.recvfrom(1024)
9
steps = int(data)

Die Fehlermeldungen:

OSError: [Errno99] Cannot assign requested address
Connection Refused Error [Errno 111] Connection refused

Der Erste ist ein RaspberryPi 3B und der andere ist ein 4er. Danke für 
eure im Voraus.

von Helmut H. (helmuth)


Lesenswert?

checkeranonym schrieb:
> TCP_IP = '192.168.137.24'
> TCP_PORT = 5005
> sock.bind((TCP_IP1,TCP_PORT))

TCP_IP1 scheint undefiniert zu sein

von checkeranonym (Gast)


Lesenswert?

Das ist von einem Testversuch. wenn ich die 1 wegnehme, kommt die 
gleiche Fehlermeldung auf beiden Pis.

von Drago S. (mratix)


Lesenswert?

Zum grundlegenden Verständnis, was erhofft man sich durch ein Pairing?
Bekommt man einen BT-Cluster? Die doppelte Kapazität oder Rechenleistung 
von etwas? Oder streamed man einen Audiotrack in Doppel stereo? Oder 
ganz was drittes?

von Strolchi (Gast)


Lesenswert?

checkeranonym schrieb:
> Beide haben die gleiche
> MAC-Adresse und den selben Namen.

Kann/darf eigentlich nicht sein.

von PittyJ (Gast)


Lesenswert?

Wenn ich den Ethernet-Versuch sehe, dann habe ich fast das Gefühl, es 
ist keine Kenntnis darüber vorhanden:
Was sind IP-Adressen?
Was sind Sockets?
UDP-Datagramme oder TCP-Streams.

Vielleicht wäre ein Buch über Netzwerk-Grundlagen praktischer als 
Copy&Paste von irgendwelchem gefundenen Code?

von checkeranonym (Gast)


Lesenswert?

Hallo,

ich brauch nur die Kommunikation zwischen zwei Pis um vom ersten an den 
zweiten Pi die Anzahl der Schritte zu schicken, damit die Schrittmotoren 
sich soweit bewegen, bis der Gegenstand sich z.B. 1 mm bewegt.

Ich habe keine Erfahrung im Programmieren von Netzwerken. Ich habe  ein 
Beispiel Video auf YouTube gefunden, bei dem  per Eingabe Texte und 
Zahlen von einem an den anderen Pi gesendet wird. Dessen Code habe ich 
auch übernommen. Ich will auch nicht ein komplexes Netzwerk aufbauen. 
Lediglich einen Zahlenwert von einen Pi an den anderen schicken.

Über Bluetooth hat es leider nicht geklappt, da die Pis keine anderen 
Geräte(nur das mit der selben MAC-Adresse) gesehen haben. Obwohl ich 
alles nach Anleitung gemacht habe. Wenn man per Befehl sudo hciconfig 
die MAC-Adresse ausliest kommt dann eine andere. Das habe ich aber 
weiter oben schon beschrieben.

Ich habe recherchiert, was die Fehlermeldungen zu bedeuten haben. Da 
sagt das Internet, dass er die IP-Adresse nicht erreicht bzw. man die 
Firewall abschalten soll. Das hab ich auch gemacht. Leider hat dies 
nichts gebracht. Ich hoffe ihr könnt mir weiterhelfen da ihr meisten 
schlauer als das Internet seid. Danke im Voraus.

von Joachim B. (jar)


Lesenswert?

checkeranonym schrieb:
> Hallo

der Nick ist drollig was checkst du denn so?

: Bearbeitet durch User
von checkeranonym (Gast)


Lesenswert?

Joachim B. schrieb:
> checkeranonym schrieb:
>> Hallo
>
> der Nick ist drollig was checkst du denn so?

Mathematik, Elektrotechnik, Programmieren von einfachen Programmen und 
das Programmieren von Steuerungen.

Mit Netzwerken hatte ich noch nichts zu tun.

von checkeranonym (Gast)


Lesenswert?

Wollt ihr oder könnt ihr nicht helfen? Ich bin verzweifelt, da mir bis 
jetzt keiner helfen konnte. In der Theorie zum Thema Netzwerk kenn ich 
mich aus, nur das Programmieren von Netzwerken funktioniert nicht.

von vn nn (Gast)


Lesenswert?

checkeranonym schrieb:
> Ich habe  ein
> Beispiel Video auf YouTube gefunden, bei dem  per Eingabe Texte und
> Zahlen von einem an den anderen Pi gesendet wird. Dessen Code habe ich
> auch übernommen.

Wohl kaum, da der Code schlicht nicht funktionsfähig ist.

checkeranonym schrieb:
> In der Theorie zum Thema Netzwerk kenn ich
> mich aus

Wohl kaum, da die "Client" und "Server" nicht geläufig sind.

checkeranonym schrieb:
> nur das Programmieren von Netzwerken funktioniert nicht.

https://duckduckgo.com/?q=python+tcp+client+server&t=lm&ia=web

von checkeranonym (Gast)


Lesenswert?

Ich weiss wohl, was ein Client und was ein Server ist. Hab es nur aus 
versehen vertauscht. Habs nach dem Video gemacht:

https://youtu.be/fAaxd9MUJcU

Ist halt nur für WLAN, nicht für Ethernet.

Danke ich schau mir den link mal an.

von Andre (Gast)


Lesenswert?

checkeranonym schrieb:
> ein RaspberryPi Maximal haben kann sind 6 Motoren.

Also das halte ich für ein Gerücht. Ich würde die ganze Motorsteuerung 
(vermutlich zeitkritisch, also eh nicht sinnvoll direkt am PI zu 
betreiben) auf einen Arduino auslagern. Der bekommt dann vom PI seine 
Befehle.

von checkeranonym (Gast)


Lesenswert?

Andre schrieb:
> checkeranonym schrieb:
>> ein RaspberryPi Maximal haben kann sind 6 Motoren.
>
> Also das halte ich für ein Gerücht. Ich würde die ganze Motorsteuerung
> (vermutlich zeitkritisch, also eh nicht sinnvoll direkt am PI zu
> betreiben) auf einen Arduino auslagern. Der bekommt dann vom PI seine
> Befehle.

Ein Motor benötigt 4 Pins. Deswegen sind es max. 6 Motoren. Ich soll es 
mit den Pis machen.

von Joachim B. (jar)


Lesenswert?

checkeranonym schrieb:
> Ein Motor benötigt 4 Pins. Deswegen sind es max. 6 Motoren

da scheint mir eine Menge Unlogik drin zu stecken, deswegen glaube ich

checkeranonym schrieb:
> Mathematik, Elektrotechnik

NICHT

Ein GPIO vom PI kann eh keine Motoren ansteuern also braucht man 
Treiber, nur PI stimmt also nicht und wenn schon Treiber dabei sind 
gehen auch Porterweiterungen über I2C & SPI.

von Zeno (Gast)


Lesenswert?

2 Pi's per LAN koppeln ist nun wirklich das Einfachste vom Einfachen.

Bevor man da mit irgendwelchen selbst geschriebenen Programmen sein 
Glück versucht, schaut man erst mal ob die grundlegenden Dinge wie z.B. 
ein einfacher Ping funktionieren. Wenn das funktioniert dann 
funktioniert schon mal die Netzwerkverbindung als solche.
Jetzt kann man beginnen mit eigenen Programmen diese Netzwerkverbindung 
benutzen. Dabei läuft auf dem einen Pi ein Client  und auf dem anderen 
ein Server. Beide Client und Server müssen natürlich den gleichen Port 
bedienen, sonst wird's halt nix. Mit anderen Worten DEin selbst 
geschriebenes Programm auf einem Pi ausgeführt bewirkt erst mal gar 
nichts. Du brauchst auf dem anderen Pi den Gegenpart.

Mit Bluetoth läuft es im Endeffekt genau so, weil das letztendlich ach 
nix anderes als eine Netzwerkverbindung ist.

Bei dem was Du vor hast könnte man es auch mit RS232 machen - wäre 
völlig ausreichend.

Allerdings bezweifle ich das Du weder das eine noch das andere 
hinbekommst, da Dir schlichtweg die Grundlagen fehlen.

9 Motoren kann man über passende Treiberschaltungen (die Du eh brauchst) 
locker mit einem Pi ansteuern.

von checkeranonym (Gast)


Lesenswert?

Joachim B. schrieb:
> Ein GPIO vom PI kann eh keine Motoren ansteuern also braucht man
> Treiber, nur PI stimmt also nicht und wenn schon Treiber dabei sind
> gehen auch Porterweiterungen über I2C & SPI.

Die Motoren sind jeweils mit einem kleinen Board verbunden. Vom Board 
gehen 6 Drähte. 2 Sind GND und +5V. Die 4 restlichen muss man mit den 
GPIOs vom RaspberryPi verbinden.

Zeno schrieb:
> Bevor man da mit irgendwelchen selbst geschriebenen Programmen sein
> Glück versucht, schaut man erst mal ob die grundlegenden Dinge wie z.B.
> ein einfacher Ping funktionieren. Wenn das funktioniert dann
> funktioniert schon mal die Netzwerkverbindung als solche.

Ich habe meinen Rechner und die zwei Pis über einen Switch miteinander 
verbunden. Vom Rechner kann ich ohne Probleme über die IP-Adresse auf 
die Pis zugreifen. Bei den Programmen wird nur gemeldet, dass man auf 
die Adressen nicht zugreifen kann.

Zeno schrieb:
> Jetzt kann man beginnen mit eigenen Programmen diese Netzwerkverbindung
> benutzen. Dabei läuft auf dem einen Pi ein Client  und auf dem anderen
> ein Server. Beide Client und Server müssen natürlich den gleichen Port
> bedienen, sonst wird's halt nix. Mit anderen Worten DEin selbst
> geschriebenes Programm auf einem Pi ausgeführt bewirkt erst mal gar
> nichts. Du brauchst auf dem anderen Pi den Gegenpart.

Die Programme befinden sich auf zwei verschiedenen Pis. Weiter oben habe 
ich auch geschrieben welches der beiden Programme wo läuft. Ich verwende 
auch den selben Port.

Zeno schrieb:
> Mit Bluetoth läuft es im Endeffekt genau so, weil das letztendlich ach
> nix anderes als eine Netzwerkverbindung ist.

Ich hab nach Anleitung alles installiert. Er erkennt zwar das andere 
Gerät, aber sagt er kann sich nicht mit ihm verbinden. Und obwohl ich 
die Python Bibliothek für Bluetooth installiert habe, findet beim 
schreiben eines Programmes die Programmieroberfläche die Bibliothek 
nicht.

von Joachim B. (jar)


Lesenswert?

checkeranonym schrieb:
> Die Motoren sind jeweils mit einem kleinen Board verbunden

Salami?

beschaffe dir neue Boarde!
Wer nur einen Hammer hat für den sieht alles aus wie Nägel!

von checkeranonym (Gast)


Lesenswert?

Joachim B. schrieb:
> checkeranonym schrieb:
>> Die Motoren sind jeweils mit einem kleinen Board verbunden
>
> Salami?
>
> beschaffe dir neue Boarde!
> Wer nur einen Hammer hat für den sieht alles aus wie Nägel!

Die Boards werden von Haus aus mit den Motoren versendet. So muss ich 
nur die Motoren an einen Pi oder an einen Arduino anschließen. Ich habe 
kein Problem mit den Motoren, sondern dass auf den Pis in den 
Pythonprogrammen die IP-Adressen aus irgendeinem Grund nicht erkannt 
werden. Die Fehlermeldung sagt ja aus das die Adresse nicht zugeordnet 
werden kann. Das Anpingen der IP-Adressen funktioniert. Nur das 
Verbinden in meinen Pythonprogrammen nicht.

Und über Bluetooth funktioniert es nicht, da die einzelnen Pis meinen 
ich sehe zwar die Gegenseite werde mich aber nicht verbinden.

von Rainer V. (a_zip)


Lesenswert?

Du hast doch geschrieben, dass der eine Pi die Motorinformationen 
bekommt. Warum dann dem zweiten nicht dieselbe Info direkt geben? Mit 2 
oder mehr Pi's ein lokales Netzwerk aufzubauen, wird deine Möglichkeiten 
sicher weit überschreiten und es stellt sich natürlich auch die Frage, 
ob das für deine Anwendung wirklich nötig ist! Und wenn ja, dann fang 
doch mit einer einfachen seriellen Verbindung (über Draht...) an. Wenn 
du das geschafft hast, dann kannst du überlegen, was sonst noch möglich 
ist. LAN, WLAN, Bluetooth...was auch immer.
Viel Erfolg und Gruß, Rainer

von checkeranonym (Gast)


Lesenswert?

Rainer V. schrieb:
> Du hast doch geschrieben, dass der eine Pi die Motorinformationen
> bekommt. Warum dann dem zweiten nicht dieselbe Info direkt geben? Mit 2
> oder mehr Pi's ein lokales Netzwerk aufzubauen, wird deine Möglichkeiten
> sicher weit überschreiten und es stellt sich natürlich auch die Frage,
> ob das für deine Anwendung wirklich nötig ist! Und wenn ja, dann fang
> doch mit einer einfachen seriellen Verbindung (über Draht...) an. Wenn
> du das geschafft hast, dann kannst du überlegen, was sonst noch möglich
> ist. LAN, WLAN, Bluetooth...was auch immer.
> Viel Erfolg und Gruß, Rainer

Auf einem Pi hab ich eine Oberfläche programmiert. Dort gebe ich ein, 
wie weit sich der Motor bzw. die Motoren drehen soll/en. Das Programm 
berechnet dann die Schritte. Diese liegen zwischen 256 und weit über 
10000. Diesen Wert soll dann der erste Pi an den zweiten schicken. Ich 
darf das Programm nur auf einen Pi laufen lassen. Auf dem zweiten Pi 
läuft nur ein Skript, dass dann, je nach Eingangssignale der GPIOs, 
den/die Motor/en auswählt/auswählen. Für den Betrieb braucht der zweite 
Pi noch die Anzahl der Schritte. Diese soll dann noch übertragen werden.

Ich hab mir das schon überlegt über die GPIOs 14 und 15 zu machen nur 
bin ich mir nicht sicher, ob diese so eine große Zahl als String 
übermitteln können. deswegen wollte ich das über "Funk" machen.

Was ich nicht verstehe, dass egal welches Tutorial ich anschaue, klappt 
es bei denen mit so einem kurz Programm bzw. solchen Programmen. Bei mir 
funktioniert dies nicht, obwohl ich genau die Schritte befolge. Das 
Problem liegt darin, dass er die IP-Adressen nicht findet. Das Anpingen 
der IP-Adressen untereinander funktioniert aber. In den Tutorials 
funktionieren aber die kleinen Programme.

von Zeno (Gast)


Lesenswert?

checkeranonym schrieb:
> Ich hab mir das schon überlegt über die GPIOs 14 und 15 zu machen nur
> bin ich mir nicht sicher, ob diese so eine große Zahl als String
> übermitteln können. deswegen wollte ich das über "Funk" machen.

Ob das Strings oder Zahlen sind ist eigentlich schnuppe. Mit den 2 GPIO 
Pins kannst Du eine serielle Verbindung herstellen. Allerdings bezweifle 
ich das Du das hinbekommst.

Du hast schlichtweg das Client-Server-Prinzip nicht verstanden, weshalb 
weder LAN, WLAN noch Bluetooth bei Dir funktionieren.
Lerne erst mal die Grundlagen. Blindes Abkupfern hilft eben auch nicht, 
wenn man nicht verstanden hat wie es funktioniert.

checkeranonym schrieb:
> Auf dem zweiten Pi
> läuft nur ein Skript, dass dann, je nach Eingangssignale der GPIOs,
> den/die Motor/en auswählt/auswählen. Für den Betrieb braucht der zweite
> Pi noch die Anzahl der Schritte. Diese soll dann noch übertragen werden.
Was läuft da für ein Script? Wie willst Du die Schritte übermitteln?

Ich bin mir mir sehr sicher, Du weist nicht was Du tust.

von Zeno (Gast)


Lesenswert?

checkeranonym schrieb:
> Der Code für den ersten Pi:
> import socket
> TCP_IP = '192.168.137.24'
> TCP_PORT = 5005
> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> sock.bind((TCP_IP1,TCP_PORT))
> sock.sendto(data, (TCP_IP,TCP_PORT))
>
> Der Code für den zweiten PI:import socket
> TCP_IP = '192.168.137.24'
> TCP_PORT = 5005
> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> sock.bind((TCP_IP1,TCP_PORT))
>

Wenn man bei beiden Pi's die gleiche IP benutzt funktioniert es 
natürlich nicht. Der Codeschnipsel beweist, Du hast null Ahnung und 
weist nicht was Du tust.

von checkeranonym (Gast)


Lesenswert?

Zeno schrieb:
> checkeranonym schrieb:
>> Ich hab mir das schon überlegt über die GPIOs 14 und 15 zu machen nur
>> bin ich mir nicht sicher, ob diese so eine große Zahl als String
>> übermitteln können. deswegen wollte ich das über "Funk" machen.
>
> Ob das Strings oder Zahlen sind ist eigentlich schnuppe. Mit den 2 GPIO
> Pins kannst Du eine serielle Verbindung herstellen. Allerdings bezweifle
> ich das Du das hinbekommst.
>
> Du hast schlichtweg das Client-Server-Prinzip nicht verstanden, weshalb
> weder LAN, WLAN noch Bluetooth bei Dir funktionieren.
> Lerne erst mal die Grundlagen. Blindes Abkupfern hilft eben auch nicht,
> wenn man nicht verstanden hat wie es funktioniert.

Die Theorie kenn ich. Nur programmiert hab ich das noch nie. Deswegen 
suche ich Hilfe. Wenn ich die beiden Geräte koppeln möchte(Beispiel 
Bluetooth (ohne programmieren)), die sich aber nicht koppeln möchten, 
obwohl sie sich "sehen", liegt es an den Pis. Ich hab ja auch die 
Pythonbibliothek, um einen möglichen Datenaustausch über Bluetooth zu 
realisieren, erfolgreich installiert. Sobald ich die Bibliothek 
importieren möchte, sagt die Fehlermeldung er kennt die Bibliothek 
nicht.

Zeno schrieb:
> checkeranonym schrieb:
>> Auf dem zweiten Pi
>> läuft nur ein Skript, dass dann, je nach Eingangssignale der GPIOs,
>> den/die Motor/en auswählt/auswählen. Für den Betrieb braucht der zweite
>> Pi noch die Anzahl der Schritte. Diese soll dann noch übertragen werden.
> Was läuft da für ein Script? Wie willst Du die Schritte übermitteln?
>
> Ich bin mir mir sehr sicher, Du weist nicht was Du tust.

Das Skript sorgt dafür, dass je nach Eingangssignal die gewünschten 
Motoren angesteuert werden.

Zeno schrieb:
> checkeranonym schrieb:
>> Der Code für den ersten Pi:
>> import socket
>> TCP_IP = '192.168.137.24'
>> TCP_PORT = 5005
>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>> sock.bind((TCP_IP1,TCP_PORT))
>> sock.sendto(data, (TCP_IP,TCP_PORT))
>>
>> Der Code für den zweiten PI:import socket
>> TCP_IP = '192.168.137.24'
>> TCP_PORT = 5005
>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>> sock.bind((TCP_IP1,TCP_PORT))
>>
>
> Wenn man bei beiden Pi's die gleiche IP benutzt funktioniert es
> natürlich nicht. Der Codeschnipsel beweist, Du hast null Ahnung und
> weist nicht was Du tust.

Das ist ein Tippfehler von mir im Forum. Ich habe für das Forum hier die 
Programmstellen abgetippt. Vom ersten Pi ist die Adresse 192.168.137.23 
vom zweiten ist die Adresse 192.168.137.24.

von PittyJ (Gast)


Lesenswert?

>Ich hab ja auch die
>Pythonbibliothek, um einen möglichen Datenaustausch über Bluetooth zu
>realisieren, erfolgreich installiert. Sobald ich die Bibliothek
>importieren möchte, sagt die Fehlermeldung er kennt die Bibliothek
>nicht.

Alleine darin können schon mehrere Fehler versteckt sein:
- Woher weisst du, das die Bibliothek richtig installiert ist?
- Woher weisst du, dass das überhaupt die korrekte Bibliothek ist, die 
deine Aufgabe erfüllen kann?
- Wenn das Importieren nicht klappt, dann können die falschen Befehle 
dafür benutzt worden sein. Sind die Import-Befehle überhaupt richtig?
- Pfade können falsch gesetzt sein. Rechte nicht ausreichend.



Meine Erfahrungen sgen mir, dass die meisten Bibliotheken auch 
funktionieren, wenn man es richtig macht.
Vielleicht solltest du ganz vorne anfangen, und jeden Schritt einzeln 
nochmals testen.

Die Aussage: "Ich habe was installiert und es geht nicht" habe ich schon 
100te Male von Windows-DAUs gehört. Meistens war es dann ein 
Bedienfehler.

von Rainer V. (a_zip)


Lesenswert?

Und abgesehen davon, dass mir ein zweiter PI für diese komische Aufgabe, 
ein paar Pulse zum Motor zu schicken, wirklich überflüssig erscheint, 
wiederhole ich noch einmal: verbinde die zwei PI's wirklich erst mal per 
serieller Verbindung. Alles andere ist nicht trivial und wird durch 
"Zusammenschustern" von ein paar Sketchen höchstens zufällig irgendwie 
funzen!
Gruß Rainer

von checkeranonym (Gast)


Lesenswert?

PittyJ schrieb:
> Woher weisst du, das die Bibliothek richtig installiert ist?

Ich hab es anhand Tutorials gemacht. Nach der Installation hab ich 
geschaut, ob es Fehlermeldungen gab. Das war aber nicht der Fall.

PittyJ schrieb:
> Woher weisst du, dass das überhaupt die korrekte Bibliothek ist, die
> deine Aufgabe erfüllen kann?

PittyJ schrieb:
> - Wenn das Importieren nicht klappt, dann können die falschen Befehle
> dafür benutzt worden sein. Sind die Import-Befehle überhaupt richtig?
> - Pfade können falsch gesetzt sein. Rechte nicht ausreichend


Ich habe jemanden gefragt der sich damit auskennt. Er hat mir den Befehl 
für die Installation geschickt. Ich hab es mit dem Internet abgeglichen 
und es hat gepasst.

Das Problem ist, wenn sich die Geräte ohne Programm schon nicht koppeln 
wollen, vermute ich dass die eingebunden Bibliothek, die nicht erkannt 
wird, mein geringstes Problem ist.

Die Bibliothek für die sockets habe ich auch nach dem gleiche Schema 
installiert und die kann ich ohne weiteres importieren. Hier ist das 
Problem, dass die Adresse der Gegenseite nicht erreicht bzw. zugeteilt 
werden kann. Das sagt zumindest die Fehlermeldung.

von checkeranonym (Gast)


Lesenswert?

Rainer V. schrieb:
> Und abgesehen davon, dass mir ein zweiter PI für diese komische
> Aufgabe,
> ein paar Pulse zum Motor zu schicken, wirklich überflüssig erscheint,
> wiederhole ich noch einmal: verbinde die zwei PI's wirklich erst mal per
> serieller Verbindung. Alles andere ist nicht trivial und wird durch
> "Zusammenschustern" von ein paar Sketchen höchstens zufällig irgendwie
> funzen!
> Gruß Rainer

Es wird ja nicht nur ein Motor angesteuert. Es sind 5 Motoren an den 
ersten Pi gesteckt und 4 an den zweiten. Die Zwei Pis sind schon über 
die GPIOs verbunden. Auf dem ersten Pi hab ich eine Benutzeroberfläche, 
mit der man jeden Motor gezielt oder alle gleichzeitig ansteuern kann. 
Wenn die Motoren auf dem zweiten Pi angesteuert werden sollen, werden 
über die GPIOs bestimmte Kombinationen von Signalen geschickt. So weiß 
der zweite Pi welcher Motor bzw. ob er alle Motoren gleichzeitig 
ansteuern soll. Die Motoren vom zweiten Pi müssen nur noch wissen wie 
viele Schritte sie machen müssen. Dies wird auf den erstem Pi berechnet 
und soll dann über Funk oder einer seriellen Schnittstelle an den 
zweiten übertragen werden. Ich hab ja weiter oben ein Link gepostet von 
wo ich den Code habe. Er macht es zwar über WLan, aber nach meinem 
Verständnis sollte es auch über Lan funktionieren. Aus irgendeinem Grund 
finden die Programme die andere IP-Adresse nicht. Das Video kopiere ich 
hier nochmal hin.

checkeranonym schrieb:
> Youtube-Video "P2P data transfer using UDP on 2 Pi's | Software Pi"

Ich habe im Internet recherchiert und habe unzählige Beispiele gefunden, 
in denen auch so ein ähnlich kurzer Code verwendet wird.

von checkeranonym (Gast)


Lesenswert?

Entschuldigung das ich  nach so einer kurzen Zeit vom letzten Post aus 
schreibe. Ich habe mal beinahe Haargenau das abgeschrieben was im Video 
beschrieben wird nur mit meinen IP-Adressen und dass ich den String 
kodieren musste. Am ersten Pi (Sender)funktioniert der Code. Beim 
zweiten (Empfänger)kommt diese Fehlermeldung:

OSError: [Errno99] Cannot assign requested address

Das heißt der findet die Adresse nicht bzw. kann sie nicht zuordnen. Er 
hat ein Problem mit dem Befehl bind. Was kann ich machen, damit er sie 
"sieht"?  Kann es sein dass der Befehl für Python 3 etwas anders 
aussehen muss? Oder muss ich irgendwo die IP-Adresse noch bekannt 
machen? Anpingen kann ich sie.

von Rainer V. (a_zip)


Lesenswert?

Also nach deiner vorletzten Info, verstehe ich überhaupt nicht mehr, was 
diese zusätzliche Verbindung (wie auch immer) da jetzt soll. Wenn du dem 
zweiten PI schon sagen kannst, welcher Motor... dann kannst du doch auch 
die Schritte übermitteln. Da mußt du doch nur ein simples Protokoll 
zwischen den zweien vereinbaren!
Gruß Rainer

von checkeranonym (Gast)


Lesenswert?

Rainer V. schrieb:
> Also nach deiner vorletzten Info, verstehe ich überhaupt nicht mehr, was
> diese zusätzliche Verbindung (wie auch immer) da jetzt soll. Wenn du dem
> zweiten PI schon sagen kannst, welcher Motor... dann kannst du doch auch
> die Schritte übermitteln. Da mußt du doch nur ein simples Protokoll
> zwischen den zweien vereinbaren!
> Gruß Rainer

Die GPIOs sind bereits so verbunden: GPIOs 2,3,7,8 vom PI 1(Raspberry Pi 
3) sind mit den GPIOs 2,3,7,8 vom PI 2 (Raspberry  Pi 4) verbunden. 
Drück ich jetzt auf den Button für den 1. Motor auf dem 2. PI, werden 
z.B. an den GPIOs 2 und 3  eine logische 1 gesendet. Somit weiß der Pi 
2, welchen Motor er ansteuern muss.

Die Anzahl der Schritte kann extrem variieren. Von 256 bis weit über 
10000 Schritte können benötigt werden. Die Anzahl hängt von dem ab, um 
wie viel mm das gewünschte Objekt bewegt werden soll. Daher will ich die 
Anzahl der Schritte über Funk oder eine serielle Schnittstelle 
übertragen.

Im Link vom Video, das ich gepostet habe, übermittelt er einen 
eingegebenen Text. Ich hab jetzt mal mein Programm links liegen lassen 
und seine kleine Programme abgeschrieben. Von der Seite der Eingabe und 
des Sendens funktioniert es. Das Problem ist die Seite des Empfängers. 
Die sagt sie kennt die IP-Adresse nicht(Programmzeile mit der Funktion 
bind). Das hat nichts mit der "fehlenden Kenntnis" der Theorie über 
Clients und Server zu tun. Ich vermute das System hat irgendwas 
zerschossen oder ein BUG im Betriebssystem. Oder ich muss noch eine 
Einstellung im System machen. Im Internet gibt es genug Beispiele, die 
den gleichen Code verwenden.

von Rainer V. (a_zip)


Lesenswert?

Jetzt mal ehrlich...solange du irgendwelche Programmschnipsel 
zusammenflickst, ohne zu verstehen, was du da tust, wird das sicher 
nichts. Ich bleibe bei meinem Vorschlag, die PI's erst einmal seriell 
über Draht zusammenzubringen. Dann kannst du weiter sehen. 
Wahrscheinlich machst du das nur deshalb nicht, weil du keine 
"passenden" Sketche findest...oder?!
Gruß Rainer

von checkeranonym (Gast)


Lesenswert?

Rainer V. schrieb:
> Jetzt mal ehrlich...solange du irgendwelche Programmschnipsel
> zusammenflickst, ohne zu verstehen, was du da tust, wird das sicher
> nichts. Ich bleibe bei meinem Vorschlag, die PI's erst einmal seriell
> über Draht zusammenzubringen. Dann kannst du weiter sehen.
> Wahrscheinlich machst du das nur deshalb nicht, weil du keine
> "passenden" Sketche findest...oder?!
> Gruß Rainer

Das Programm aus dem Video ist das ganze Programm. Auf dem RasperryPi 3 
funktioniert es. Nur Auf dem RasperryPi 4 macht das Programm Faxen. Er 
erkennt die IP-Adresse aus irgend einem Grund nicht, obwohl ich die 
IP-Adresse Anpingen kann. Mit seriellen Schnittstellen habe ich keine 
Probleme. Ich habe schon mehrmals welche programmiert. Da später noch 
mehr RasperryPis zum Einsatz kommen könnten, scheint es idealer zu sein, 
dass der eine PI alles über Funk oder Lan überträgt.

von Rainer V. (a_zip)


Lesenswert?

checkeranonym schrieb:
> Auf dem RasperryPi 3
> funktioniert es. Nur Auf dem RasperryPi 4 macht das Programm Faxen.

Du hast also zwei verschiedene PI's ? Dann tausche doch erst mal die 
Software und schau was passiert. Vielleicht ergeben sich ja Fehler, 
aussagekräftiger sind, als bisher...
Gruß Rainer

von checkeranonym (Gast)


Lesenswert?

Ich habe jetzt die Programme ausgetauscht. Wenn ich jetzt das Programm 
für den Empfänger starte(egal auf welchen Pi) kommt dieselbe 
Fehlermeldung. Ich weiß nicht warum er die Adressen in den Funktionen 
bind bzw. connect nicht lesen kann.

Code des Empfängers:
1
import socket
2
import sys
3
import time
4
5
IP = '192.168.137.23'
6
PORT = 5005
7
8
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
9
sock.bind((IP,PORT))
10
11
while True:
12
    msg, addr = sock.recvfrom(1024)
13
    print(msg)

Code des Senders:
1
import socket
2
import time
3
4
IP='192.168.137.24'
5
PORT=5005
6
7
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
8
9
while True:
10
    v=input("Message:    ")
11
    MESSAGE = str(v)
12
    sock.sendto(MESSAGE.encode('utf-8'), (IP,PORT))


Ich hab aus dem Video den Code übernehmen(Empfänger: Nachricht muss noch 
dekodiert werden, mach ich aber sobald das Programm bind etc. annimmt). 
Mit dem Sender hat er kein Problem. Beim Empfänger kommt folgende 
Fehlermeldung:

> %Run receive.py
Traceback (most recent call last):
  File "/home/pi/Desktop/receive.py", line 9, in <module>
    sock.bind((IP,PORT))
OSError: [Errno 99] Cannot assign requested address


Ich hab die IP-Adressen sowohl mit ' als auch mit " geschrieben. 
Zwischen den Pis ist zwar ein Switch, aber ich kann sie mit den oben 
geschriebenen IP-Adressen anpingen. Wenn ich die beiden Pis direkt 
verbinde, kommt die gleiche Fehlermeldung.

von PittyJ (Gast)


Lesenswert?

Also, ich habe mir gedacht, dass kann doch nicht so schwer sein. Ich 
habe zwar noch nie in Python programmiert, doch sollte es möglich sein.
Also erst einmal google angeschmissen, gesucht: python udp socket.
Da bin ich auf die gleiche Seite gestossen, wie du wohl auch. Das 
Beispiel da ist fast identisch mit deinem:

https://wiki.python.org/moin/UdpCommunication

Den Code von Sending und Receiving genommen, und schon konnte ich was 
senden und empfangen. Allerdings geht das nur auf dem gleichen Rechner.
Das Problem dabei ist, dass die IP des Beispiels nur localhost, 
127.0.0.1 ist.

Deshalb muss beim Sender die richtige IP des Ziels genommen werden. Der 
Empfänger muss vorbeitet werden, dass er von beliebigen Rechnern Pakete 
empfangen darf. Keine Ahnung wie das geht. Aber es steht ja auch auf der 
Webseite. Also den Multicast-Code genommen, den richtigen Port darein, 
und schon konnte ich zwischen 2 Rechnern kommunizieren.


Ich mußte keine Bibliothen installieren, oder laden. Alles ging mit 
meinem Basis Raspian.


Ich verstehe nicht, wie man sich so lange an diesem Problem????? 
aufhalten kann, wenn das Beispiel doch schon alles erklärt.


Ich, als nicht Python-Programmierer, habe nicht einmal 10 Minuten 
gebraucht.

Im Bäckerhandwerk werden Lehrlinge gesucht.

von Zeno (Gast)


Lesenswert?

Sorry so wie Du das machst wird das nichts.
Du hast schlichtweg das Prinzip der Kommunikation zwischen zwei Rechnern 
nicht verstanden und versuchst jetzt mit irgendwelchen unkoordinierten 
Frickeleien was hin zu bekommen. So funktioniert das aber nicht.

Wenn Du die Pi's schon über GPIO Ports verbunden hast dann kannst über 
diese alle Daten übermitteln, also welcher Motor angesteuert werden soll 
und wie viele Schritte er machen soll.
Dafür braucht es nur, wie Rainer schon richtig angemerkt hat, ein 
passendes Protokoll über welches die Datenübertragung abgewickelt wird. 
Wie das Protokoll aufgebaut ist ist Dir überlassen.
In meiner Firma werden z.B. komplexe Datenübertragungen zwischen 
Maschine und PC seriell also über 2 Drähte sprich  letztendlich 2 Ports 
gemacht. Man muß sich natürlich über das serielle Prototokoll auf beiden 
Seiten einigen. Die Maschinensteuerung ist auch ein PC. Also 
kommunizieren die 2 PC's über die serielle Schnittstelle mit einander.
2 Pi's sind im Prinzip 2 PC's die auch serielle Schnittstellen haben und 
über diese miteinander kommunizieren können.
Um bei dem Beispiel mit meinen Maschinen zu bleiben, hier mal ein 
Beispiel für einen Befehl: G05X200 bedeutet z.B fahre in der X Achse mit 
Konstantgeschwindigkeit 200mm in + Richtung. G ist hierbei der 
Fahrbefehl, 05 bestimmt den Modus wie gefahren werden soll, X ist die 
Achse und 200 wie weit gefahren werden soll.

Dein Problem ist das Du Dir keine Gedanken darüber machst wie 2 Rechner, 
Controller etc. miteinander kommunizieren. Demzufolge hast Du auch nicht 
kapiert wie die Kommunikation abläuft. Es ist egal ob die 2 über SPI, 
CAN, I2C, RS232 oder Netzwerk kommunizieren. Das sind nur verschiedene 
Kommunikationskanäle. Das was übertragen wird (Deine Daten) ist dabei 
immer das Gleiche nur das Wie ist unterschiedlich. Das mußt Du einfach 
begreifen und lernen sonst wird das nichts.
Lerne erst einmal die Grundlagen und zwar richtig. Nimm dazu am besten 
ein passendes Lehrbuch, arbeite das durch und versuche die dort 
gemachten Beispiele praktisch nach zu vollziehen. Wenn das klappt dann 
kannst Du die mal ein Kommunikationsprotokoll ausdenken und testen ob 
das das macht was Du willst. Dafür braucht man keine Motoren, dafür 
reichen 2 Pi's die die Ergebnisse der Kommunikation in einem 
Terminalfenster ausgeben. Erst wenn das funktioniert macht man die 
Ausgabe nicht mehr über das Terminal sonder über die GPIO's um Motoren, 
Lampen etc. anzusteuern.

Solange die Grundlagen nicht sitzen wirst Du Dich weiter im Kreis ohne 
irgend ein Ergebnis drehen.
Elektronik und Programmieren ist eben schon mehr als Copy & Paste.Nicht 
umsonst gibt es Lehrberufe und Studiengänge wo man so etwas lernt. Und 
ja man kann sich das auch autodidaktiscvh selbst aneignen, wenn man 
gewillt ist sich auf den Hosenboden zu setzen.

von checkeranonym (Gast)


Lesenswert?

Habs jetzt hinbekommen von meinem Rechner an den gewünschten Pi Daten zu 
schicken. Die Pis untereinander können auch kommunizieren. Sollte da 
noch was irgendwann nicht passen, würde ich mich nochmals melden.




PittyJ schrieb:
> Also, ich habe mir gedacht, dass kann doch nicht so schwer sein. Ich
> habe zwar noch nie in Python programmiert, doch sollte es möglich sein.
> Also erst einmal google angeschmissen, gesucht: python udp socket.
> Da bin ich auf die gleiche Seite gestossen, wie du wohl auch. Das
> Beispiel da ist fast identisch mit deinem:
>
> https://wiki.python.org/moin/UdpCommunication

>
> Den Code von Sending und Receiving genommen, und schon konnte ich was
> senden und empfangen. Allerdings geht das nur auf dem gleichen Rechner.
> Das Problem dabei ist, dass die IP des Beispiels nur localhost,
> 127.0.0.1 ist.
>
> Deshalb muss beim Sender die richtige IP des Ziels genommen werden. Der
> Empfänger muss vorbeitet werden, dass er von beliebigen Rechnern Pakete
> empfangen darf. Keine Ahnung wie das geht. Aber es steht ja auch auf der
> Webseite. Also den Multicast-Code genommen, den richtigen Port darein,
> und schon konnte ich zwischen 2 Rechnern kommunizieren.
>
> Ich mußte keine Bibliothen installieren, oder laden. Alles ging mit
> meinem Basis Raspian.
>
> Ich verstehe nicht, wie man sich so lange an diesem Problem?????
> aufhalten kann, wenn das Beispiel doch schon alles erklärt.
>
> Ich, als nicht Python-Programmierer, habe nicht einmal 10 Minuten
> gebraucht.
>
> Im Bäckerhandwerk werden Lehrlinge gesucht.

Beim den RaspberryPis musste ich Bibliotheken installieren. Auf dem PC 
ist die Bibliothek bereits installiert.Ich habe da alle Beispiele 
durchprobiert. Das Programm gab immer bei der selben Funktion(bind) eine 
Fehlermeldung aus. Danke für den Versuch mir zu helfen.

Zeno schrieb:
> Sorry so wie Du das machst wird das nichts.
> Du hast schlichtweg das Prinzip der Kommunikation zwischen zwei Rechnern
> nicht verstanden und versuchst jetzt mit irgendwelchen unkoordinierten
> Frickeleien was hin zu bekommen. So funktioniert das aber nicht.

1. Ich hatte das Thema in einer Vorlesung ein Semester lang. Zwar nur in 
der Theorie, aber ich weiß wie die Kommunikation abläuft
2. Ich hab das mit den "unkoordinierten Frickeleien" hinbekommen. Und 
der obige Code funktioniert jetzt auf dem Pi Nr. 2. Hast du dir 
überhaupt das Video angeschaut?

Zeno schrieb:
> Wenn Du die Pi's schon über GPIO Ports verbunden hast dann kannst über
> diese alle Daten übermitteln, also welcher Motor angesteuert werden soll
> und wie viele Schritte er machen soll.
> Dafür braucht es nur, wie Rainer schon richtig angemerkt hat, ein
> passendes Protokoll über welches die Datenübertragung abgewickelt wird.
> Wie das Protokoll aufgebaut ist ist Dir überlassen.
> In meiner Firma werden z.B. komplexe Datenübertragungen zwischen
> Maschine und PC seriell also über 2 Drähte sprich  letztendlich 2 Ports
> gemacht. Man muß sich natürlich über das serielle Prototokoll auf beiden
> Seiten einigen. Die Maschinensteuerung ist auch ein PC. Also
> kommunizieren die 2 PC's über die serielle Schnittstelle mit einander.
> 2 Pi's sind im Prinzip 2 PC's die auch serielle Schnittstellen haben und
> über diese miteinander kommunizieren können.
> Um bei dem Beispiel mit meinen Maschinen zu bleiben, hier mal ein
> Beispiel für einen Befehl: G05X200 bedeutet z.B fahre in der X Achse mit
> Konstantgeschwindigkeit 200mm in + Richtung. G ist hierbei der
> Fahrbefehl, 05 bestimmt den Modus wie gefahren werden soll, X ist die
> Achse und 200 wie weit gefahren werden soll.

Habs schon erwähnt, wieso ich ein kleines Netzwerk über Ethernet 
brauche.

Zeno schrieb:
> Solange die Grundlagen nicht sitzen wirst Du Dich weiter im Kreis ohne
> irgend ein Ergebnis drehen.
> Elektronik und Programmieren ist eben schon mehr als Copy & Paste.Nicht
> umsonst gibt es Lehrberufe und Studiengänge wo man so etwas lernt. Und
> ja man kann sich das auch autodidaktiscvh selbst aneignen, wenn man
> gewillt ist sich auf den Hosenboden zu setzen.


Wenn ich programmiere, dann mach ich nicht Copy & Paste. Klar, wenn ich 
was neues programmieren muss, schau ich, ob ich im Internet was 
ähnliches finde. Das pass ich dann an mein gewünschtes Programm an. Hab 
schon unzählige Steuerungen programmiert, hab eine Kamera auf 
Objekterkennung programmiert und hab erfolgreich mit einem Arduino eine 
Kommunikation über Bluetooth programmiert. Ich konnte dadurch ein Modell 
fernsteuern.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.