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.
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.
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.
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.
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.
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:
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.
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?
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?
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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!
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.
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
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.
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.
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.
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.
>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.
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
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.
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.
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.
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
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.
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
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.
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
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:
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.
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.
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.
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.