Arduino: Softserial - TX-Pin recyclen?

OP (Firma: Q3) #7181657
Lesenswert?

Ich habe ein Projekt mit Wemos D1 Mini, bei dem die IO-Pins knapp 
werden. U.a. liefert ein GPS-Chip über Softserial Daten. Da benötige ich 
eigentlich nur die RX-Leitung am ESP.

Kann ich die zugehörige TX-Leitung einfach mit digitalWrite für andere 
Zwecke verwenden, oder stört das irgendwelche internen Prozesse in der 
SoftSerial-Lib?
Gast #7181725
Lesenswert?

Frank E. schrieb:
> oder stört das irgendwelche internen Prozesse in der
> SoftSerial-Lib?

Du könntest in deren Quelltext nachsehen, was die mit dem Pin 
anstellt. Und Du könntest Dir eine Variante davon basteln, die erst gar 
keine Sendefunktionen enthält, um auf Nummer Sicher zu gehen.
Gast #7181996
Lesenswert?

Frank E. schrieb:
> Kann ich die zugehörige TX-Leitung einfach mit digitalWrite
> für andere Zwecke verwenden

Vermutlich wird das klappen. Du kannst auch versuchen für TX entweder 
denselben Pin wie für RX oder -1 anzugeben; zumindest manche SW-Serial 
Libs unterstützen auf diese Art halbduplex-Verbindungen und solange Du 
dann nichts sendest kannst Du eben Daten empfangen.
OP (Firma: Q3) #7185223
Lesenswert?

Die Frage hat sich zum Positiven klären lassen!

Weil die Arduino-Standard-Lib "SoftSerial" den WLAN-Betrieb des ESP8266 
stört, habe ich nach einer speziellen Version für diesen Chip gesucht 
und gefunden:

https://github.com/plerup/espsoftwareserial

Beim Durchsehen des Sourcecodes entdeckte ich dann auch die Methode 
"void SoftSerial.disableTX(boolean)", die genau tut, was man erwartet. 
Es gibt übrigens auch eine entsprechende Methode für RX, falls man 
einfach nur senden möchte.

Man muss zwar im Constructor trotzdem zwei Pins abgeben, aber für den 
jeweils nich tbenötigten wird z.B. 0 akzeptiert. Beispiel (Parameter 
RX-Pin, TX-Pin, invertierte Logik, Puffergröße):

SoftwareSerial mySerial1(13,0,false,128); mySerial1.disableTX(true);
SoftwareSerial mySerial2(14,0,false,128); mySerial2.disableTX(true);
SoftwareSerial mySerial3(15,0,false,128); mySerial3.disableTX(true);
usw. ...

Bei der Deklaration kann man dann z.B. einfach die entsprechenden RX- 
bzw. TX-Pins in Einer-Schritten direkt nebeneinander definieren ... 
funzt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren