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?
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.
>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.
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.
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
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).
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
> 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 ....
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.
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
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.
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" :(
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.
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.
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.