Forum: Mikrocontroller und Digitale Elektronik serielle Funkbrücke


von chris (Gast)


Angehängte Dateien:

Lesenswert?

Als Datenverbindung zwischen PC und Microcontroller brauche ich eine 
Funkbrücke.

Eigentlich wollte ich das Ganze mit zwei nRf24 machen.
Mittlerweile scheint mir aber WLAN das geeignetere Verfahren.

Hier gibt's ein Beispiel und ich habe versucht, den Port mit

// netcat serial port on linux:
// nc -l 8880 > /dev/ttyS1 < /dev/ttyS1

zu linken, aber der Port taucht nicht auf.

Hat jemand eine Idee? Oder eine andere Lösung für die Datenübertragung?

von Franz M. (elmo64)


Lesenswert?

Bluetooth wäre vielleicht auch noch eine Überlegung wert. SPP sollte out 
of the Box funktionieren.

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

chris schrieb:
> Hier gibt's ein Beispiel und ich habe versucht, den Port mit
> // netcat serial port on linux:
> // nc -l 8880 > /dev/ttyS1 < /dev/ttyS1
>
> zu linken, aber der Port taucht nicht auf.

Wie und unter welchem User startest Du das? Was meinst Du mit "der Port 
taucht nicht auf?". Meinst Du den TCP-Port 8880, den man mit netstat 
verfolgen könnte? Oder meinst Du den Serial-Port? Gibt es 
Fehlermeldungen? Was ist mit stderr? Leitest Du den auch um oder siehst 
Du ihn in der Console? Wie ist die Baudrate, Anzahl Bits und Parity von 
ttyS1 eingestellt?

Ohne hinreichende Infos wird das eine Glaskugel-Raterei.

: Bearbeitet durch Moderator
von chris (Gast)


Lesenswert?

>Wie und unter welchem User startest Du das?
chris@chris-Rechner:~$ nc -l 8880 > /dev/ttyS1 < /dev/ttyS1

>Was meinst Du mit "der Port taucht nicht auf?".
Bei der automatischen Portsuche der Arduino IDE. Normalerweise wird dort 
ja ein serieller Port angezeigt, sobald dieser im System verfügbar ist.

> Meinst Du den TCP-Port 8880, den man mit netstat verfolgen könnte?
Das obige Arduinoprogramm erzeugt einen TCPIP Server als AccessPoint. 
Man kann in der Funknetzwerksuche den Accesspoint auswählen und der PC 
verbindet sich dann mit diesem.
Ich gehe mal davon aus, dass der TCP-Server dann auf den Ports 8880 und 
8881 verfügbar  ist.
Gibt es Fehlermeldungen?
Keine, aber ich kenne auch keine Diagnosemöglichkeit. Vielleicht kannst 
Du eine vorschlagen.
> Wie ist die Baudrate, Anzahl Bits und Parity von ttyS1 eingestellt?
Das sollte egal sein, da der TCP-Stream nur Rohdaten überträgt und die 
Baudrateneinstellung im Mikrocontroller fixiert ist.

Das Arduinoprogramm habe ich von der im Programm oben eingetragenen 
Adresse.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

chris schrieb:
> Wie und unter welchem User startest Du das?
>
> chris@chris-Rechner:~$ nc -l 8880 > /dev/ttyS1 < /dev/ttyS1

Hat chris die notwendigen Berechtigungen, um auf /dev/ttyS1 zuzugreifen? 
Gibt es eine Fehlermeldung?

> Bei der automatischen Portsuche der Arduino IDE. Normalerweise wird dort
> ja ein serieller Port angezeigt, sobald dieser im System verfügbar ist.

Häh? Was hängt denn an /dev/ttyS1 kabelmäßig dran? Ich dachte, der ESP 
soll über WLAN mit Deinem PC kommunuzieren?

> Das obige Arduinoprogramm erzeugt einen TCPIP Server als AccessPoint.
> Man kann in der Funknetzwerksuche den Accesspoint auswählen und der PC
> verbindet sich dann mit diesem.

Das Verbinden mit dem AP klappt?

> Ich gehe mal davon aus, dass der TCP-Server dann auf den Ports 8880 und
> 8881 verfügbar  ist.

Wie kommst Du auf diese Schnapsidee? Mit "nc -l 8880" sagst Du dem nc, 
er soll als Server fungieren, also auf dem TCP-Port 8880 horchen.

Auf dem ESP startest Du einen "UDP-Server". Jedenfalls steht das so in 
dem Kommentar von Deinem Source. Beide Teilnehmer horchen also, der eine 
auf dem TCP-Port 8880 und der andere horcht auf dem UDP-Port 8881?!? Das 
können die eine Ewigkeit machen, ohne dass etwas passiert.

