/* MS-DOS hardware serial COM port to WiFi UDP - No display (no UI) Compiled for ESP-12E and loaded to NodeMCU 1.0 (ESP-12F Module) using Arduino IDE Version 2.0.2 LM Sept. 2022 - CC attribution - https://creativecommons.org/licenses/by/3.0/us/ */ #include #include #include #define UNIX // Comment-out for Windows listener #define BAUD 115200 // USB Serial monitor (not software serial) const boolean BIDIR = false; // If true, interface is bidirectional // WiFi access credentials #define WIFI_SSID "WiFi network name goes here" #define WIFI_PASS "WiFi password goes here" #ifdef UNIX IPAddress udpIPaddress = {192,168,1,186}; // Linux UDP Listener address #else IPAddress udpIPaddress = {192,168,1,67}; // Windows 11 UDP Listener address #endif #define udpPort 22200 // UDP listening port // UDP - Instantiate WiFiUDP Udp; // Message buffers const int UDP_BUFFER_DIM = 256; char udpRxBuffer[UDP_BUFFER_DIM]; // For bidirectional interface // Software serial // https://github.com/plerup/espsoftwareserial/ #define SS_TX 12 #define SS_RX 13 #define SS_BAUD 9600 // Set to the same as computer // Instantiate SoftwareSerial DOS6; // Computer serial interface const int RX_BUFFER_DIM = 256; char serRxBuffer[RX_BUFFER_DIM]; // -> IDP transmit int rxNdx = 0; byte EOL = 0x0D; // CR = DOS EOL // Time const unsigned long JIFFY = 100; const unsigned long QTRSEC = 250; const unsigned long HALFSEC = 500; void setup() { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // Off Serial.begin(BAUD); delay(JIFFY); Serial.println(); // Initialize WiFi WiFi.begin(WIFI_SSID, WIFI_PASS); Serial.print("Connecting to "); Serial.print(WIFI_SSID); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(JIFFY); Serial.print("."); } Serial.println(); Serial.print("Connected! IP address: "); Serial.println(WiFi.localIP()); // Initialize software serial (transceiver interface) DOS6.begin(SS_BAUD, SWSERIAL_8N1, SS_RX, SS_TX, false); if (!DOS6) { Serial.println("Software serial initialization failed."); while (true) ; // Do not proceed } Serial.println(F("Software serial initialized.")); Serial.println ("Setup complete"); flashLED(); // Indicate setup() complete (if no Serial) } void loop() { // Full duplex serListen(); if (BIDIR) udpListen(); } void serListen() { byte data_byte; while (DOS6.available()) { data_byte = DOS6.read(); Serial.print("0x"); Serial.print(data_byte, HEX); Serial.print(" "); if (rxNdx < RX_BUFFER_DIM) { serRxBuffer[rxNdx++] = data_byte; if (data_byte == EOL) { Serial.println(); sendUDP(); } } else { // Buffer full Serial.println(); sendUDP(); serRxBuffer[rxNdx++] = data_byte; } } } void sendUDP() { Udp.beginPacket(udpIPaddress, udpPort); Udp.write(serRxBuffer); Udp.endPacket(); zeroRxBuffer(); } void zeroRxBuffer() { for (int i=0; i