Trabajando con el módulo Wi-Fi 5GHz del ESP32
Comunicaciones industriales: Ejemplo de Cliente-Servidor Wi-Fi de 5GHz usando el PLC industrial ESP32
8 abril, 2021 por
Trabajando con el módulo Wi-Fi 5GHz del ESP32
Boot & Work Corp. S.L., Quesada Dani Salvans


 Introducción


Los dispositivos de la familia de controladores ESP32 Ethernet & WiFi & BLE PLC tienen un chip integrado específico para Wi-Fi de 5GHz, llamado ISM43340. Como sabes, la banda Wi-Fi de 5GHz es una versión mejorada de las anteriores, igual que la banda de 2.4GHz, por ejemplo.

La tecnología de 5GHz tiene algunas ventajas en comparación con la banda de 2,5GHz, como 25 canales no solapados, menos interferencias, mayor velocidad de conexión y funciona con los estándares IEEE actualizados (802.11a, 802.11n, 802.11ac).

There is also a disadvantage: shorter network range. Related to that, in this post you are going to see a couple of examples about how to use the 5GHz of the PLC to act as a Server or a Client, tested with the appropriate Client and Server JavaScript codes. 


Odoo text and image block

Requisitos

Los puntos clave a tener en cuenta son los siguientes: 

  • Familia de PLCs ESP32 PLC

  • PPC (para cargar los programas en el PLC y ejecutar los códigos JavaScript)

Enlaces relacionados

Sist. de archivos SPIFFS

y ESP32 PLC (fundamentos)

Leer >>

Cómo controlar unc ESP32 PLC

a través de Bluetooth

Leer >>

Esquema de partición

en los ESP32 PLCs

Leer >>

Cómo encontrar

mi PLC industrial ideal

Leer >>

ESP32 PLC

familia de productos

Leer >>


 Server.ino - Client.js

En este primer ejemplo, el PLC actuará como Servidor y el PC como Cliente. 


Server.ino

Antes de cargar el código, recuerda poner tu SSID Wi-Fi y tu contraseña Wi-Fi.

// WiFi5 library example
// by Industrial Shields

#include <WiFi5.h>

const char* ssid = "YOUR-WIFI-SSID-HERE";
const char* key = "YOUR-WIFI-PASSWORD-HERE";
const uint16_t serverPort = 1234;

WiFi5Server server(serverPort);
const int bufferLen = 200;
uint8_t buffer[bufferLen];

////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(115200UL);

  if (WiFi5.begin(ssid, key) != WL_CONNECTED) {
    Serial.println("WiFi join error");
    while (true);
  }

  Serial.print("Server IP address: ");
  Serial.println(WiFi5.localIP());
    
  server.begin();

  Serial.println("WiFi5 example started");
}

////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  static uint32_t lastCheckTime = millis();
  if (millis() - lastCheckTime > 5000) {
    WiFi5Client client = server.available();
    if (client) {
      int rxLen = client.read(buffer, bufferLen);
      if (rxLen > 0) {
        Serial.print("RX: ");
        Serial.write(buffer, rxLen);

        client.stop();
      }
    }
    lastCheckTime = millis();
  }
}


Cuando ejecutes el programa del Servidor, vas a ver las siguientes impresiones en el Monitor Serial cuando el Cliente esté conectado (la dirección IP del Servidor es para conocerla y así poder usarla en el código client.js para establecer la conexión). Y el mensaje abcd recibido del Cliente. 

Server IP address: 192.168.1.70
WiFi5 example started
RX: abcd


client.js

Antes de subir el código, recuerda poner la dirección IP del servidor vista anteriormente.

#!/usr/bin/env node

const host = process.argv[2] || '192.168.1.70';
const port = Number(process.argv[3] || 1234);

const net = require('net');

const socket = new net.Socket();

socket.on('end', () => {
	console.log('Socket end done');
});

socket.on('error', (err) => {
	console.error(`Socket error: ${err}`);
});

