Forum: Mikrocontroller und Digitale Elektronik Arduino: Softserial - TX-Pin recyclen?


von Frank E. (Firma: Q3) (qualidat)


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?

: Bearbeitet durch User
von DerEgon (Gast)


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.

von mIstA (Gast)


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.

von Frank E. (Firma: Q3) (qualidat)


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.

: Bearbeitet durch User
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.