Arduino RS-485 a WiFi

En esta guía, exploraremos cómo usar el Arduino Uno R4 WiFi para construir un convertidor RS485 serial a WiFi. Con esta configuración, el Arduino leerá datos de una interfaz RS485 serial y los transmitirá a un servidor TCP, ya sea dentro de la misma red local (LAN) o de forma remota a través de Internet. También podrá recibir datos del servidor TCP y enviarlos de vuelta a través de la interfaz RS485 serial.

Estos pasos le permitirán establecer puentes de comunicación versátiles entre dispositivos RS-485 en serie y un servidor TCP/IP usando Arduino.

Convertidor RS-485 a WiFi para Arduino

Acerca de RS485 y TCP

Si no sabes cómo usar RS485 y la comunicación TCP con Arduino, aprende sobre ellos en los siguientes tutoriales:

Cómo funciona el convertidor de RS485 a WiFi

  • Arduino se conecta a un dispositivo serial mediante la interfaz RS-485.
  • Arduino funciona como cliente TCP que se conecta a un servidor TCP (puede ser un software de servidor TCP en tu PC o en otro Arduino programado como servidor TCP).
  • Arduino lee datos desde la interfaz RS-485 y los envía al servidor TCP.
  • Arduino recibe datos de la conexión TCP y los envía a la interfaz RS-485.

Diagrama de Cableado

  • Diagrama de cableado si se usa el puerto serie de hardware
Diagrama de cableado de Arduino TTL a RS-485

This image is created using Fritzing. Click to enlarge image

  • Diagrama de cableado si se usa software serial
Diagrama de cableado Arduino RS-485 a TTL

This image is created using Fritzing. Click to enlarge image

Código de Arduino para la Serial de Hardware

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-rs485-to-wifi */ #include <WiFiS3.h> const char* WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char* TCP_SERVER_ADDR = "192.168.0.26"; // CHANGE TO TCP SERVER'S IP ADDRESS const int TCP_SERVER_PORT = 1470; WiFiClient TCP_client; void setup() { Serial.begin(9600); Serial.println("Arduino: TCP CLIENT"); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } Serial.print("Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // attempt to connect to WiFi network: while (WiFi.begin(WIFI_SSID, WIFI_PASSWORD) != WL_CONNECTED) { delay(10000); // wait 10 seconds for connection: } Serial.print("Connected to WiFi "); Serial.println(WIFI_SSID); // connect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) Serial.println("Connected to TCP server"); else Serial.println("Failed to connect to TCP server"); } void loop() { if (TCP_client.connected()) { // read data from TCP and send them to RS485 interface if (TCP_client.available()) { char c = TCP_client.read(); Serial.write(c); } // read data from RS485 interface and send them to TCP if (Serial.available()) { char c = Serial.read(); TCP_client.write(c); } } else { Serial.println("Connection is disconnected"); TCP_client.stop(); // reconnect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) { Serial.println("Reconnected to TCP server"); } else { Serial.println("Failed to reconnect to TCP server"); delay(1000); } } }

Código de Arduino para Software Serial

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-rs485-to-wifi */ #include <WiFiS3.h> #include <SoftwareSerial.h> // define the SoftwareSerial object and their pins SoftwareSerial rs485(6, 7); // RX: 6, TX: 7 const char* WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char* TCP_SERVER_ADDR = "192.168.0.26"; // CHANGE TO TCP SERVER'S IP ADDRESS const int TCP_SERVER_PORT = 1470; WiFiClient TCP_client; void setup() { Serial.begin(9600); rs485.begin(9600); Serial.println("Arduino: TCP CLIENT"); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } Serial.print("Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // attempt to connect to WiFi network: while (WiFi.begin(WIFI_SSID, WIFI_PASSWORD) != WL_CONNECTED) { delay(10000); // wait 10 seconds for connection: } Serial.print("Connected to WiFi "); Serial.println(WIFI_SSID); // connect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) Serial.println("Connected to TCP server"); else Serial.println("Failed to connect to TCP server"); } void loop() { if (TCP_client.connected()) { // read data from TCP and send them to RS485 interface if (TCP_client.available()) { char c = TCP_client.read(); rs485.write(c); } // read data from RS485 interface and send them to TCP if (rs485.available()) { char c = rs485.read(); TCP_client.write(c); } } else { Serial.println("Connection is disconnected"); TCP_client.stop(); // reconnect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) { Serial.println("Reconnected to TCP server"); } else { Serial.println("Failed to reconnect to TCP server"); delay(1000); } } }

Pruebas

Puedes hacer una prueba enviando datos en los siguientes flujos:

  • Software de puerto serie (en tu PC) → RS-485 → Arduino → WiFi → Software de servidor TCP (en tu PC).
  • Software de servidor TCP (en tu PC) → WiFi → Arduino → RS-485 → Software de puerto serie (en tu PC).
Comunicación Arduino RS485 con PC

Para hacerlo, siga los siguientes pasos:

  • Si es la primera vez que usas Arduino Uno R4, consulta cómo configurar el entorno para Arduino Uno R4 en Arduino IDE.
  • Conecta Arduino Uno R4 WiFi a tu PC utilizando un módulo TTL a RS485 y un cable RS485 a USB como en el diagrama de cableado anterior
  • Instala un programa de terminal serie como Tera Term o PuTTY
  • Instala un programa de servidor TCP como ezTerm
  • Abre el programa de terminal serie y configura los parámetros de la comunicación serie (puerto COM, tasa de baudios...)
  • Abre el programa servidor TCP y configúralo como servidor TCP, luego haz clic en el botón Escuchar
Servidor TCP de ezTerm
  • Abre el Símbolo del sistema en tu PC.
  • Encuentra la dirección IP de tu PC ejecutando el siguiente comando:
ipconfig
  • La salida se ve como la siguiente:
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.26 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Actualiza la dirección IP del servidor TCP (tu PC) en el código de Arduino. En el ejemplo anterior: 192.168.0.26
  • Compila y carga el código a la placa Arduino haciendo clic en el botón Subir en el IDE de Arduino
  • Escribe algunos datos desde el programa Serial para enviarlos a Arduino a través de Serial.
  • Si tiene éxito, verás los datos de eco en el software del servidor TCP.
  • Escribe algunos datos desde el programa del servidor TCP para enviarlos a Arduino a través de TCP.
  • Si tiene éxito, verás los datos de eco en el programa Serial.
Arduino serial a TCP

Si desea utilizar un convertidor RS-485 a Ethernet comercial, puede comprar CSE-H55N2 Serial To Ethernet Converter

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!