#include "SoftwareSerial.h" #ifndef D5 #if defined(ESP8266) #define D5 (14) #define D6 (12) #elif defined(ESP32) #define D5 (18) #define D6 (19) #endif #endif SoftwareSerial swSer1; SoftwareSerial swSer2; void setup() { delay(2000); Serial.begin(115200); Serial.println(PSTR("\nOne Wire Half Duplex Serial Tester")); swSer1.begin(115200, SWSERIAL_8N1, D6, D6, false, 256); // high speed half duplex, turn off interrupts during tx swSer1.enableIntTx(false); swSer2.begin(115200, SWSERIAL_8N1, D5, D5, false, 256); // high speed half duplex, turn off interrupts during tx swSer2.enableIntTx(false); } void loop() { Serial.println(PSTR("\n\nTesting on swSer1")); Serial.print(PSTR("Enter something to send using swSer1.")); checkSwSerial(&swSer1); Serial.println(PSTR("\n\nTesting on swSer2")); Serial.print(PSTR("Enter something to send using swSer2.")); checkSwSerial(&swSer2); } void checkSwSerial(SoftwareSerial* ss) { byte ch; while (!Serial.available()); ss->enableTx(true); while (Serial.available()) { ch = Serial.read(); ss->write(ch); } ss->enableTx(false); // wait 1 second for the reply from SOftwareSerial if any delay(1000); if (ss->available()) { Serial.print(PSTR("\nResult:")); while (ss->available()) { ch = (byte)ss->read(); Serial.print(ch < 0x10 ? PSTR(" 0") : PSTR(" ")); Serial.print(ch, HEX); } Serial.println(); } }