Also: Ich habe überhaupt nicht verstanden, was Du da machst. Kannst Du 
da mal eine Skizze machen, wer wie an der Kommunikation beteiligt sein 
soll?


> Wie ist die Baudrate, Anzahl Bits und Parity von ttyS1 eingestellt?
>
> Das sollte egal sein, da der TCP-Stream nur Rohdaten überträgt und die
> Baudrateneinstellung im Mikrocontroller fixiert ist.

Aber nicht die von ttyS1, oder doch? Was hängt denn da dran? Ohne 
Skizze, wie Du was zusammenstöpselst, wird das nix.

von chris (Gast)


Angehängte Dateien:

Lesenswert?

Frank schrieb:
>Auf dem ESP startest Du einen "UDP-Server". Jedenfalls steht das so in
>dem Kommentar von Deinem Source.

Nein, da steht
1
#define PROTOCOL_TCP

Abhängig von der Konfiguration wird TCP oder UDP verwendet.

Das obige Python-Testscript erzeugt korrekt ein "hello world" auf der 
seriellen Schnittstelle des ESP8266. Leider wartet das Script auch auf 
eine Antwort, so dass es erst beendet wird, wenn Zeichen an der 
seriellen Schnittstelle ankommen und per TCP zurück gesendet werden.

Aufbau:

PC(WIFI) <-> (Wifi AP)ESP8266(serial RxTX) <-> (serial RXTX) irgendein 
Microcontroller

Im Moment ist aber ( serial RxTX )<->FDTI<->(USB)PC

von Stefan F. (Gast)


Lesenswert?

chris schrieb:
> Aufbau:
> PC(WIFI) <-> (Wifi AP)ESP8266(serial RxTX) <-> (serial RXTX) irgendein
> Microcontroller

Was möchtest du jetzt netcat anstellen?

von chris (Gast)


Lesenswert?

>Was möchtest du jetzt netcat anstellen?

Ich hätte gerne, dass der COM-Port in der Arduino-IDE auftaucht.

von Stefan F. (Gast)


Lesenswert?

chris schrieb:
>>Was möchtest du jetzt netcat anstellen?
> Ich hätte gerne, dass der COM-Port in der Arduino-IDE auftaucht.

Arduino braucht kein netcat, um auf serielle Ports zuzugreifen.

Wenn du auf /dev/ttyS0 zugreifen möchtest, solltest du zerst klären, ob 
dieses Device existiert und ob du berechtigt bist, darauf zuzugreifen. 
Kontrolliere das mit mit dem ls Befehl (oder Dateimanager).

Alternativ kannst du Cutecom verwenden, dort kannst du manuell Device 
Namen eingeben, die nicht in der Liste erscheinen. Wenn das Device 
existiert und zugreifbar ist, dann funktioniert es dort auch (egal ob es 
automatisch in der Liste erscheint).

von chris (Gast)


Lesenswert?

Wir reden aneinander vorbei. Es existiert kein Device. Es gibt nur einen 
TCP-Server ( oder UDP ) auf dem ESP8266. Der soll auf ein Device 
abgebildet werden. Hast Du das Programm überflogen?:
https://www.mikrocontroller.net/attachment/highlight/431571

von Stefan F. (Gast)


Lesenswert?

Du kannst mit Netcat kein virtuelles serielles Device erzeugen. Dafür 
gibt es andere Software.

Dort wurden Lösungen für deine Idee diskutiert: 
https://stackoverflow.com/questions/22624653/create-a-virtual-serial-port-connection-over-tcp

Oder:

A. M. schrieb:
> Bluetooth wäre vielleicht auch noch eine Überlegung wert. SPP sollte out
> of the Box funktionieren.

Dem stimme ich zu

von chris (Gast)


Lesenswert?

> Bluetooth wäre vielleicht auch noch eine Überlegung wert. SPP sollte out
> of the Box funktionieren.

Tatsächlich habe ich noch ein paar rumliegen, die ich schon vergessen 
habe.
Im Moment probiere ich gerade ein HC-06, das wie wild blinkt ....

von Np R. (samweis)


Lesenswert?

chris schrieb:
> Es existiert kein Device.

Dann wird dies auch nicht funktionieren:

chris schrieb:
> nc -l 8880 > /dev/ttyS1 < /dev/ttyS1

socat ist das, was Du suchst.
https://linux.die.net/man/1/socat

von chris (Gast)


Lesenswert?

Früher hatte ich Bluetooth mal in Betrieb, aber ich erinnere mich, dass 
es immer Problem gab.

So jetzt: Der interne Bluetooth-Adapter meines Ubuntu-PC findet keine 
Geräte.
Wenn ich einen externen USB-Adapter anstecke, findet er das HC-06 Modul, 
kann sich angebleich auch "pairen" (1234) aber die LED hört nicht auf zu 
blinken und der Port taucht auch nicht auf. Also auch wieder ein 
halbgare Sache.