socket.connect(port, host, () => {
	console.log('Socket connected');
	socket.end('abcd');
});


Cuando ejecutes el cliente con node.\Nclient.js, verás en la terminal cuándo el cliente está conectado:

Socket connected
Socket end done


 Server.js - Client.ino

En este segundo ejemplo, el PC actuará como Servidor y el PLC como Cliente. 


Server.js 

#!/usr/bin/env node

const net = require('net');

const server = net.createServer((socket) => {
	console.log(`client connected: ${socket.remoteAddress}`);

	socket.on('data', (data) => {
		console.log(`data received from ${socket.remoteAddress}: ${data}`);

		if (data.toString('utf-8') == 'get-number') {
			const number = (Date.now() * Math.random()) % 1000;
			socket.write(number.toFixed(0));

		} else {
			socket.write('unknown');
		}
	});

	socket.on('end', () => {
		console.log(`client disconnected: ${socket.remoteAddress}`);
	});

	socket.on('error', (err) => {
		console.error(`client ${socket.remoteAddress} error: ${err.message}`);
	});
});

server.on('error', (err) => {
	console.error(`server error: ${err.message}`);
});

server.listen(1234, () => {
	console.log(`server listening`);
});

Cuando ejecutes el servidor con node .\Nserver.js, verás en la terminal cuando el cliente está conectado (y la dirección del cliente):

server listening
client connected: ::ffff:192.168.1.213

client.ino

Antes de cargar el código, recuerda poner tu SSID Wi-Fi y tu contraseña Wi-Fi, así como la dirección IP del servidor. 

#include <WiFi5.h>

const char* ssid = "YOUR-WIFI-SSID-HERE";
const char* key = "YOUR-WIFI-PASSWORD-HERE";
const IPAddress serverIp(192, 168, 1, 213); const uint16_t serverPort = 1234; WiFi5Client client; uint32_t lastSendTime = 0; const int bufferLen = 200; uint8_t buffer[bufferLen]; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(115200UL); switch (WiFi5.begin(ssid, key)) { case WL_NO_SHIELD: Serial.println("WiFi error"); while (true); break; case WL_NO_SSID_AVAIL: Serial.println("No SSID available"); while (true); break; } Serial.println("WiFi5 example started"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { if (!client.connected()) { Serial.println("Connecting to server..."); if (!client.connect(serverIp, serverPort)) { Serial.println("Failed. Wait some time and retry"); delay(5000); } else { Serial.println("Client connected"); } } else { if (millis() - lastSendTime > 1000) { String msg("get-number"); if (!client.write((uint8_t*) msg.c_str(), msg.length())) { Serial.println("Write failed"); client.stop(); } lastSendTime = millis(); } int rxLen = client.read(buffer, bufferLen); if (rxLen < 0) { Serial.println("Read failed"); client.stop(); } else if (rxLen > 0) { Serial.print("RX: "); Serial.print(rxLen); Serial.print(": "); Serial.write(buffer, rxLen); Serial.println(); } } }


Cuando ejecutes el programa cliente, verás las siguientes impresiones en el Monitor Serial cuando el cliente esté conectado:

WiFi5 example started
Connecting to server...
Client connected
Connecting to server...
Failed. Wait some time and retry

No te preocupes por el mensaje Failed. Espera un tiempo y reintenta los mensajes siempre y cuando hayas visto el mensaje de Cliente conectado; en este momento, se ha establecido la conexión entre el cliente y el servidor. 

NOTA: Recuerda el proceso de carga de código con los PLCs de la familia ESP32. Puedes consultarlo en la Guía de Usuario así como en el Datasheet del producto. 
Trabajando con el módulo Wi-Fi 5GHz del ESP32
Boot & Work Corp. S.L., Quesada Dani Salvans
8 abril, 2021
Compartir
Archivar

¿En busca de tu PLC ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Comparativa PLC industrial >>

¿Quieres más información?

¡Rellena el formulario!

¡Cuéntame más!