Am besten scheint mir, eine Wifi-Verbindung mit dem ESP8266 als 
serieller Adapter aufzubauen. Eigentlich brauch ich gar nicht unbedingt 
auf der PC-Seite einen seriellen Port, weil ich ein Java-Programm 
schreiben will, dass z.b. 255 Byte an den ESP schickt und der soll dass 
dann als seriellen Stream ausgeben. Ich brauch aber auch eine 
Rückmeldung, wenn serielle Daten an den ESP geliefert werden. Ich 
vermute mal, dass UDP dazu geeignet wäre ...

Stefanus, Du bist doch Java-Spezialist, wenn ich mich recht entsinne.

von Stefan F. (Gast)


Lesenswert?

chris schrieb:
> Ich brauch aber auch eine
> Rückmeldung, wenn serielle Daten an den ESP geliefert werden. Ich
> vermute mal, dass UDP dazu geeignet wäre ...

Im gegensatz zu TCP liefert UDP eben keine Rückmeldung.

UDP ist wie eine Postkarte an eine geliebte. Du verschickst ganz viele 
und die meisten kommen irgendwann an. Manchmal auch in veränderter 
Reihenfolge.

TCP ist wie ein Einschreiben mit Rückantwort.

Mit den HC-05 und HC-06 habe ich ebenfalls durchwachsene Erfahrungen 
gemacht. Das BTM-222 funktionierte so viel besser, dass ich gerne bereit 
war, den höheren pries von damals 15€ zu bezahlen. Das Modul gibt es 
leider nicht mehr zu kaufen. Nachfolger ist das BTM-238. Ich hab's noch 
nicht probiert, weil ich noch einige BTM-222 vorrätig habe.

> Stefanus, Du bist doch Java-Spezialist, wenn ich mich recht entsinne.

Nimm die RxTx Library in Version 2.1.7.

Hier sind meine Notizen zu Bluetooth Modulen: 
http://stefanfrings.de/bluetooth/index.html

von Philipp K. (philipp_k59)


Lesenswert?

Es gibt fertige usb Sticks für 4€ in China mit nrf24 im Set..

Bei dem einen geht man an den usb to Uart Chip und greift das Signal mit 
dem mikrocontroller ab.

von Egon (Gast)


Lesenswert?

Frank M. schrieb:
> Hat chris die notwendigen Berechtigungen, um auf /dev/ttyS1 zuzugreifen?

Bei der Gelegenheit: Hat jemand eine Ahnung wie man dieses ganze Linux 
Berechtigungsgeschiss ein für alle Mal abschaltet? Mein Netzwerk ist 
nicht mit dem Internet verbunden. Trotzdem wirft Linux einem dauernd 
irgendwelche Passwort/Berechtigungs- Knüppel zwischen die 
Entwicklerbeine, im Zeichen einer weder gewünschten noch benötigten 
"Sicherheit" :(

von Stefan F. (Gast)


Lesenswert?

Egon schrieb:
> Hat jemand eine Ahnung wie man dieses ganze Linux
> Berechtigungsgeschiss ein für alle Mal abschaltet?

Witzig. Das ist eine Kern-Funktion in der sich Linux von Anfang an 
extremst von Dos/Windows unterschied.

Aber ja, man kann das weitgehend deaktivieren. Aber nicht mit einem 
simplen zentralen Schalter. Da musst du dir jedes einzelne Programm 
separat vornehmen.

Du kannst dich als root einloggen, dann darfst du fast alles. Oder die 
betroffenen Tools als root (eventuell mit sudo) ausführen.

von Egon (Gast)


Lesenswert?

Stefanus F. schrieb:
> Witzig.

Ne das ist nicht witzig sondern ein echtes Ärgernis.
Deiner Antwort entnehme ich daß es nicht möglich-
 bzw. die eingebaute Sicherheitsbürokratie nur mit noch mehr Bürokratie 
umständlich einzudämmen ist.

von c-hater (Gast)


Lesenswert?

Egon schrieb:

> Bei der Gelegenheit: Hat jemand eine Ahnung wie man dieses ganze Linux
> Berechtigungsgeschiss ein für alle Mal abschaltet?

Du arbeitest einfach als root.

> Mein Netzwerk ist
> nicht mit dem Internet verbunden.

Ist es mit IRGENDEINEM Netzwerk verbunden (dazu zählt auch das LAN)?

Nur dann, wenn das nicht der Fall ist, wäre das Konzept der Benutzung 
als root eventuell irgendwie ernsthaft in Erwägung zu ziehen.

Der Nutzen erscheint allerdings zweifelhaft.

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.